openapi: 3.0.0
servers:
  - url: /api/v2
info:
  contact:
    url: https://ix-api.net
  description: |
    
    This API allows to config/change/delete Internet Exchange services.

    # Filters

    When querying collections, the provided query parameters
    are validated. Unknown query parameters are ignored.
    Providing invalid filter values should yield a validation error.
  title: IX-API
  version: 2.1.0
  x-apisguru-categories:
    - security
  x-logo:
    url: https://ix-api.net/ix-api/icons/cropped-favicon-1-180x180.png
  x-origin:
    - format: openapi
      url: https://docs.ix-api.net/v2/ix-api-latest.json
      version: "3.0"
  x-providerName: ix-api.net
security:
  - Bearer: []
tags:
  - description: |-
      An `Account` represents an individual customer account, organization
      or partner involved with the IXP. They are used to consume
      services from an IXP.

      Accounts can have a hierarchy, i.e. an
      account can have sub-accounts. The max-depth of
      the account-hierarchy may vary by implementer, but it's safe to
      assume an account can have sub-accounts.

      Each `Account` has a state. Only `Account`s in state `production`
      or `production_state_pending` are ready to consume services.

      There are `Contact`s associated with each account. Contacts can
      be assigned for `Role`s via `RoleAssignment`s. Depending on the
      IXP and the services the account wants to use, contacts with
      specific roles may be required.
      A contact with role `legal` is mandatory for an account to become
      operational.

      Only accounts with `billing_information` present can be used
      as a `billing_account`.
    name: accounts
  - description: |-
      Open an authorized session with the IX-API. This is equivalent to
      a 'login' endpoint.

      Upon success, you will receive an `access_token` and
      a `refreh_token`. Both are JWTs and have limited lifetimes. You
      can get information like their expiry time directly by parsing
      the tokens.

      Use the `access_token` as `Bearer` in your `Authorization` header
      for getting access to the API.

      When the session (i.e. the `access_token`) expires, use the
      `refresh_token` (if it's not yet expired) with the
      `refresh`-endpoint to reauthenticate and get a fresh `access_token`.
    name: auth
  - description: |-
      A `Connection` is a functional group of physical connections
      collected together into a LAG (aka trunk).

      A `connection` with only one `port` can be also configured as
      standalone which means no LAG configuration on the switch.
    name: connections
  - description: |-
      A `Contact` is a role undertaking a specific responsibility
      within an account, typically a department or agent of the
      customer company.

      `Contact`s are assigned multiple roles by `RoleAssignment`s.

      A contact is bound to the account by the `consuming_account` property.
    name: contacts
  - description: |-
      A `Device` is a network hardware device, typically a switch, which
      is located at a specified facility and inside a `PointOfPresence`.
      PoPs.

      They may be physically located at their related PoPs.
    name: devices
  - description: |-
      A `Facility` is a data centre, with a determined physical address,
      from which a defined set of PoPs can be accessed
    name: facilities
  - description: |-
      This endpoint provides a health status response implementing
      https://tools.ietf.org/id/draft-inadarei-api-health-check-04.html

      The schema describes the toplevel fields - however the
      implementation of health checks is up to the IX-API implementor.
    name: health
  - description: |-
      This endpoint provides information about the IX-API
      implementation of the exchange.

      You can find the implemented schema version and
      supported types and operations here.
    name: implementation
  - description: |-
      An `IP` is a IPv4 or 6 addresses, with a given validity period.
      Some services require IP addresses to work.

      When you are joining an `exchange_lan` network service
      for example, addresses on the peering lan will be assigned
      to you.
    name: ips
  - description: |-
      A `MAC` is a MAC addresses with a given validity period.

      Some services require MAC addresses to work.
      Please note that only *unicast* MAC addresses are allowed.
      You are not alllowed to use multicast or broadcast addresses.

      The address itself can not be updated after creation.
      However: It can be expired by changing the `valid_not_before`
      and `valid_not_after` properties.
    name: macs
  - description: |-
      A `MemberJoiningRule` defines a rule to allow or deny access for
      an `Account` to a access a `NetworkService`.

      Furthermore, some `NetworkService`s may only be visible if the
      querying account is listed in an allow rule.
    name: member-joining-rules
  - description: |-
      Services are provided directly on or can be consumed
      from inside a `MetroAreaNetwork`.

      Accounts can indicate their presence in a `MetroAreaNetwork`
      to others by adding a list of ids.
    name: metro-area-networks
  - description: |-
      A MetroArea exists if a `MetroAreaNetwork` or `Facility` is
      present in it.
    name: metro-areas
  - description: |-
      A `NetworkFeatureConfig` is a configuration for
      using a `NetworkFeature`.

      For certain `NetworkFeature`s, which are marked as required,
      one `NetworkFeatureConfig needs to be created in order to move
      the `NetworkServiceConfig` into `production`.
    name: network-feature-configs
  - description: |-
      A `NetworkFeature` represents additional funcationality of a single
      `NetworkService`.

      For certain `NetworkFeature`s, which are marked as required,
      one `NetworkFeatureConfig needs to be created in order to move
      the  `NetworkServiceConfig` into `production`.
    name: network-features
  - description: |-
      A `NetworkServiceConfig` is a customer's configuration for usage
      of a `NetworkService`, e.g. the configuration of a (subset of a)
      connection for that customer's traffic

      The `type` of the config determines the service you are
      configuring.

      You can find the services available to you on the platform,
      by querying the `NetworkService`s resource.

      For certain `NetworkFeature`s, which are marked as required,
      one `NetworkFeatureConfig needs to be created in order to move
      the  `NetworkServiceConfig` into `production`.
    name: network-service-configs
  - description: |-
      A `NetworkService` represents an instance of a `ProductOffering`.

      The exchange lan is a special case in which the `NetworkService` is
      managed by the exchange.

      All other `NetworkService`s are created and managed by an `Account`.
    name: network-services
  - description: |-
      A `PointOfPresence` is a technical installation within a Facility
      which is connected to a single `MetroAreaNetwork`. A single
      `MetroAreaNetwork`, however, may have multiple `PointOfPresence`s.
    name: pops
  - description: |-
      A `Port` is the point at which subscriber and
      IXP networks meet. A port is always associated with
      a `device` and `pop`, has a `speed` and a `media_type`.
    name: ports
  - description: |-
      A `ProductOffering` is an offer made by an exchange
      to be consumed by a client.
    name: product-offerings
  - description: A `Contact` can be assigned to many `Roles`.
    name: role-assignments
  - description: |-
      A `Role` enables a `Contact` to act for a specific purpose.

      Well-defined roles are: `implementation`, `noc` and `peering`.
      An implementer may choose to support them or not or may add
      additional ones.
    name: roles
paths:
  /accounts:
    get:
      description: |-
        Retrieve a list of `Account`s.

        This includes all accounts the currently authorized account
        is managing and the current account itself.
      operationId: accounts_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by state
          in: query
          name: state
          required: false
          schema:
            type: string
        - description: Filter by state__is_not
          in: query
          name: state__is_not
          required: false
          schema:
            type: string
        - description: Filter by managing_account
          in: query
          name: managing_account
          required: false
          schema:
            type: string
        - description: Filter by billable
          in: query
          name: billable
          required: false
          schema:
            type: integer
        - description: Filter by external_ref
          in: query
          name: external_ref
          required: false
          schema:
            type: string
        - description: Filter by name
          in: query
          name: name
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Account"
                type: array
          description: "List of: Account"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - accounts
    post:
      description: Create a new account.
      operationId: accounts_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AccountRequest"
        description: Account Request
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
          description: Account
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - accounts
  "/accounts/{id}":
    delete:
      description: |-
        Accounts can be deleted, when all services and configs
        are decommissioned or the account is not longer referenced
        e.g. as a `managing_account` or `billing_account`.

        Deleting an account will cascade to `contacts` and
        `role-assignments`.

        The request will immediately fail, if the above preconditions
        are not met.
      operationId: accounts_destroy
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
          description: Account
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - accounts
    get:
      description: Get a single account.
      operationId: accounts_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
          description: Account
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - accounts
    patch:
      description: Update parts of an account.
      operationId: accounts_partial_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/merge-patch+json:
            schema:
              $ref: "#/components/schemas/AccountUpdatePartial"
        description: Account Update Request
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
          description: Account
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - accounts
    put:
      description: Update the entire account.
      operationId: accounts_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AccountUpdate"
        description: Account Update Request
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
          description: Account
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - accounts
  /auth/refresh:
    post:
      description: |-
        Reauthenticate the API user, issue a new `access_token`
        and `refresh_token` pair by providing the `refresh_token`
        in the request body.
      operationId: auth_token_refresh
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RefreshTokenRequest"
        description: RefreshTokenRequest
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthToken"
          description: AuthToken
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                          - https://errors.ix-api.net/v2/not-authenticated.html
                        type: string
                    type: object
                  - {}
          description: Authentication
      security: []
      tags:
        - auth
  /auth/token:
    post:
      description: |-
        Authenticate an API user identified by `api_key` and
        `api_secret`.
      operationId: auth_token_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AuthTokenRequest"
        description: AuthTokenRequest
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthToken"
          description: AuthToken
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                          - https://errors.ix-api.net/v2/not-authenticated.html
                        type: string
                    type: object
                  - {}
          description: Authentication
      security: []
      tags:
        - auth
  /connections:
    get:
      description: List all `connection`s.
      operationId: connections_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by state
          in: query
          name: state
          required: false
          schema:
            type: string
        - description: Filter by state__is_not
          in: query
          name: state__is_not
          required: false
          schema:
            type: string
        - description: Filter by mode
          in: query
          name: mode
          required: false
          schema:
            type: string
        - description: Filter by mode__is_not
          in: query
          name: mode__is_not
          required: false
          schema:
            type: string
        - description: Filter by name
          in: query
          name: name
          required: false
          schema:
            type: string
        - description: Filter by metro_area_network
          in: query
          name: metro_area_network
          required: false
          schema:
            type: string
        - description: Filter by pop
          in: query
          name: pop
          required: false
          schema:
            type: string
        - description: Filter by facility
          in: query
          name: facility
          required: false
          schema:
            type: string
        - description: Filter by external_ref
          in: query
          name: external_ref
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Connection"
                type: array
          description: "List of: Connection"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - connections
  "/connections/{id}":
    get:
      description: Read a `connection`.
      operationId: connections_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Connection"
          description: Connection
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - connections
  /contacts:
    get:
      description: List available contacts managed by the authorized account.
      operationId: contacts_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by managing_account
          in: query
          name: managing_account
          required: false
          schema:
            type: string
        - description: Filter by consuming_account
          in: query
          name: consuming_account
          required: false
          schema:
            type: string
        - description: Filter by external_ref
          in: query
          name: external_ref
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Contact"
                type: array
          description: "List of: Contact"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - contacts
    post:
      description: Create a new contact.
      operationId: contacts_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ContactRequest"
        description: A contact creation request
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Contact"
          description: Contact
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - contacts
  "/contacts/{id}":
    delete:
      description: |-
        Remove a contact.

        Please note, that a contact can only be removed if
        it is not longer in use in a network service or config
        through a role assignment.
      operationId: contacts_destroy
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Contact"
          description: Contact
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Unable to fulfill your request.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/unable-to-fulfill.html
                        type: string
                    type: object
                  - {}
          description: UnableToFulfill
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - contacts
    get:
      description: Get a contact by it's id
      operationId: contacts_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Contact"
          description: Contact
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - contacts
    patch:
      description: Update parts of a contact
      operationId: contacts_partial_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/merge-patch+json:
            schema:
              $ref: "#/components/schemas/ContactRequestPartial"
        description: A contact creation request
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Contact"
          description: Contact
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - contacts
    put:
      description: Update a contact
      operationId: contacts_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ContactRequest"
        description: A contact creation request
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Contact"
          description: Contact
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - contacts
  /devices:
    get:
      description: List available devices
      operationId: devices_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by name
          in: query
          name: name
          required: false
          schema:
            type: string
        - description: Filter by capability_media_type
          in: query
          name: capability_media_type
          required: false
          schema:
            type: string
        - description: Filter by capability_speed
          in: query
          name: capability_speed
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__lt
          in: query
          name: capability_speed__lt
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__lte
          in: query
          name: capability_speed__lte
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__gt
          in: query
          name: capability_speed__gt
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__gte
          in: query
          name: capability_speed__gte
          required: false
          schema:
            type: integer
        - description: Filter by facility
          in: query
          name: facility
          required: false
          schema:
            type: string
        - description: Filter by pop
          in: query
          name: pop
          required: false
          schema:
            type: string
        - description: Filter by metro_area_network
          in: query
          name: metro_area_network
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Device"
                type: array
          description: "List of: Device"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - devices
  "/devices/{id}":
    get:
      description: Get a specific device identified by id
      operationId: devices_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Device"
          description: Device
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - devices
  /facilities:
    get:
      description: Get a (filtered) list of `facilities`.
      operationId: facilities_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by capability_media_type
          in: query
          name: capability_media_type
          required: false
          schema:
            type: string
        - description: Filter by capability_speed
          in: query
          name: capability_speed
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__lt
          in: query
          name: capability_speed__lt
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__lte
          in: query
          name: capability_speed__lte
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__gt
          in: query
          name: capability_speed__gt
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__gte
          in: query
          name: capability_speed__gte
          required: false
          schema:
            type: integer
        - description: Filter by organisation_name
          in: query
          name: organisation_name
          required: false
          schema:
            type: string
        - description: Filter by metro_area
          in: query
          name: metro_area
          required: false
          schema:
            type: string
        - description: Filter by metro_area_network
          in: query
          name: metro_area_network
          required: false
          schema:
            type: string
        - description: Filter by address_country
          in: query
          name: address_country
          required: false
          schema:
            type: string
        - description: Filter by address_locality
          in: query
          name: address_locality
          required: false
          schema:
            type: string
        - description: Filter by postal_code
          in: query
          name: postal_code
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Facility"
                type: array
          description: "List of: Facility"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - facilities
  "/facilities/{id}":
    get:
      description: Retrieve a facility by id
      operationId: facilities_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Facility"
                type: array
          description: "List of: Facility"
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - facilities
  /health:
    get:
      description: Get the IX-API service health status.
      operationId: api_health_read
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HealthResponse"
          description: Health Status Response
      tags:
        - health
  /implementation:
    get:
      description: Get the API implementation details.
      operationId: api_implementation_read
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ImplementationResponse"
          description: API Implementation
      tags:
        - implementation
  /ips:
    get:
      description: List all ip addresses (and prefixes).
      operationId: ips_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by managing_account
          in: query
          name: managing_account
          required: false
          schema:
            type: string
        - description: Filter by consuming_account
          in: query
          name: consuming_account
          required: false
          schema:
            type: string
        - description: Filter by external_ref
          in: query
          name: external_ref
          required: false
          schema:
            type: string
        - description: Filter by network_service
          in: query
          name: network_service
          required: false
          schema:
            type: string
        - description: Filter by network_service_config
          in: query
          name: network_service_config
          required: false
          schema:
            type: string
        - description: Filter by network_feature
          in: query
          name: network_feature
          required: false
          schema:
            type: string
        - description: Filter by network_feature_config
          in: query
          name: network_feature_config
          required: false
          schema:
            type: string
        - description: Filter by version
          in: query
          name: version
          required: false
          schema:
            type: integer
        - description: Filter by fqdn
          in: query
          name: fqdn
          required: false
          schema:
            type: string
        - description: Filter by prefix_length
          in: query
          name: prefix_length
          required: false
          schema:
            type: integer
        - description: Filter by valid_not_before
          in: query
          name: valid_not_before
          required: false
          schema:
            type: string
        - description: Filter by valid_not_after
          in: query
          name: valid_not_after
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/IpAddress"
                type: array
          description: "List of: IP-Address"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - ips
    post:
      description: Add an ip host address or network prefix.
      operationId: ips_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IpAddressRequest"
        description: IP-Address / Prefix allocation Request
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IpAddress"
          description: IP-Address
      tags:
        - ips
  "/ips/{id}":
    get:
      description: Get a single ip addresses by it's id.
      operationId: ips_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IpAddress"
          description: IP-Address
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - ips
    patch:
      description: |-
        Update parts of an ip address.


        As with the `PUT` opertaion, IP addresses, where you
        don't have update rights, will yield a `resource access denied`
        error when attempting an update.

        If the ip address was allocated for you, you might
        not be able to change anything but the `fqdn`.
      operationId: ips_partial_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/merge-patch+json:
            schema:
              $ref: "#/components/schemas/IpAddressUpdatePartial"
        description: IP-Address Update
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IpAddress"
          description: IP-Address
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - ips
    put:
      description: |-
        Update an ip address object.

        You can only update
        IP addresses within your current scope. Not all
        addresses you can read you can update.

        If the ip address was allocated for you, you might
        not be able to change anything but the `fqdn`.
      operationId: ips_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IpAddressUpdate"
        description: IP-Address Update
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IpAddress"
          description: IP-Address
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - ips
  /macs:
    get:
      description: List all mac addresses managed by the authorized customer.
      operationId: macs_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by managing_account
          in: query
          name: managing_account
          required: false
          schema:
            type: string
        - description: Filter by consuming_account
          in: query
          name: consuming_account
          required: false
          schema:
            type: string
        - description: Filter by external_ref
          in: query
          name: external_ref
          required: false
          schema:
            type: string
        - description: Filter by network_service_config
          in: query
          name: network_service_config
          required: false
          schema:
            type: string
        - description: Filter by address
          in: query
          name: address
          required: false
          schema:
            type: string
        - description: Filter by assigned_at
          in: query
          name: assigned_at
          required: false
          schema:
            type: string
        - description: Filter by valid_not_before
          in: query
          name: valid_not_before
          required: false
          schema:
            type: string
        - description: Filter by valid_not_after
          in: query
          name: valid_not_after
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/MacAddress"
                type: array
          description: "List of: MAC-Address"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - macs
    post:
      description: Register a mac address.
      operationId: macs_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MacAddressRequest"
        description: MAC-Address Request
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MacAddress"
          description: MAC-Address
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - macs
  "/macs/{id}":
    delete:
      description: Remove a mac address.
      operationId: macs_destroy
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MacAddress"
          description: MAC-Address
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Unable to fulfill your request.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/unable-to-fulfill.html
                        type: string
                    type: object
                  - {}
          description: UnableToFulfill
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - macs
    get:
      description: Get a single mac address by it's id.
      operationId: macs_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MacAddress"
          description: MAC-Address
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - macs
  /member-joining-rules:
    get:
      description: Get a list of joining rules
      operationId: member_joining_rules_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by network_service
          in: query
          name: network_service
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/MemberJoiningRule"
                type: array
          description: "List of: Polymorphic Member Joining Rule"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - member-joining-rules
    post:
      description: Create a member joining rule
      operationId: member_joining_rules_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MemberJoiningRuleRequest"
        description: Polymorphic Member Joining Rule Request
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MemberJoiningRule"
          description: Polymorphic Member Joining Rule
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - member-joining-rules
  "/member-joining-rules/{id}":
    delete:
      description: Delete a joining rule
      operationId: member_joining_rules_destroy
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MemberJoiningRule"
          description: Polymorphic Member Joining Rule
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Unable to fulfill your request.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/unable-to-fulfill.html
                        type: string
                    type: object
                  - {}
          description: UnableToFulfill
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - member-joining-rules
    get:
      description: Get a single rule
      operationId: member_joining_rules_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MemberJoiningRule"
          description: Polymorphic Member Joining Rule
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - member-joining-rules
    patch:
      description: Partially update a joining rule
      operationId: member_joining_rules_partial_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/merge-patch+json:
            schema:
              $ref: "#/components/schemas/MemberJoiningRuleUpdatePartial"
        description: Polymorphic Member Joining Rule Update
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MemberJoiningRule"
          description: Polymorphic Member Joining Rule
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - member-joining-rules
    put:
      description: Update a joining rule
      operationId: member_joining_rules_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MemberJoiningRuleUpdate"
        description: Polymorphic Member Joining Rule Update
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MemberJoiningRule"
          description: Polymorphic Member Joining Rule
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - member-joining-rules
  /metro-area-networks:
    get:
      description: List all MetroAreaNetworks
      operationId: metro_area_networks_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by name
          in: query
          name: name
          required: false
          schema:
            type: string
        - description: Filter by metro_area
          in: query
          name: metro_area
          required: false
          schema:
            type: string
        - description: Filter by service_provider
          in: query
          name: service_provider
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/MetroAreaNetwork"
                type: array
          description: "List of: MetroAreaNetwork"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - metro-area-networks
  "/metro-area-networks/{id}":
    get:
      description: Retrieve a MetroAreaNetwork
      operationId: metro_area_networks_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MetroAreaNetwork"
          description: MetroAreaNetwork
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - metro-area-networks
  /metro-areas:
    get:
      description: List all MetroAreas
      operationId: metro_areas_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/MetroArea"
                type: array
          description: "List of: MetroArea"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - metro-areas
  "/metro-areas/{id}":
    get:
      description: Get a single MetroArea
      operationId: metro_areas_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/MetroArea"
                type: array
          description: "List of: MetroArea"
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - metro-areas
  /network-feature-configs:
    get:
      description: Get all network feature configs.
      operationId: network_feature_configs_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by state
          in: query
          name: state
          required: false
          schema:
            type: string
        - description: Filter by state__is_not
          in: query
          name: state__is_not
          required: false
          schema:
            type: string
        - description: Filter by managing_account
          in: query
          name: managing_account
          required: false
          schema:
            type: string
        - description: Filter by consuming_account
          in: query
          name: consuming_account
          required: false
          schema:
            type: string
        - description: Filter by external_ref
          in: query
          name: external_ref
          required: false
          schema:
            type: string
        - description: Filter by type
          in: query
          name: type
          required: false
          schema:
            enum:
              - route_server
            type: string
        - description: Filter by service_config
          in: query
          name: service_config
          required: false
          schema:
            type: string
        - description: Filter by network_feature
          in: query
          name: network_feature
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/NetworkFeatureConfig"
                type: array
          description: "List of: Polymorphic Network Feature Config"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - network-feature-configs
    post:
      description: |-
        Create a configuration for a `NetworkFeature`
        defined in the `NetworkFeature`s collection.
      operationId: network_feature_configs_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NetworkFeatureConfigRequest"
        description: Polymorphic Network Feature Config Request
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkFeatureConfig"
          description: Polymorphic Network Feature Config
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - network-feature-configs
  "/network-feature-configs/{id}":
    delete:
      description: |-
        Remove a network feature config.

        The network feature config will be marked as
        `decommission_requested`.
        Decommissioning a network feature config will not
        cascade to related services or service configs.
      operationId: network_feature_configs_destroy
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkFeatureConfig"
          description: Polymorphic Network Feature Config
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Unable to fulfill your request.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/unable-to-fulfill.html
                        type: string
                    type: object
                  - {}
          description: UnableToFulfill
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-feature-configs
    get:
      description: Get a single network feature config.
      operationId: network_feature_configs_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkFeatureConfig"
          description: Polymorphic Network Feature Config
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-feature-configs
    patch:
      description: Update parts of a network feature configuration
      operationId: network_feature_configs_partial_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/merge-patch+json:
            schema:
              $ref: "#/components/schemas/NetworkFeatureConfigUpdatePartial"
        description: Polymorphic Network Feauture Config Update
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkFeatureConfig"
          description: Polymorphic Network Feature Config
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-feature-configs
    put:
      description: Update a network feature configuration
      operationId: network_feature_configs_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NetworkFeatureConfigUpdate"
        description: Polymorphic Network Feauture Config Update
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkFeatureConfig"
          description: Polymorphic Network Feature Config
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-feature-configs
  /network-features:
    get:
      description: List available network features.
      operationId: network_features_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by type
          in: query
          name: type
          required: false
          schema:
            enum:
              - route_server
            type: string
        - description: Filter by required
          in: query
          name: required
          required: false
          schema:
            type: string
        - description: Filter by network_service
          in: query
          name: network_service
          required: false
          schema:
            type: string
        - description: Filter by name
          in: query
          name: name
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/NetworkFeature"
                type: array
          description: "List of: Polymorphic Network Feature"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - network-features
  "/network-features/{id}":
    get:
      description: Get a single network feature by it's id.
      operationId: network_features_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkFeature"
          description: Polymorphic Network Feature
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-features
  /network-service-configs:
    get:
      description: Get all `network-service-config`s.
      operationId: network_service_configs_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by state
          in: query
          name: state
          required: false
          schema:
            type: string
        - description: Filter by state__is_not
          in: query
          name: state__is_not
          required: false
          schema:
            type: string
        - description: Filter by managing_account
          in: query
          name: managing_account
          required: false
          schema:
            type: string
        - description: Filter by consuming_account
          in: query
          name: consuming_account
          required: false
          schema:
            type: string
        - description: Filter by external_ref
          in: query
          name: external_ref
          required: false
          schema:
            type: string
        - description: Filter by type
          in: query
          name: type
          required: false
          schema:
            enum:
              - exchange_lan
              - p2p_vc
              - p2mp_vc
              - mp2mp_vc
              - cloud_vc
            type: string
        - description: Filter by inner_vlan
          in: query
          name: inner_vlan
          required: false
          schema:
            type: integer
        - description: Filter by outer_vlan
          in: query
          name: outer_vlan
          required: false
          schema:
            type: integer
        - description: Filter by capacity
          in: query
          name: capacity
          required: false
          schema:
            type: integer
        - description: Filter by network_service
          in: query
          name: network_service
          required: false
          schema:
            type: string
        - description: Filter by connection
          in: query
          name: connection
          required: false
          schema:
            type: string
        - description: Filter by product_offering
          in: query
          name: product_offering
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/NetworkServiceConfig"
                type: array
          description: "List of: Polymorphic Network Service Config"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - network-service-configs
    post:
      description: Create a `network-service-config`.
      operationId: network_service_configs_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NetworkServiceConfigRequest"
        description: Polymorhic Network Service Config Request
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkServiceConfig"
          description: Polymorphic Network Service Config
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - network-service-configs
  "/network-service-configs/{id}":
    delete:
      description: |-
        Request decommissioning the network service configuration.

        The network service config will assume the state
        `decommission_requested`.
        This will cascade to related resources like
        `network-feature-configs`.
      operationId: network_service_configs_destroy
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CancellationRequest"
        description: Service Cancellation Request
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkServiceConfig"
          description: Polymorphic Network Service Config
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Requested cancellation date outside of notice period.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/cancellation-policy-error.html
                          - https://errors.ix-api.net/v2/unable-to-fulfill.html
                        type: string
                    type: object
                  - properties:
                      charged_until:
                        description: |-
                          The date until the service is payed for.
                          Typically `≥ decommission_at`.
                        format: date
                        type: string
                      decommission_at:
                        description: |-
                          This field denotes the first possible cancellation
                          date of the service.

                          See the service `cancellation-policy` for details.
                        format: date
                        type: string
                    type: object
          description: CancellationPolicyError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-service-configs
    get:
      description: Get a `network-service-config`
      operationId: network_service_configs_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkServiceConfig"
          description: Polymorphic Network Service Config
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-service-configs
    patch:
      description: Update parts of an exisiting `network-service-config`.
      operationId: network_service_configs_partial_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/merge-patch+json:
            schema:
              $ref: "#/components/schemas/NetworkServiceConfigUpdatePartial"
        description: Polymorphic Network Service Config
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkServiceConfig"
          description: Polymorphic Network Service Config
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-service-configs
    put:
      description: Update an exisiting `network-service-config`
      operationId: network_service_configs_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NetworkServiceConfigUpdate"
        description: Polymorphic Network Service Config
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkServiceConfig"
          description: Polymorphic Network Service Config
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-service-configs
  "/network-service-configs/{id}/cancellation-policy":
    get:
      description: |-
        The cancellation-policy can be queried to answer
        the questions:

        If I cancel my subscription, *when will it be technically
        decommissioned*?
        If I cancel my subscription, *until what date will I be charged*?

        When the query parameter `decommision_at` is not provided
        it will provide the first possible cancellation date
        and charge period if cancelled at above date.

        The granularity of the date field is a day, the start and end
        of which are to be interpreted by the IXP (some may use UTC,
        some may use their local time zone).
      operationId: network_service_config_cancellation_policy_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
        - description: |-
            By providing a date in the format `YYYY-MM-DD` you can
            query the policy what would happen if you request a
            decommissioning on this date.
          in: query
          name: decommission_at
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CancellationPolicy"
          description: Cancellation Policy
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-service-configs
  /network-services:
    get:
      description: List available `NetworkService`s.
      operationId: network_services_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by state
          in: query
          name: state
          required: false
          schema:
            type: string
        - description: Filter by state__is_not
          in: query
          name: state__is_not
          required: false
          schema:
            type: string
        - description: Filter by managing_account
          in: query
          name: managing_account
          required: false
          schema:
            type: string
        - description: Filter by consuming_account
          in: query
          name: consuming_account
          required: false
          schema:
            type: string
        - description: Filter by external_ref
          in: query
          name: external_ref
          required: false
          schema:
            type: string
        - description: Filter by type
          in: query
          name: type
          required: false
          schema:
            enum:
              - exchange_lan
              - p2p_vc
              - p2mp_vc
              - mp2mp_vc
              - cloud_vc
            type: string
        - description: Filter by pop
          in: query
          name: pop
          required: false
          schema:
            type: string
        - description: Filter by product_offering
          in: query
          name: product_offering
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/NetworkService"
                type: array
          description: "List of: Polymorphic Network Services"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - network-services
    post:
      description: Create a new network service
      operationId: network_services_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NetworkServiceRequest"
        description: Polymorphic Network Service Request
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkService"
          description: Polymorphic Network Services
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - network-services
  "/network-services/{id}":
    delete:
      description: |-
        Request decomissioning of the network service.

        The network service will enter the state of
        `decommission_requested`. The request will
        cascade to related network service and feature
        configs.

        An *optional request body* can be provided to request
        a specific service termination date.

        If no date is given in the request body, it is assumed to
        be the earliest possible date.

        Possible values for `decommission_at` can be queried
        through the `network_service_cancellation_policy_read`
        operation.

        The response will contain the dates on which the
        changes will be effected.
      operationId: network_services_destroy
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CancellationRequest"
        description: Service Cancellation Request
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkService"
          description: Polymorphic Network Services
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Requested cancellation date outside of notice period.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/cancellation-policy-error.html
                          - https://errors.ix-api.net/v2/unable-to-fulfill.html
                        type: string
                    type: object
                  - properties:
                      charged_until:
                        description: |-
                          The date until the service is payed for.
                          Typically `≥ decommission_at`.
                        format: date
                        type: string
                      decommission_at:
                        description: |-
                          This field denotes the first possible cancellation
                          date of the service.

                          See the service `cancellation-policy` for details.
                        format: date
                        type: string
                    type: object
          description: CancellationPolicyError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-services
    get:
      description: Get a specific `network-service` by id.
      operationId: network_services_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkService"
          description: Polymorphic Network Services
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-services
    patch:
      description: Partially update a network service
      operationId: network_services_partial_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/merge-patch+json:
            schema:
              $ref: "#/components/schemas/NetworkServiceRequestPartial"
        description: Polymorphic Network Service Request
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkService"
          description: Polymorphic Network Services
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-services
    put:
      description: Update a network service
      operationId: network_services_update
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NetworkServiceRequest"
        description: Polymorphic Network Service Request
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkService"
          description: Polymorphic Network Services
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-services
  "/network-services/{id}/cancellation-policy":
    get:
      description: |-
        The cancellation-policy can be queried to answer
        the questions:

        If I cancel my service, *when will it be technically
        decommissioned*?
        If I cancel my service, *until what date will I be charged*?

        When the query parameter `decommision_at` is not provided
        it will provide the first possible cancellation date
        and charge period if cancelled at above date.

        The granularity of the date field is a day, the start and end
        of which are to be interpreted by the IXP (some may use UTC,
        some may use their local time zone).
      operationId: network_service_cancellation_policy_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
        - description: |-
            By providing a date in the format `YYYY-MM-DD` you can
            query the policy what would happen if you request a
            decommissioning on this date.
          in: query
          name: decommission_at
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CancellationPolicy"
          description: Cancellation Policy
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-services
  "/network-services/{id}/change-request":
    delete:
      description: Retract or reject a change to the network service.
      operationId: network_service_change_request_destroy
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkServiceChangeRequest"
          description: NetworkServiceChangeRequest
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Unable to fulfill your request.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/unable-to-fulfill.html
                        type: string
                    type: object
                  - {}
          description: UnableToFulfill
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-services
    get:
      description: Get the change request.
      operationId: network_service_change_request_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkServiceChangeRequest"
          description: NetworkServiceChangeRequest
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - network-services
    post:
      description: |-
        Request a change to the network service.

        A participant in a network service of type
        `p2p_vc` can issue a change request, expressing a
        desired change in the capacity.
        The change is accepted when all sides have configured
        the network service configs with the new bandwidth.
        These changes can sometimes require a change of the
        product offering.
        The product offering may only differ in regards to
        bandwidth.

        The network service will change it's state from `production`
        into `production_change_pending`.

        Only one change request may be issued at a time.
      operationId: network-service-change-request_create
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NetworkServiceChangeRequest"
        description: NetworkServiceChangeRequest
      responses:
        "202":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NetworkServiceChangeRequest"
          description: NetworkServiceChangeRequest
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - network-services
  /pops:
    get:
      description: List all PoPs
      operationId: pops_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by facility
          in: query
          name: facility
          required: false
          schema:
            type: string
        - description: Filter by metro_area_network
          in: query
          name: metro_area_network
          required: false
          schema:
            type: string
        - description: Filter by capability_media_type
          in: query
          name: capability_media_type
          required: false
          schema:
            type: string
        - description: Filter by capability_speed
          in: query
          name: capability_speed
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__lt
          in: query
          name: capability_speed__lt
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__lte
          in: query
          name: capability_speed__lte
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__gt
          in: query
          name: capability_speed__gt
          required: false
          schema:
            type: integer
        - description: Filter by capability_speed__gte
          in: query
          name: capability_speed__gte
          required: false
          schema:
            type: integer
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/PointOfPresence"
                type: array
          description: "List of: Point Of Presence"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - pops
  "/pops/{id}":
    get:
      description: Get a single point of presence
      operationId: pops_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PointOfPresence"
          description: Point Of Presence
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - pops
  /ports:
    get:
      description: List all ports.
      operationId: ports_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by state
          in: query
          name: state
          required: false
          schema:
            type: string
        - description: Filter by state__is_not
          in: query
          name: state__is_not
          required: false
          schema:
            type: string
        - description: Filter by media_type
          in: query
          name: media_type
          required: false
          schema:
            type: string
        - description: Filter by pop
          in: query
          name: pop
          required: false
          schema:
            type: string
        - description: Filter by name
          in: query
          name: name
          required: false
          schema:
            type: string
        - description: Filter by external_ref
          in: query
          name: external_ref
          required: false
          schema:
            type: string
        - description: Filter by device
          in: query
          name: device
          required: false
          schema:
            type: string
        - description: Filter by speed
          in: query
          name: speed
          required: false
          schema:
            type: string
        - description: Filter by connection
          in: query
          name: connection
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Port"
                type: array
          description: "List of: Port"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - ports
  "/ports/{id}":
    get:
      description: Retrieve a port.
      operationId: ports_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Port"
          description: Port
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - ports
  /product-offerings:
    get:
      description: List all (filtered) products-offerings available on the platform
      operationId: product_offerings_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by type
          in: query
          name: type
          required: false
          schema:
            enum:
              - exchange_lan
              - p2p_vc
              - mp2mp_vc
              - p2mp_vc
              - cloud_vc
            type: string
        - description: Filter by name
          in: query
          name: name
          required: false
          schema:
            type: string
        - description: Filter by handover_metro_area
          in: query
          name: handover_metro_area
          required: false
          schema:
            type: string
        - description: Filter by handover_metro_area_network
          in: query
          name: handover_metro_area_network
          required: false
          schema:
            type: string
        - description: Filter by service_metro_area
          in: query
          name: service_metro_area
          required: false
          schema:
            type: string
        - description: Filter by service_metro_area_network
          in: query
          name: service_metro_area_network
          required: false
          schema:
            type: string
        - description: Filter by service_provider
          in: query
          name: service_provider
          required: false
          schema:
            type: string
        - description: Filter by downgrade_allowed
          in: query
          name: downgrade_allowed
          required: false
          schema:
            enum:
              - "true"
              - "true"
            type: string
        - description: Filter by upgrade_allowed
          in: query
          name: upgrade_allowed
          required: false
          schema:
            enum:
              - "true"
              - "false"
            type: string
        - description: |-
            Find product offerings where bandwidth is
            within the range of `bandwidth_min` and `bandwidth_max`.
          in: query
          name: bandwidth
          required: false
          schema:
            type: integer
        - description: Filter by physical_port_speed
          in: query
          name: physical_port_speed
          required: false
          schema:
            type: integer
        - description: Filter by service_provider_region
          in: query
          name: service_provider_region
          required: false
          schema:
            type: string
        - description: Filter by service_provider_pop
          in: query
          name: service_provider_pop
          required: false
          schema:
            type: string
        - description: Filter by delivery_method
          in: query
          name: delivery_method
          required: false
          schema:
            enum:
              - dedicated
              - shared
            type: string
        - description: |-
            For product offerings of type `cloud_vc`, if the
            `service_provider_workflow` is `provider_first` the
            `cloud_key` will be used for filtering the relevant
            offerings.
          in: query
          name: cloud_key
          required: false
          schema:
            type: string
        - description: |
            Returned objects only have properties which are
            present in the list of fields.
            The required `type` property is *implicitly* included.
            The results are *deduplicated*.
          example: handover_metro_area,service_provider
          in: query
          name: fields
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/ProductOfferingPartial"
                type: array
          description: "List of: Polymorphic Product Offering"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - product-offerings
  "/product-offerings/{id}":
    get:
      description: Get a single products-offering by id.
      operationId: product_offerings_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductOffering"
          description: Polymorphic Product Offering
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - product-offerings
  /role-assignments:
    get:
      description: List all role assignments for a contact.
      operationId: role_assignments_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by contact
          in: query
          name: contact
          required: false
          schema:
            type: string
        - description: Filter by role
          in: query
          name: role
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/RoleAssignment"
                type: array
          description: "List of: A role assignment for a contact"
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - role-assignments
    post:
      description: |-
        Assign a `Role` to a `Contact`.

        The contact needs to have all fields filled, which the
        role requires. If this is not the case a `400`
        `UnableToFulfill` will be returned.
      operationId: role_assignments_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RoleAssignmentRequest"
        description: A role assignment request
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RoleAssignment"
          description: A role assignment for a contact
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Some fields did not validate.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/validation-error.html
                          - https://errors.ix-api.net/v2/unable-to-fulfill.html
                        type: string
                    type: object
                  - {}
          description: ValidationError
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
      tags:
        - role-assignments
  "/role-assignments/{assignment_id}":
    delete:
      description: |-
        Remove a role assignment from a contact.

        If the contact is still in use with a given role required,
        this will yield an `UnableToFulfill` error.
      operationId: role_assignments_destroy
      parameters:
        - description: Get by assignment_id
          in: path
          name: assignment_id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RoleAssignment"
          description: A role assignment for a contact
        "400":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 400
                      title:
                        example: Unable to fulfill your request.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/unable-to-fulfill.html
                        type: string
                    type: object
                  - {}
          description: UnableToFulfill
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - role-assignments
    get:
      description: Get a role assignment for a contact.
      operationId: role_assignments_read
      parameters:
        - description: Get by assignment_id
          in: path
          name: assignment_id
          required: true
          schema:
            description: ""
            title: ""
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RoleAssignment"
          description: A role assignment for a contact
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
        "403":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 403
                      title:
                        example: You do not have permission to perform this action.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/permission-denied.html
                        type: string
                    type: object
                  - {}
          description: PermissionDenied
        "404":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 404
                      title:
                        example: Not found.
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/not-found.html
                        type: string
                    type: object
                  - {}
          description: NotFound
      tags:
        - role-assignments
  /roles:
    get:
      description: List all roles available.
      operationId: roles_list
      parameters:
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by name
          in: query
          name: name
          required: false
          schema:
            type: string
        - description: Filter by contact
          in: query
          name: contact
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: "#/components/schemas/Role"
                type: array
          description: "List of: A role for a contact"
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
      tags:
        - roles
  "/roles/{id}":
    get:
      description: Get a single `Role`.
      operationId: roles_read
      parameters:
        - description: Get by id
          in: path
          name: id
          required: true
          schema:
            description: ""
            title: ""
            type: string
        - description: Filter by id
          explode: false
          in: query
          name: id
          required: false
          schema:
            example: id1,id2,id3
            items:
              type: string
            type: array
          style: form
        - description: Filter by name
          in: query
          name: name
          required: false
          schema:
            type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Role"
          description: A role for a contact
        "401":
          content:
            application/json:
              schema:
                allOf:
                  - $ref: "#/components/schemas/ProblemResponse"
                  - properties:
                      status:
                        example: 401
                      title:
                        example: Authentication Credentials Invalid
                      type:
                        enum:
                          - https://errors.ix-api.net/v2/authentication-error.html
                          - https://errors.ix-api.net/v2/signature-expired.html
                        type: string
                    type: object
                  - {}
          description: Authentication
      tags:
        - roles
components:
  schemas:
    Account:
      allOf:
        - $ref: "#/components/schemas/AccountPartial"
        - required:
            - state
            - name
            - metro_area_network_presence
            - id
          title: Account
          type: object
    AccountPartial:
      description: Account
      properties:
        address:
          $ref: "#/components/schemas/Address"
        billing_information:
          $ref: "#/components/schemas/BillingInformation"
        discoverable:
          default: false
          description: |-
            The account will be included for all members of the
            ix in the list of accounts.

            Only `id`, `name` and `present_in_metro_area_networks`
            are provided to other members.
          type: boolean
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 80
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        legal_name:
          description: |
            Legal name of the organisation.
            Only required when it's different from the account name.
          example: Moon Network Services LLS.
          maxLength: 80
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of a managing account. Can be used for creating
            a customer hierachy.
          example: IX:Account:231
          nullable: true
          type: string
        metro_area_network_presence:
          description: |
            Informal list of `MetroAreaNetwork` ids, indicating the
            presence to other accounts.
            The list is maintained by the account and can be empty.
          example:
            - "14021"
            - "12939"
          items:
            type: string
          type: array
        name:
          description: |
            Name of the account, how it gets represented
            in e.g. a "customers list".
          example: Moonpeer Inc.
          maxLength: 80
          type: string
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
      title: PartialAccount
      type: object
    AccountRequest:
      allOf:
        - $ref: "#/components/schemas/AccountRequestPartial"
        - required:
            - name
            - address
          title: AccountRequest
          type: object
    AccountRequestPartial:
      description: Account Request
      properties:
        address:
          $ref: "#/components/schemas/Address"
        billing_information:
          $ref: "#/components/schemas/BillingInformation"
        discoverable:
          default: false
          description: |-
            The account will be included for all members of the
            ix in the list of accounts.

            Only `id`, `name` and `present_in_metro_area_networks`
            are provided to other members.
          type: boolean
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 80
          nullable: true
          type: string
        legal_name:
          description: |
            Legal name of the organisation.
            Only required when it's different from the account name.
          example: Moon Network Services LLS.
          maxLength: 80
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of a managing account. Can be used for creating
            a customer hierachy.
          example: IX:Account:231
          nullable: true
          type: string
        metro_area_network_presence:
          default: []
          description: |
            Informal list of `MetroAreaNetwork` ids, indicating the
            presence to other accounts.
            The list is maintained by the account and can be empty.
          example:
            - "14021"
            - "12939"
          items:
            type: string
          type: array
        name:
          description: |
            Name of the account, how it gets represented
            in e.g. a "customers list".
          example: Moonpeer Inc.
          maxLength: 80
          type: string
      title: PartialAccountRequest
      type: object
    AccountUpdate:
      allOf:
        - $ref: "#/components/schemas/AccountUpdatePartial"
        - required:
            - name
            - metro_area_network_presence
            - address
          title: AccountUpdate
          type: object
    AccountUpdatePartial:
      description: Account Update Request
      properties:
        address:
          $ref: "#/components/schemas/Address"
        billing_information:
          $ref: "#/components/schemas/BillingInformation"
        discoverable:
          default: false
          description: |-
            The account will be included for all members of the
            ix in the list of accounts.

            Only `id`, `name` and `present_in_metro_area_networks`
            are provided to other members.
          type: boolean
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 80
          nullable: true
          type: string
        legal_name:
          description: |
            Legal name of the organisation.
            Only required when it's different from the account name.
          example: Moon Network Services LLS.
          maxLength: 80
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of a managing account. Can be used for creating
            a customer hierachy.
          example: IX:Account:231
          nullable: true
          type: string
        metro_area_network_presence:
          description: |
            Informal list of `MetroAreaNetwork` ids, indicating the
            presence to other accounts.
            The list is maintained by the account and can be empty.
          example:
            - "14021"
            - "12939"
          items:
            type: string
          type: array
        name:
          description: |
            Name of the account, how it gets represented
            in e.g. a "customers list".
          example: Moonpeer Inc.
          maxLength: 80
          type: string
      title: PartialAccountUpdate
      type: object
    Address:
      allOf:
        - $ref: "#/components/schemas/AddressPartial"
        - required:
            - country
            - locality
            - postal_code
            - street_address
          title: Address
          type: object
    AddressPartial:
      description: ""
      properties:
        country:
          description: ISO 3166-1 alpha-2 country code, for example DE
          example: US
          maxLength: 2
          type: string
        locality:
          description: The locality/city. For example, Mountain View.
          example: Mountain View
          maxLength: 40
          type: string
        post_office_box_number:
          description: The post office box number for PO box addresses.
          example: "2335232"
          maxLength: 80
          nullable: true
          type: string
        postal_code:
          description: A postal code. For example, 9404
          example: "9409"
          maxLength: 24
          type: string
        region:
          description: The region. For example, CA
          example: CA
          maxLength: 80
          nullable: true
          type: string
        street_address:
          description: The street address. For example, 1600 Amphitheatre Pkwy.
          example: 1600 Amphitheatre Pkwy.
          maxLength: 80
          type: string
      title: PartialAddress
      type: object
    AllowMemberJoiningRule:
      allOf:
        - $ref: "#/components/schemas/AllowMemberJoiningRulePartial"
        - required:
            - managing_account
            - consuming_account
            - id
            - network_service
            - type
          title: AllowMemberJoiningRule
          type: object
    AllowMemberJoiningRulePartial:
      description: A rule for members joining a private vlan
      properties:
        capacity_max:
          description: |-
            An optional rate limit which has precedence over
            the capacity set in the network service config.
          minimum: 1
          nullable: true
          type: integer
        capacity_min:
          description: |-
            Require an optional minimum capacity to join
            the network service.
          minimum: 1
          nullable: true
          type: integer
        consuming_account:
          description: |
            The `id` of the account to which access to the
            network service should be granted or denied.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_service:
          type: string
        type:
          example: allow
          type: string
      required:
        - type
      title: PartialAllowMemberJoiningRule
      type: object
    AllowMemberJoiningRuleRequest:
      allOf:
        - $ref: "#/components/schemas/AllowMemberJoiningRuleRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - network_service
            - type
          title: AllowMemberJoiningRuleRequest
          type: object
    AllowMemberJoiningRuleRequestPartial:
      description: A new vlan member joining rule
      properties:
        capacity_max:
          description: |-
            An optional rate limit which has precedence over
            the capacity set in the network service config.
          minimum: 1
          nullable: true
          type: integer
        capacity_min:
          description: |-
            Require an optional minimum capacity to join
            the network service.
          minimum: 1
          nullable: true
          type: integer
        consuming_account:
          description: |
            The `id` of the account to which access to the
            network service should be granted or denied.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_service:
          type: string
        type:
          example: allow
          type: string
      required:
        - type
      title: PartialAllowMemberJoiningRuleRequest
      type: object
    AllowMemberJoiningRuleUpdate:
      allOf:
        - $ref: "#/components/schemas/AllowMemberJoiningRuleUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - type
          title: AllowMemberJoiningRuleUpdate
          type: object
    AllowMemberJoiningRuleUpdatePartial:
      description: A vlan member joining rule update
      properties:
        capacity_max:
          description: |-
            An optional rate limit which has precedence over
            the capacity set in the network service config.
          minimum: 1
          nullable: true
          type: integer
        capacity_min:
          description: |-
            Require an optional minimum capacity to join
            the network service.
          minimum: 1
          nullable: true
          type: integer
        consuming_account:
          description: |
            The `id` of the account to which access to the
            network service should be granted or denied.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        type:
          example: allow
          type: string
      required:
        - type
      title: PartialAllowMemberJoiningRuleUpdate
      type: object
    AuthToken:
      allOf:
        - $ref: "#/components/schemas/AuthTokenPartial"
        - required:
            - access_token
            - refresh_token
          title: AuthToken
          type: object
    AuthTokenPartial:
      description: AuthToken
      properties:
        access_token:
          type: string
        refresh_token:
          type: string
      title: PartialAuthToken
      type: object
    AuthTokenRequest:
      allOf:
        - $ref: "#/components/schemas/AuthTokenRequestPartial"
        - required:
            - api_key
            - api_secret
          title: AuthTokenRequest
          type: object
    AuthTokenRequestPartial:
      description: AuthTokenRequest
      properties:
        api_key:
          maxLength: 16
          minLength: 16
          type: string
        api_secret:
          maxLength: 86
          minLength: 86
          type: string
      title: PartialAuthTokenRequest
      type: object
    BillingInformation:
      allOf:
        - $ref: "#/components/schemas/BillingInformationPartial"
        - required:
            - name
            - address
          title: BillingInformation
          type: object
    BillingInformationPartial:
      description: |-
        Optional information required for issuing invoices.
        Only accounts with `billing_information` present can be used
        as a `billing_account`.
      properties:
        address:
          $ref: "#/components/schemas/Address"
        name:
          description: |
            Name of the organisation receiving invoices.
          example: Moonoc Network Services LLS.
          maxLength: 80
          type: string
        vat_number:
          description: |
            Value-added tax number, required for
            european reverse charge system.
          example: UK2300000042
          maxLength: 20
          minLength: 2
          nullable: true
          type: string
      title: PartialBillingInformation
      type: object
    Cancelable:
      allOf:
        - $ref: "#/components/schemas/CancelablePartial"
        - title: Cancelable
          type: object
    CancelablePartial:
      description: Service or config can be canceled
      properties:
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
      title: PartialCancelable
      type: object
    CancellationPolicy:
      allOf:
        - $ref: "#/components/schemas/CancellationPolicyPartial"
        - required:
            - decommission_at
            - charged_until
          title: CancellationPolicy
          type: object
    CancellationPolicyPartial:
      description: Cancellation Policy
      properties:
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.
          format: date
          type: string
        decommission_at:
          description: |-
            This field denotes the first possible cancellation
            date of the service.
          format: date
          type: string
      title: PartialCancellationPolicy
      type: object
    CancellationRequest:
      allOf:
        - $ref: "#/components/schemas/CancellationRequestPartial"
        - title: CancellationRequest
          type: object
    CancellationRequestPartial:
      description: Service Cancellation Request
      properties:
        decommission_at:
          description: |-
            An optional date for scheduling the cancellation
            and service decommissioning.
          format: date
          type: string
      title: PartialCancellationRequest
      type: object
    CloudNetworkProductOffering:
      allOf:
        - $ref: "#/components/schemas/CloudNetworkProductOfferingPartial"
        - required:
            - id
            - name
            - display_name
            - provider_vlans
            - resource_type
            - handover_metro_area_network
            - handover_metro_area
            - service_metro_area_network
            - service_metro_area
            - bandwidth_min
            - bandwidth_max
            - physical_port_speed
            - service_provider
            - downgrade_allowed
            - upgrade_allowed
            - service_provider_region
            - service_provider_pop
            - service_provider_workflow
            - delivery_method
            - diversity
            - type
          title: CloudNetworkProductOffering
          type: object
    CloudNetworkProductOfferingPartial:
      description: Cloud Network Product Offering
      properties:
        bandwidth_max:
          description: |-
            When not `null`, this value enforces a mandatory
            rate limit for all network service configs.
          minimum: 0
          nullable: true
          type: integer
        bandwidth_min:
          description: |-
            When configuring access to the network service, at least
            this `capacity` must be provided.
          minimum: 0
          nullable: true
          type: integer
        delivery_method:
          description: The exchange delivers the service over a `shared` or `dedicated` NNI.
          enum:
            - dedicated
            - shared
          type: string
        display_name:
          maxLength: 256
          type: string
        diversity:
          description: |-
            The service can be delivered over multiple handovers from
            the exchange to the `service_provider`.
            The `diversity` denotes the number of handovers between the
            exchange and the service provider. A value of two signals a
            redundant service.

            Only one network service configuration for each `handover` and
            `cloud_vlan` can be created.
          minimum: 1
          type: integer
        downgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a lower bandwidth.
          type: boolean
        handover_metro_area:
          description: |
            Id of the `MetroArea`. The network service will be
            accessed from this metro area.
          example: met:29381993:NYC
          type: string
        handover_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`. The service will be accessed
            through the handover metro area network.
          example: "191239810"
          type: string
        id:
          maxLength: 80
          type: string
        name:
          description: Name of the product
          maxLength: 160
          type: string
        physical_port_speed:
          description: |-
            If the service is dependent on the speed of
            the physical port this field denotes the speed.
          minimum: 0
          nullable: true
          type: integer
        provider_vlans:
          description: The `NetworkService` provides `single` or `multi`ple vlans.
          enum:
            - single
            - multi
          type: string
        resource_type:
          description: |
            The resource type refers to an ix-api resource.
          enum:
            - connection
            - demarc
            - network_service
            - network_service_config
          example: network_service
          type: string
        service_metro_area:
          description: |
            Id of the `MetroArea`. The service is delivered
            in this metro area.
          example: met:213913485:LON
          type: string
        service_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`.
            The service is directly provided on the metro area network.
          example: "9123843"
          type: string
        service_provider:
          description: |
            The name of the provider providing the service.
          example: AWS
          type: string
        service_provider_pop:
          description: |
            The datacenter description of the partner NNI to the
            service provider.
          example: INX6
          maxLength: 16
          nullable: true
          type: string
        service_provider_region:
          description: |
            The service provider offers the network service for a
            specific region.
          example: eu-central-1
          nullable: true
          type: string
        service_provider_workflow:
          description: |
            When the workflow is `provider_first` the subscriber creates
            a circuit with the cloud provider and provides a `cloud_key` for filtering
            the product-offerings.

            If the workflow is `exchange_first` the IX will create
            the cloud circuit on the provider side.
          enum:
            - exchange_first
            - provider_first
          example: exchange_first
          type: string
        type:
          example: cloud_vc
          type: string
        upgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a higher bandwidth.
          type: boolean
      required:
        - type
      title: PartialCloudNetworkProductOffering
      type: object
    CloudNetworkService:
      allOf:
        - $ref: "#/components/schemas/CloudNetworkServicePartial"
        - required:
            - state
            - id
            - product_offering
            - managing_account
            - consuming_account
            - billing_account
            - cloud_key
            - diversity
            - provider_ref
            - type
          title: CloudNetworkService
          type: object
    CloudNetworkServiceConfig:
      allOf:
        - $ref: "#/components/schemas/CloudNetworkServiceConfigPartial"
        - required:
            - state
            - id
            - network_service
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - handover
            - cloud_vlan
            - type
          title: CloudNetworkServiceConfig
          type: object
    CloudNetworkServiceConfigPartial:
      description: Cloud Network Service Config
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        cloud_vlan:
          description: |-
            If the `provider_vlans` property of the `ProductOffering` is
            `multi`, a numeric value refers to a specific vlan on the service
            provider side.

            Otherwise, if set to `null`, it refers to all unmatched
            vlan ids on the service provider side. (All vlan ids from the
            service provider side are presented as tags within any vlans specified
            in `vlan_config`.)

            If the `provider_vlans` property of the `ProductOffering` is `single`,
            the `cloud_vlan` MUST be `null` or MUST NOT be provided.
          format: int32
          maximum: 4094
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        handover:
          description: |
            The handover enumerates the connection and is
            required for checking diversity constraints.

            It must be within `1 <= x <= network_service.diversity`.
          example: 1
          minimum: 1
          type: integer
        id:
          maxLength: 80
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the configured network service.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: cloud_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialCloudNetworkServiceConfig
      type: object
    CloudNetworkServiceConfigRequest:
      allOf:
        - $ref: "#/components/schemas/CloudNetworkServiceConfigRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - network_service
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - handover
            - cloud_vlan
            - type
          title: CloudNetworkServiceConfigRequest
          type: object
    CloudNetworkServiceConfigRequestPartial:
      description: Cloud Network Service Config Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        cloud_vlan:
          description: |-
            If the `provider_vlans` property of the `ProductOffering` is
            `multi`, a numeric value refers to a specific vlan on the service
            provider side.

            Otherwise, if set to `null`, it refers to all unmatched
            vlan ids on the service provider side. (All vlan ids from the
            service provider side are presented as tags within any vlans specified
            in `vlan_config`.)

            If the `provider_vlans` property of the `ProductOffering` is `single`,
            the `cloud_vlan` MUST be `null` or MUST NOT be provided.
          format: int32
          maximum: 4094
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        handover:
          description: |
            The handover enumerates the connection and is
            required for checking diversity constraints.

            It must be within `1 <= x <= network_service.diversity`.
          example: 1
          minimum: 1
          type: integer
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the `NetworkService` to configure.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: cloud_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialCloudNetworkServiceConfigRequest
      type: object
    CloudNetworkServiceConfigUpdate:
      allOf:
        - $ref: "#/components/schemas/CloudNetworkServiceConfigUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - vlan_config
            - billing_account
            - role_assignments
            - connection
            - handover
            - cloud_vlan
            - type
          title: CloudNetworkServiceConfigUpdate
          type: object
    CloudNetworkServiceConfigUpdatePartial:
      description: Cloud Network Service Config Update
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        cloud_vlan:
          description: |-
            If the `provider_vlans` property of the `ProductOffering` is
            `multi`, a numeric value refers to a specific vlan on the service
            provider side.

            Otherwise, if set to `null`, it refers to all unmatched
            vlan ids on the service provider side. (All vlan ids from the
            service provider side are presented as tags within any vlans specified
            in `vlan_config`.)

            If the `provider_vlans` property of the `ProductOffering` is `single`,
            the `cloud_vlan` MUST be `null` or MUST NOT be provided.
          format: int32
          maximum: 4094
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        handover:
          description: |
            The handover enumerates the connection and is
            required for checking diversity constraints.

            It must be within `1 <= x <= network_service.diversity`.
          example: 1
          minimum: 1
          type: integer
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: cloud_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialCloudNetworkServiceConfigUpdate
      type: object
    CloudNetworkServicePartial:
      description: Cloud Network Service
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. When null,
            the maximum capacity will be used.
          minimum: 1
          nullable: true
          type: integer
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        cloud_key:
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        diversity:
          description: |-
            Same value as the corresponding `ProductOffering`.

            The service can be delivered over multiple handovers from
            the exchange to the `service_provider`.

            The `diversity` denotes the number of handovers between the
            exchange and the service provider. A value of two signals a
            redundant service.

            Only one network service configuration for each `handover` and
            `cloud_vlan` can be created.
          minimum: 1
          type: integer
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        nsc_required_contact_roles:
          description: |-
            The configuration will require at least one of each of the
            specified roles assigned to contacts.

            The `RoleAssignment` is associated through the
            `role_assignments` list property of the network service configuration.
          items:
            type: string
          readOnly: true
          type: array
        product_offering:
          type: string
        provider_ref:
          description: |
            For a cloud network service with the exchange first
            workflow, the `provider_ref` will be a reference
            to a resource of the cloud provider. (E.g. the UUID of
            a virtual circuit.)

            The `provider_ref` is managed by the exchange and its
            meaning may vary between different cloud services.
          example: 331050d5-76fb-498b-b72a-248520278fbd
          nullable: true
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: cloud_vc
          type: string
      required:
        - type
      title: PartialCloudNetworkService
      type: object
    CloudNetworkServiceRequest:
      allOf:
        - $ref: "#/components/schemas/CloudNetworkServiceRequestPartial"
        - required:
            - product_offering
            - managing_account
            - consuming_account
            - billing_account
            - cloud_key
            - type
          title: CloudNetworkServiceRequest
          type: object
    CloudNetworkServiceRequestPartial:
      description: Cloud Network Service Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. When null,
            the maximum capacity will be used.
          minimum: 1
          nullable: true
          type: integer
        cloud_key:
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        product_offering:
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        type:
          example: cloud_vc
          type: string
      required:
        - type
      title: PartialCloudNetworkServiceRequest
      type: object
    Connection:
      allOf:
        - $ref: "#/components/schemas/ConnectionPartial"
        - required:
            - state
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - mode
            - id
            - name
            - vlan_types
            - outer_vlan_ethertypes
          title: Connection
          type: object
    ConnectionPartial:
      description: Connection
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        lacp_timeout:
          description: |
            This sets the LACP Timeout mode. Both ends of the connections need
            to be configured the same.
          enum:
            - slow
            - fast
          example: slow
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        mode:
          description: |
            Sets the mode of the connection. The mode can be:

            - `lag_lacp`: connection is build as a LAG with LACP enabled
            - `lag_static`: connection is build as LAG with static configuration
            - `flex_ethernet`: connect is build as a FlexEthernet channel
            - `standalone`: only one port is allowed in this connection without
            any bundling.
          enum:
            - lag_lacp
            - lag_static
            - flex_ethernet
            - standalone
          example: lag_lacp
          type: string
        name:
          maxLength: 80
          type: string
        outer_vlan_ethertypes:
          description: |
            The ethertype of the outer tag in hexadecimal notation.
          example:
            - "0x8100"
          items:
            default: "0x8100"
            enum:
              - "0x8100"
              - "0x88a8"
              - "0x9100"
            type: string
          type: array
        ports:
          description: |
            References to the port belonging to this connection. Typically
            all ports within one connection are distributed over the same
            device.
          example:
            - ID23
            - "42"
            - "5"
          items:
            type: string
          type: array
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        speed:
          description: |
            Shows the total bandwidth of the connection in Mbit/s.
          example: 20000
          minimum: 0
          nullable: true
          type: integer
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        vlan_types:
          description: |-
            A list of vlan config types you can configure using
            this connection.
          items:
            enum:
              - port
              - dot1q
              - qinq
            type: string
          type: array
      title: PartialConnection
      type: object
    ConnectionRequest:
      allOf:
        - $ref: "#/components/schemas/ConnectionRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - mode
          title: ConnectionRequest
          type: object
    ConnectionRequestPartial:
      description: Connection Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        lacp_timeout:
          description: |
            This sets the LACP Timeout mode. Both ends of the connections need
            to be configured the same.
          enum:
            - slow
            - fast
          example: slow
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        mode:
          description: |
            Sets the mode of the connection. The mode can be:

            - `lag_lacp`: connection is build as a LAG with LACP enabled
            - `lag_static`: connection is build as LAG with static configuration
            - `flex_ethernet`: connect is build as a FlexEthernet channel
            - `standalone`: only one port is allowed in this connection without
            any bundling.
          enum:
            - lag_lacp
            - lag_static
            - flex_ethernet
            - standalone
          example: lag_lacp
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        speed:
          description: |
            Shows the total bandwidth of the connection in Mbit/s.
          example: 20000
          minimum: 0
          nullable: true
          type: integer
      title: PartialConnectionRequest
      type: object
    ConnectionUpdate:
      allOf:
        - $ref: "#/components/schemas/ConnectionUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - mode
          title: ConnectionUpdate
          type: object
    ConnectionUpdatePartial:
      description: Connection Update
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        lacp_timeout:
          description: |
            This sets the LACP Timeout mode. Both ends of the connections need
            to be configured the same.
          enum:
            - slow
            - fast
          example: slow
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        mode:
          description: |
            Sets the mode of the connection. The mode can be:

            - `lag_lacp`: connection is build as a LAG with LACP enabled
            - `lag_static`: connection is build as LAG with static configuration
            - `flex_ethernet`: connect is build as a FlexEthernet channel
            - `standalone`: only one port is allowed in this connection without
            any bundling.
          enum:
            - lag_lacp
            - lag_static
            - flex_ethernet
            - standalone
          example: lag_lacp
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        speed:
          description: |
            Shows the total bandwidth of the connection in Mbit/s.
          example: 20000
          minimum: 0
          nullable: true
          type: integer
      title: PartialConnectionUpdate
      type: object
    Consumable:
      allOf:
        - $ref: "#/components/schemas/ConsumablePartial"
        - required:
            - consuming_account
          title: Consumable
          type: object
    ConsumablePartial:
      description: Consumable
      properties:
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
      title: PartialConsumable
      type: object
    Contact:
      allOf:
        - $ref: "#/components/schemas/ContactPartial"
        - required:
            - managing_account
            - consuming_account
            - id
          title: Contact
          type: object
    ContactPartial:
      description: Contact
      properties:
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        email:
          description: |
            The email of the legal company entity.
          example: info@moon-peer.net
          maxLength: 80
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        name:
          description: A name of a person or an organisation
          example: Some A. Name
          maxLength: 128
          nullable: true
          type: string
        telephone:
          description: The telephone number in E.164 Phone Number Formatting
          example: "+442071838750"
          maxLength: 40
          nullable: true
          type: string
      title: PartialContact
      type: object
    ContactRequest:
      allOf:
        - $ref: "#/components/schemas/ContactRequestPartial"
        - required:
            - managing_account
            - consuming_account
          title: ContactRequest
          type: object
    ContactRequestPartial:
      description: A contact creation request
      properties:
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        email:
          description: |
            The email of the legal company entity.
          example: info@moon-peer.net
          maxLength: 80
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        name:
          description: A name of a person or an organisation
          example: Some A. Name
          maxLength: 128
          nullable: true
          type: string
        telephone:
          description: The telephone number in E.164 Phone Number Formatting
          example: "+442071838750"
          maxLength: 40
          nullable: true
          type: string
      title: PartialContactRequest
      type: object
    ContactUpdate:
      allOf:
        - $ref: "#/components/schemas/ContactUpdatePartial"
        - required:
            - managing_account
            - consuming_account
          title: ContactUpdate
          type: object
    ContactUpdatePartial:
      description: A contact update
      properties:
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        email:
          description: |
            The email of the legal company entity.
          example: info@moon-peer.net
          maxLength: 80
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        name:
          description: A name of a person or an organisation
          example: Some A. Name
          maxLength: 128
          nullable: true
          type: string
        telephone:
          description: The telephone number in E.164 Phone Number Formatting
          example: "+442071838750"
          maxLength: 40
          nullable: true
          type: string
      title: PartialContactUpdate
      type: object
    Contactable:
      allOf:
        - $ref: "#/components/schemas/ContactablePartial"
        - required:
            - role_assignments
          title: Contactable
          type: object
    ContactablePartial:
      description: Contactable
      properties:
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
      title: PartialContactable
      type: object
    DenyMemberJoiningRule:
      allOf:
        - $ref: "#/components/schemas/DenyMemberJoiningRulePartial"
        - required:
            - managing_account
            - consuming_account
            - id
            - network_service
            - type
          title: DenyMemberJoiningRule
          type: object
    DenyMemberJoiningRulePartial:
      description: A rule for members joining a private vlan
      properties:
        consuming_account:
          description: |
            The `id` of the account to which access to the
            network service should be granted or denied.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_service:
          type: string
        type:
          example: deny
          type: string
      required:
        - type
      title: PartialDenyMemberJoiningRule
      type: object
    DenyMemberJoiningRuleRequest:
      allOf:
        - $ref: "#/components/schemas/DenyMemberJoiningRuleRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - network_service
            - type
          title: DenyMemberJoiningRuleRequest
          type: object
    DenyMemberJoiningRuleRequestPartial:
      description: A new vlan member joining rule
      properties:
        consuming_account:
          description: |
            The `id` of the account to which access to the
            network service should be granted or denied.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_service:
          type: string
        type:
          example: deny
          type: string
      required:
        - type
      title: PartialDenyMemberJoiningRuleRequest
      type: object
    DenyMemberJoiningRuleUpdate:
      allOf:
        - $ref: "#/components/schemas/DenyMemberJoiningRuleUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - type
          title: DenyMemberJoiningRuleUpdate
          type: object
    DenyMemberJoiningRuleUpdatePartial:
      description: A vlan member joining rule update
      properties:
        consuming_account:
          description: |
            The `id` of the account to which access to the
            network service should be granted or denied.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        type:
          example: deny
          type: string
      required:
        - type
      title: PartialDenyMemberJoiningRuleUpdate
      type: object
    Device:
      allOf:
        - $ref: "#/components/schemas/DevicePartial"
        - required:
            - name
            - pop
            - id
          title: Device
          type: object
    DeviceCapability:
      allOf:
        - $ref: "#/components/schemas/DeviceCapabilityPartial"
        - title: DeviceCapability
          type: object
    DeviceCapabilityPartial:
      description: Device Capability
      properties:
        availability:
          description: |
            Count of available ports on device
          example: 23
          format: int32
          maximum: 2147483647
          minimum: 0
          readOnly: true
          type: integer
        max_lag:
          description: Maximum count of ports which can be bundled to a max_lag
          example: 8
          format: int32
          maximum: 32767
          minimum: 0
          readOnly: true
          type: integer
        media_type:
          description: |
            The media type of the port (e.g. 1000BASE-LX, 10GBASE-LR, ...)
          example: 1000BASE-LX
          maxLength: 20
          readOnly: true
          type: string
        speed:
          description: |
            Speed of port in Mbit/s
          example: 1000
          readOnly: true
          type: integer
      title: PartialDeviceCapability
      type: object
    DeviceConnection:
      allOf:
        - $ref: "#/components/schemas/DeviceConnectionPartial"
        - required:
            - capacity_max
            - device
            - connected_device
            - id
          title: DeviceConnection
          type: object
    DeviceConnectionPartial:
      description: Device Connection
      properties:
        capacity_max:
          format: int32
          maximum: 2147483647
          minimum: 0
          type: integer
        connected_device:
          type: string
        device:
          type: string
        id:
          maxLength: 80
          type: string
      title: PartialDeviceConnection
      type: object
    DevicePartial:
      description: Device
      properties:
        capabilities:
          items:
            $ref: "#/components/schemas/DeviceCapability"
          type: array
        facility:
          description: |-
            Identifier of the facility where the device
            is physically based.
          readOnly: true
          type: string
        id:
          maxLength: 80
          type: string
        name:
          description: |
            Name of the device
          example: edge2.moon.space-ix.net
          maxLength: 180
          type: string
        pop:
          description: The `PointOfPresence` the device is in.
          type: string
      title: PartialDevice
      type: object
    Event:
      allOf:
        - $ref: "#/components/schemas/EventPartial"
        - required:
            - serial
            - type
            - payload
            - timestamp
          title: Event
          type: object
    EventPartial:
      description: Event
      properties:
        account:
          readOnly: true
          type: string
        payload:
          type: object
        serial:
          type: integer
        timestamp:
          format: date-time
          type: string
        type:
          type: string
      title: PartialEvent
      type: object
    ExchangeLanNetworkProductOffering:
      allOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkProductOfferingPartial"
        - required:
            - id
            - name
            - display_name
            - provider_vlans
            - resource_type
            - handover_metro_area_network
            - handover_metro_area
            - service_metro_area_network
            - service_metro_area
            - bandwidth_min
            - bandwidth_max
            - physical_port_speed
            - service_provider
            - downgrade_allowed
            - upgrade_allowed
            - exchange_lan_network_service
            - type
          title: ExchangeLanNetworkProductOffering
          type: object
    ExchangeLanNetworkProductOfferingPartial:
      description: Exchange Lan Network Product Offering
      properties:
        bandwidth_max:
          description: |-
            When not `null`, this value enforces a mandatory
            rate limit for all network service configs.
          minimum: 0
          nullable: true
          type: integer
        bandwidth_min:
          description: |-
            When configuring access to the network service, at least
            this `capacity` must be provided.
          minimum: 0
          nullable: true
          type: integer
        display_name:
          maxLength: 256
          type: string
        downgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a lower bandwidth.
          type: boolean
        exchange_lan_network_service:
          description: The id of the exchange lan network service.
          type: string
        handover_metro_area:
          description: |
            Id of the `MetroArea`. The network service will be
            accessed from this metro area.
          example: met:29381993:NYC
          type: string
        handover_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`. The service will be accessed
            through the handover metro area network.
          example: "191239810"
          type: string
        id:
          maxLength: 80
          type: string
        name:
          description: Name of the product
          maxLength: 160
          type: string
        physical_port_speed:
          description: |-
            If the service is dependent on the speed of
            the physical port this field denotes the speed.
          minimum: 0
          nullable: true
          type: integer
        provider_vlans:
          description: The `NetworkService` provides `single` or `multi`ple vlans.
          enum:
            - single
            - multi
          type: string
        resource_type:
          description: |
            The resource type refers to an ix-api resource.
          enum:
            - connection
            - demarc
            - network_service
            - network_service_config
          example: network_service
          type: string
        service_metro_area:
          description: |
            Id of the `MetroArea`. The service is delivered
            in this metro area.
          example: met:213913485:LON
          type: string
        service_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`.
            The service is directly provided on the metro area network.
          example: "9123843"
          type: string
        service_provider:
          description: |
            The name of the provider providing the service.
          example: AWS
          type: string
        type:
          example: exchange_lan
          type: string
        upgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a higher bandwidth.
          type: boolean
      required:
        - type
      title: PartialExchangeLanNetworkProductOffering
      type: object
    ExchangeLanNetworkService:
      allOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServicePartial"
        - required:
            - state
            - id
            - managing_account
            - consuming_account
            - name
            - metro_area_network
            - network_features
            - subnet_v4
            - subnet_v6
            - type
          title: ExchangeLanNetworkService
          type: object
    ExchangeLanNetworkServiceConfig:
      allOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServiceConfigPartial"
        - required:
            - state
            - id
            - network_service
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - asns
            - listed
            - product_offering
            - type
          title: ExchangeLanNetworkServiceConfig
          type: object
    ExchangeLanNetworkServiceConfigPartial:
      description: Exchange Lan Network Service Config
      properties:
        asns:
          items:
            format: int64
            maximum: 4294967295
            minimum: 0
            type: integer
          type: array
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        ips:
          description: |-
            A list of ip-address IDs.

            Allocation of IP Addresses might be deferred depending on
            the IXP implementation. No assumption should be made.
          items:
            type: string
          readOnly: true
          type: array
        listed:
          description: The customer wants to be featured on the member list
          type: boolean
        macs:
          description: A list of mac-address IDs.
          items:
            type: string
          type: array
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the configured network service.
          type: string
        product_offering:
          description: |-
            The product offering must match the type `exchange_lan`
            and must refer to the related network service through
            the `exchange_lan_network_service` property.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: exchange_lan
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialExchangeLanNetworkServiceConfig
      type: object
    ExchangeLanNetworkServiceConfigRequest:
      allOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServiceConfigRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - network_service
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - asns
            - listed
            - product_offering
            - type
          title: ExchangeLanNetworkServiceConfigRequest
          type: object
    ExchangeLanNetworkServiceConfigRequestPartial:
      description: Exchange Lan Network Service Config Request
      properties:
        asns:
          items:
            format: int64
            maximum: 4294967295
            minimum: 0
            type: integer
          type: array
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        ips:
          description: |-
            A list of ip-address IDs.

            Allocation of IP Addresses might be deferred depending on
            the IXP implementation. No assumption should be made.
          items:
            type: string
          readOnly: true
          type: array
        listed:
          description: The customer wants to be featured on the member list
          type: boolean
        macs:
          description: A list of mac-address IDs.
          items:
            type: string
          type: array
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the `NetworkService` to configure.
          type: string
        product_offering:
          description: |-
            The product offering must match the type `exchange_lan`
            and must refer to the related network service through
            the `exchange_lan_network_service` property.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: exchange_lan
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialExchangeLanNetworkServiceConfigRequest
      type: object
    ExchangeLanNetworkServiceConfigUpdate:
      allOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServiceConfigUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - vlan_config
            - billing_account
            - role_assignments
            - connection
            - asns
            - listed
            - type
          title: ExchangeLanNetworkServiceConfigUpdate
          type: object
    ExchangeLanNetworkServiceConfigUpdatePartial:
      description: Exchange Lan Network Service Config Update
      properties:
        asns:
          items:
            format: int64
            maximum: 4294967295
            minimum: 0
            type: integer
          type: array
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        ips:
          description: |-
            A list of ip-address IDs.

            Allocation of IP Addresses might be deferred depending on
            the IXP implementation. No assumption should be made.
          items:
            type: string
          readOnly: true
          type: array
        listed:
          description: The customer wants to be featured on the member list
          type: boolean
        macs:
          description: A list of mac-address IDs.
          items:
            type: string
          type: array
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: exchange_lan
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialExchangeLanNetworkServiceConfigUpdate
      type: object
    ExchangeLanNetworkServicePartial:
      description: Exchange Lan Network Service
      properties:
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          type: string
        ixfdb_ixid:
          description: id of ixfdb
          nullable: true
          type: integer
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        metro_area_network:
          description: |
            Id of the `MetroAreaNetwork` where
            the exchange lan network service is directly provided.

            Same as `service_metro_area_network` on the related
            `ProductOffering`.
          example: man:293225:LON2
          type: string
        name:
          description: Exchange-dependent service name, will be shown on the invoice.
          maxLength: 40
          type: string
        network_features:
          items:
            type: string
          type: array
        nsc_required_contact_roles:
          description: |-
            The configuration will require at least one of each of the
            specified roles assigned to contacts.

            The `RoleAssignment` is associated through the
            `role_assignments` list property of the network service configuration.
          items:
            type: string
          readOnly: true
          type: array
        peeringdb_ixid:
          description: PeeringDB ixid
          nullable: true
          type: integer
        product_offering:
          description: "*deprecation notice*"
          type: string
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        subnet_v4:
          description: |
            IPv4 subnet in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation)
            CIDR notation.
          example: 23.142.52.0/21
          type: string
        subnet_v6:
          description: |
            IPv6 subnet in hexadecimal colon separated CIDR notation.
          example: 2001:23:42::/48
          type: string
        type:
          example: exchange_lan
          type: string
      required:
        - type
      title: PartialExchangeLanNetworkService
      type: object
    ExternalReference:
      allOf:
        - $ref: "#/components/schemas/ExternalReferencePartial"
        - title: ExternalReference
          type: object
    ExternalReferencePartial:
      description: External Reference
      properties:
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
      title: PartialExternalReference
      type: object
    Facility:
      allOf:
        - $ref: "#/components/schemas/FacilityPartial"
        - required:
            - name
            - metro_area
            - address_country
            - address_locality
            - address_region
            - postal_code
            - street_address
            - organisation_name
            - pops
            - id
          title: Facility
          type: object
    FacilityPartial:
      description: Facility
      properties:
        address_country:
          description: |
            ISO 3166-1 alpha-2 country code, for example DE
          example: US
          maxLength: 2
          type: string
        address_locality:
          description: The locality/city. For example, Mountain View.
          example: Mountain View
          maxLength: 80
          type: string
        address_region:
          description: The region. For example, CA
          example: CA
          maxLength: 80
          type: string
        id:
          maxLength: 80
          type: string
        metro_area:
          description: |
            Id of the `MetroArea` the DC is located in.
          example: met:93214980:BER
          type: string
        name:
          description: |
            Name of the Datacenter as called by the operator
          example: Crater DC Moon 1
          maxLength: 80
          type: string
        organisation_name:
          description: |
            Name of Datacenter operator
          example: Moon Datacenters
          maxLength: 80
          type: string
        peeringdb_facility_id:
          description: |
            [PeeringDB](https://www.peeringdb.com) facitlity ID,
            can be extracted from the url https://www.peeringdb.com/fac/$id
          example: 103
          format: int32
          maximum: 2147483647
          minimum: 0
          nullable: true
          type: integer
        pops:
          description: List of pops in the `Facility`.
          items:
            type: string
          type: array
        postal_code:
          description: A postal code. For example, 9404
          example: "9409"
          maxLength: 18
          type: string
        street_address:
          description: The street address. For example, 1600 Amphitheatre Pkwy.
          example: 1600 Amphitheatre Pkwy.
          maxLength: 80
          type: string
      title: PartialFacility
      type: object
    HealthResponse:
      allOf:
        - $ref: "#/components/schemas/HealthResponsePartial"
        - required:
            - status
          title: HealthResponse
          type: object
    HealthResponsePartial:
      description: Health Status Response
      properties:
        checks:
          additionalProperties:
            additionalProperties:
              type: string
            type: object
          description: |-
            The "checks" object MAY have a number of unique keys,
            one for each logical downstream dependency or sub-component.

            Since each sub-component may be backed by several nodes
            with varying health statuses, these keys point to arrays
            of objects. In case of a single-node sub-component
            (or if presence of nodes is not relevant), a single-element
            array SHOULD be used as the value, for consistency.

            Please see
            https://tools.ietf.org/id/draft-inadarei-api-health-check-04.html#the-checks-object
            for details.
          type: object
        description:
          description: A human-friendly description of the service.
          type: string
        links:
          additionalProperties:
            type: string
          description: |-
            Is an object containing link relations and URIs [RFC3986]
            for external links that MAY contain more information about
            the health of the endpoint.
          type: object
        notes:
          description: Array of notes relevant to current state of health.
          items:
            type: string
          type: array
        output:
          description: Raw error output, in case of "fail" or "warn" states.
          type: string
        releaseId:
          description: |
            Release version of the api implementation.
          example: 1.23.0
          type: string
        serviceId:
          description: A unique identifier of the service, in the application scope.
          type: string
        status:
          description: |-
            status indicates whether the service status is
            acceptable or not.
          enum:
            - pass
            - fail
            - warn
          type: string
        version:
          description: |
            Public version of the service.
          example: "1"
          type: string
      title: PartialHealthResponse
      type: object
    IXPSpecificFeatureFlag:
      allOf:
        - $ref: "#/components/schemas/IXPSpecificFeatureFlagPartial"
        - required:
            - name
            - description
          title: IXPSpecificFeatureFlag
          type: object
    IXPSpecificFeatureFlagPartial:
      description: IXP-Specific Feature Flag
      properties:
        description:
          description: |
            The description of the feature flag.
          example: RPKI reject invalid filtering is available
          maxLength: 80
          type: string
        name:
          description: |
            The name of the feature flag.
          example: RPKI
          maxLength: 20
          type: string
      title: PartialIXPSpecificFeatureFlag
      type: object
    ImplementationResponse:
      allOf:
        - $ref: "#/components/schemas/ImplementationResponsePartial"
        - required:
            - schema_version
            - supported_network_service_types
            - supported_network_service_config_types
            - supported_network_feature_types
            - supported_network_feature_config_types
            - supported_operations
          title: ImplementationResponse
          type: object
    ImplementationResponsePartial:
      description: API Implementation
      properties:
        schema_version:
          description: |
            Version of the implemented IX-API schema.
          example: 2.0.0
          type: string
        service_version:
          description: |
            Version of the API service.
          example: 1.23.0
          type: string
        supported_network_feature_config_types:
          description: |
            Array of supported network feature config types.
          example:
            - route_server
          items:
            type: string
          type: array
        supported_network_feature_types:
          description: |
            Array of supported network feature types.
          example:
            - route_server
          items:
            type: string
          type: array
        supported_network_service_config_types:
          description: |
            Array of supported network service config types.
          example:
            - exchange_lan
            - p2p_vc
            - cloud_vc
          items:
            type: string
          type: array
        supported_network_service_types:
          description: |
            Array of network service types, supported by the IX.
          example:
            - exchange_lan
            - p2p_vc
            - cloud_vc
          items:
            type: string
          type: array
        supported_operations:
          description: |
            Array of implemented operations of the ix-api schema.
          example:
            - connections_list
            - connections_read
            - network_service_configs_create
          items:
            type: string
          type: array
      title: PartialImplementationResponse
      type: object
    Invoiceable:
      allOf:
        - $ref: "#/components/schemas/InvoiceablePartial"
        - required:
            - billing_account
          title: Invoiceable
          type: object
    InvoiceablePartial:
      description: Invoiceable
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
      title: PartialInvoiceable
      type: object
    IpAddress:
      allOf:
        - $ref: "#/components/schemas/IpAddressPartial"
        - required:
            - managing_account
            - consuming_account
            - version
            - address
            - prefix_length
            - id
          title: IpAddress
          type: object
    IpAddressPartial:
      description: IP-Address
      properties:
        address:
          description: |
            IPv4 or IPv6 Address in the following format:
            - IPv4: [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation)
            - IPv6: hexadecimal colon separated notation
          example: 23.142.52.0
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        fqdn:
          maxLength: 100
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        prefix_length:
          description: |
            The CIDR ip prefix length
          example: 23
          format: int32
          maximum: 128
          minimum: 0
          type: integer
        valid_not_after:
          format: date-time
          nullable: true
          type: string
        valid_not_before:
          format: date-time
          nullable: true
          type: string
        version:
          description: |
            The version of the internet protocol.
          example: 4
          type: integer
      title: PartialIpAddress
      type: object
    IpAddressRequest:
      allOf:
        - $ref: "#/components/schemas/IpAddressRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - version
            - address
            - prefix_length
          title: IpAddressRequest
          type: object
    IpAddressRequestPartial:
      description: IP-Address / Prefix allocation Request
      properties:
        address:
          description: |
            IPv4 or IPv6 Address in the following format:
            - IPv4: [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation)
            - IPv6: hexadecimal colon separated notation
          example: 23.142.52.0
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        fqdn:
          maxLength: 100
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        prefix_length:
          description: |
            The CIDR ip prefix length
          example: 23
          format: int32
          maximum: 128
          minimum: 0
          type: integer
        valid_not_after:
          format: date-time
          nullable: true
          type: string
        valid_not_before:
          format: date-time
          nullable: true
          type: string
        version:
          description: |
            The version of the internet protocol.
          example: 4
          type: integer
      title: PartialIpAddressRequest
      type: object
    IpAddressUpdate:
      allOf:
        - $ref: "#/components/schemas/IpAddressUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - version
            - address
            - prefix_length
          title: IpAddressUpdate
          type: object
    IpAddressUpdatePartial:
      description: IP-Address Update
      properties:
        address:
          description: |
            IPv4 or IPv6 Address in the following format:
            - IPv4: [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation)
            - IPv6: hexadecimal colon separated notation
          example: 23.142.52.0
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        fqdn:
          maxLength: 100
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        prefix_length:
          description: |
            The CIDR ip prefix length
          example: 23
          format: int32
          maximum: 128
          minimum: 0
          type: integer
        valid_not_after:
          format: date-time
          nullable: true
          type: string
        valid_not_before:
          format: date-time
          nullable: true
          type: string
        version:
          description: |
            The version of the internet protocol.
          example: 4
          type: integer
      title: PartialIpAddressUpdate
      type: object
    MP2MPNetworkProductOffering:
      allOf:
        - $ref: "#/components/schemas/MP2MPNetworkProductOfferingPartial"
        - required:
            - id
            - name
            - display_name
            - provider_vlans
            - resource_type
            - handover_metro_area_network
            - handover_metro_area
            - service_metro_area_network
            - service_metro_area
            - bandwidth_min
            - bandwidth_max
            - physical_port_speed
            - service_provider
            - downgrade_allowed
            - upgrade_allowed
            - type
          title: MP2MPNetworkProductOffering
          type: object
    MP2MPNetworkProductOfferingPartial:
      description: MP2MP Network Product Offering
      properties:
        bandwidth_max:
          description: |-
            When not `null`, this value enforces a mandatory
            rate limit for all network service configs.
          minimum: 0
          nullable: true
          type: integer
        bandwidth_min:
          description: |-
            When configuring access to the network service, at least
            this `capacity` must be provided.
          minimum: 0
          nullable: true
          type: integer
        display_name:
          maxLength: 256
          type: string
        downgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a lower bandwidth.
          type: boolean
        handover_metro_area:
          description: |
            Id of the `MetroArea`. The network service will be
            accessed from this metro area.
          example: met:29381993:NYC
          type: string
        handover_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`. The service will be accessed
            through the handover metro area network.
          example: "191239810"
          type: string
        id:
          maxLength: 80
          type: string
        name:
          description: Name of the product
          maxLength: 160
          type: string
        physical_port_speed:
          description: |-
            If the service is dependent on the speed of
            the physical port this field denotes the speed.
          minimum: 0
          nullable: true
          type: integer
        provider_vlans:
          description: The `NetworkService` provides `single` or `multi`ple vlans.
          enum:
            - single
            - multi
          type: string
        resource_type:
          description: |
            The resource type refers to an ix-api resource.
          enum:
            - connection
            - demarc
            - network_service
            - network_service_config
          example: network_service
          type: string
        service_metro_area:
          description: |
            Id of the `MetroArea`. The service is delivered
            in this metro area.
          example: met:213913485:LON
          type: string
        service_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`.
            The service is directly provided on the metro area network.
          example: "9123843"
          type: string
        service_provider:
          description: |
            The name of the provider providing the service.
          example: AWS
          type: string
        type:
          example: mp2mp_vc
          type: string
        upgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a higher bandwidth.
          type: boolean
      required:
        - type
      title: PartialMP2MPNetworkProductOffering
      type: object
    MP2MPNetworkService:
      allOf:
        - $ref: "#/components/schemas/MP2MPNetworkServicePartial"
        - required:
            - state
            - id
            - product_offering
            - managing_account
            - consuming_account
            - billing_account
            - name
            - member_joining_rules
            - network_features
            - type
          title: MP2MPNetworkService
          type: object
    MP2MPNetworkServiceConfig:
      allOf:
        - $ref: "#/components/schemas/MP2MPNetworkServiceConfigPartial"
        - required:
            - state
            - id
            - network_service
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - type
          title: MP2MPNetworkServiceConfig
          type: object
    MP2MPNetworkServiceConfigPartial:
      description: MP2MP Network Service Config
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        macs:
          items:
            type: string
          type: array
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the configured network service.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: mp2mp_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialMP2MPNetworkServiceConfig
      type: object
    MP2MPNetworkServiceConfigRequest:
      allOf:
        - $ref: "#/components/schemas/MP2MPNetworkServiceConfigRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - network_service
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - type
          title: MP2MPNetworkServiceConfigRequest
          type: object
    MP2MPNetworkServiceConfigRequestPartial:
      description: MP2MP Network Service Config Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        macs:
          items:
            type: string
          type: array
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the `NetworkService` to configure.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: mp2mp_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialMP2MPNetworkServiceConfigRequest
      type: object
    MP2MPNetworkServiceConfigUpdate:
      allOf:
        - $ref: "#/components/schemas/MP2MPNetworkServiceConfigUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - vlan_config
            - billing_account
            - role_assignments
            - connection
            - type
          title: MP2MPNetworkServiceConfigUpdate
          type: object
    MP2MPNetworkServiceConfigUpdatePartial:
      description: MP2MP Network Service Config Update
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        macs:
          items:
            type: string
          type: array
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: mp2mp_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialMP2MPNetworkServiceConfigUpdate
      type: object
    MP2MPNetworkServicePartial:
      description: MP2MP Network Service
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        member_joining_rules:
          items:
            type: string
          type: array
        name:
          description: |-
            Name of the multi-point to multi-point
            virtual circuit.
          maxLength: 40
          type: string
        network_features:
          items:
            type: string
          type: array
        nsc_required_contact_roles:
          description: |-
            The configuration will require at least one of each of the
            specified roles assigned to contacts.

            The `RoleAssignment` is associated through the
            `role_assignments` list property of the network service configuration.
          items:
            type: string
          readOnly: true
          type: array
        product_offering:
          type: string
        public:
          default: false
          description: |-
            A public mp2mp network service can be joined
            by everyone on the exchange unless denied by
            a member-joining-rule.

            Public network services are visible to other
            members of the IXP, however only `name`, `type`,
            `product_offering`, `consuming_account` and
            `managing_account` are made available.

            Other required fields are redacted.
          type: boolean
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: mp2mp_vc
          type: string
      required:
        - type
      title: PartialMP2MPNetworkService
      type: object
    MP2MPNetworkServiceRequest:
      allOf:
        - $ref: "#/components/schemas/MP2MPNetworkServiceRequestPartial"
        - required:
            - product_offering
            - managing_account
            - consuming_account
            - billing_account
            - name
            - type
          title: MP2MPNetworkServiceRequest
          type: object
    MP2MPNetworkServiceRequestPartial:
      description: MP2MP Network Service Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        name:
          description: |-
            Name of the multi-point to multi-point
            virtual circuit.
          maxLength: 40
          type: string
        product_offering:
          type: string
        public:
          default: false
          description: |-
            A public mp2mp network service can be joined
            by everyone on the exchange unless denied by
            a member-joining-rule.

            Public network services are visible to other
            members of the IXP, however only `name`, `type`,
            `product_offering`, `consuming_account` and
            `managing_account` are made available.

            Other required fields are redacted.
          type: boolean
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        type:
          example: mp2mp_vc
          type: string
      required:
        - type
      title: PartialMP2MPNetworkServiceRequest
      type: object
    MacAddress:
      allOf:
        - $ref: "#/components/schemas/MacAddressPartial"
        - required:
            - managing_account
            - consuming_account
            - address
            - id
          title: MacAddress
          type: object
    MacAddressPartial:
      description: MAC-Address
      properties:
        address:
          description: |
            Unicast MAC address, formatted hexadecimal values with colons.
          example: 42:23:bc:8e:b8:b0
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        valid_not_after:
          format: date-time
          nullable: true
          type: string
        valid_not_before:
          format: date-time
          nullable: true
          type: string
      title: PartialMacAddress
      type: object
    MacAddressRequest:
      allOf:
        - $ref: "#/components/schemas/MacAddressRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - address
          title: MacAddressRequest
          type: object
    MacAddressRequestPartial:
      description: MAC-Address Request
      properties:
        address:
          description: |
            Unicast MAC address, formatted hexadecimal values with colons.
          example: 42:23:bc:8e:b8:b0
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        valid_not_after:
          format: date-time
          nullable: true
          type: string
        valid_not_before:
          format: date-time
          nullable: true
          type: string
      title: PartialMacAddressRequest
      type: object
    Manageable:
      allOf:
        - $ref: "#/components/schemas/ManageablePartial"
        - required:
            - managing_account
          title: Manageable
          type: object
    ManageablePartial:
      description: Managed
      properties:
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
      title: PartialManageable
      type: object
    MemberJoiningRule:
      description: Polymorphic Member Joining Rule
      discriminator:
        mapping:
          allow: "#/components/schemas/AllowMemberJoiningRule"
          deny: "#/components/schemas/DenyMemberJoiningRule"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/AllowMemberJoiningRule"
        - $ref: "#/components/schemas/DenyMemberJoiningRule"
      title: MemberJoiningRule
    MemberJoiningRulePartial:
      description: Polymorphic Member Joining Rule
      discriminator:
        mapping:
          allow: "#/components/schemas/AllowMemberJoiningRulePartial"
          deny: "#/components/schemas/DenyMemberJoiningRulePartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/AllowMemberJoiningRulePartial"
        - $ref: "#/components/schemas/DenyMemberJoiningRulePartial"
      title: MemberJoiningRule (partial)
    MemberJoiningRuleRequest:
      description: Polymorphic Member Joining Rule Request
      discriminator:
        mapping:
          allow: "#/components/schemas/AllowMemberJoiningRuleRequest"
          deny: "#/components/schemas/DenyMemberJoiningRuleRequest"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/AllowMemberJoiningRuleRequest"
        - $ref: "#/components/schemas/DenyMemberJoiningRuleRequest"
      title: MemberJoiningRuleRequest
    MemberJoiningRuleRequestPartial:
      description: Polymorphic Member Joining Rule Request
      discriminator:
        mapping:
          allow: "#/components/schemas/AllowMemberJoiningRuleRequestPartial"
          deny: "#/components/schemas/DenyMemberJoiningRuleRequestPartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/AllowMemberJoiningRuleRequestPartial"
        - $ref: "#/components/schemas/DenyMemberJoiningRuleRequestPartial"
      title: MemberJoiningRuleRequest (partial)
    MemberJoiningRuleUpdate:
      description: Polymorphic Member Joining Rule Update
      discriminator:
        mapping:
          allow: "#/components/schemas/AllowMemberJoiningRuleUpdate"
          deny: "#/components/schemas/DenyMemberJoiningRuleUpdate"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/AllowMemberJoiningRuleUpdate"
        - $ref: "#/components/schemas/DenyMemberJoiningRuleUpdate"
      title: MemberJoiningRuleUpdate
    MemberJoiningRuleUpdatePartial:
      description: Polymorphic Member Joining Rule Update
      discriminator:
        mapping:
          allow: "#/components/schemas/AllowMemberJoiningRuleUpdatePartial"
          deny: "#/components/schemas/DenyMemberJoiningRuleUpdatePartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/AllowMemberJoiningRuleUpdatePartial"
        - $ref: "#/components/schemas/DenyMemberJoiningRuleUpdatePartial"
      title: MemberJoiningRuleUpdate (partial)
    MetroArea:
      allOf:
        - $ref: "#/components/schemas/MetroAreaPartial"
        - required:
            - id
            - un_locode
            - iata_code
            - display_name
            - facilities
            - metro_area_networks
          title: MetroArea
          type: object
    MetroAreaNetwork:
      allOf:
        - $ref: "#/components/schemas/MetroAreaNetworkPartial"
        - required:
            - name
            - metro_area
            - service_provider
            - pops
            - id
          title: MetroAreaNetwork
          type: object
    MetroAreaNetworkPartial:
      description: MetroAreaNetwork
      properties:
        id:
          maxLength: 80
          type: string
        metro_area:
          description: |
            The id of the metro area.
          example: met:199399:FRA
          type: string
        name:
          description: |
            The name of the metro area network.
          example: MY-IX-FRA1
          maxLength: 32
          type: string
        pops:
          description: List of pops in the metro area network.
          items:
            type: string
          type: array
        service_provider:
          description: |
            The service provider is operating the network.
            Usually the exchange.
          example: MY-IX
          maxLength: 128
          type: string
      title: PartialMetroAreaNetwork
      type: object
    MetroAreaPartial:
      description: MetroArea
      properties:
        display_name:
          description: |
            The name of the metro area. Likely the same as the IATA code.
          example: FRA
          maxLength: 64
          type: string
        facilities:
          description: List of facilities the metro area network.
          items:
            type: string
          type: array
        iata_code:
          description: |
            The three letter IATA airport code for identiying the
            metro area.
          example: FRA
          maxLength: 3
          type: string
        id:
          maxLength: 80
          type: string
        metro_area_networks:
          description: List of networks in the metro area.
          items:
            type: string
          type: array
        un_locode:
          description: |
            The UN/LOCODE for identifying the metro area.
          example: DE FRA
          maxLength: 6
          type: string
      title: PartialMetroArea
      type: object
    NetworkFeature:
      description: Polymorphic Network Feature
      discriminator:
        mapping:
          route_server: "#/components/schemas/RouteServerNetworkFeature"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeature"
      title: NetworkFeature
    NetworkFeatureConfig:
      description: Polymorphic Network Feature Config
      discriminator:
        mapping:
          route_server: "#/components/schemas/RouteServerNetworkFeatureConfig"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeatureConfig"
      title: NetworkFeatureConfig
    NetworkFeatureConfigPartial:
      description: Polymorphic Network Feature Config
      discriminator:
        mapping:
          route_server: "#/components/schemas/RouteServerNetworkFeatureConfigPartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeatureConfigPartial"
      title: NetworkFeatureConfig (partial)
    NetworkFeatureConfigRequest:
      description: Polymorphic Network Feature Config Request
      discriminator:
        mapping:
          route_server: "#/components/schemas/RouteServerNetworkFeatureConfigRequest"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeatureConfigRequest"
      title: NetworkFeatureConfigRequest
    NetworkFeatureConfigRequestPartial:
      description: Polymorphic Network Feature Config Request
      discriminator:
        mapping:
          route_server: "#/components/schemas/RouteServerNetworkFeatureConfigRequestPartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeatureConfigRequestPartial"
      title: NetworkFeatureConfigRequest (partial)
    NetworkFeatureConfigUpdate:
      description: Polymorphic Network Feauture Config Update
      discriminator:
        mapping:
          route_server: "#/components/schemas/RouteServerNetworkFeatureConfigUpdate"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeatureConfigUpdate"
      title: NetworkFeatureConfigUpdate
    NetworkFeatureConfigUpdatePartial:
      description: Polymorphic Network Feauture Config Update
      discriminator:
        mapping:
          route_server: "#/components/schemas/RouteServerNetworkFeatureConfigUpdatePartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeatureConfigUpdatePartial"
      title: NetworkFeatureConfigUpdate (partial)
    NetworkFeaturePartial:
      description: Polymorphic Network Feature
      discriminator:
        mapping:
          route_server: "#/components/schemas/RouteServerNetworkFeaturePartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeaturePartial"
      title: NetworkFeature (partial)
    NetworkService:
      description: Polymorphic Network Services
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkService"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkService"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkService"
          p2mp_vc: "#/components/schemas/P2MPNetworkService"
          p2p_vc: "#/components/schemas/P2PNetworkService"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkService"
        - $ref: "#/components/schemas/P2PNetworkService"
        - $ref: "#/components/schemas/P2MPNetworkService"
        - $ref: "#/components/schemas/MP2MPNetworkService"
        - $ref: "#/components/schemas/CloudNetworkService"
      title: NetworkService
    NetworkServiceChangeRequest:
      allOf:
        - $ref: "#/components/schemas/NetworkServiceChangeRequestPartial"
        - required:
            - product_offering
          title: NetworkServiceChangeRequest
          type: object
    NetworkServiceChangeRequestPartial:
      description: NetworkServiceChangeRequest
      properties:
        capacity:
          description: |-
            The desired capacity of the service in Mbps.

            Must be within the range of `bandwidth_min` and
            `bandwidth_max` of the `ProductOffering`.

            When `null` the maximum capacity wil be used.
          minimum: 1
          nullable: true
          type: integer
        product_offering:
          description: |-
            Migrate to a diffrent product offering. Please note, that
            the offering only may differ in bandwidth.
          type: string
      title: PartialNetworkServiceChangeRequest
      type: object
    NetworkServiceConfig:
      description: Polymorphic Network Service Config
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServiceConfig"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkServiceConfig"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServiceConfig"
          p2mp_vc: "#/components/schemas/P2MPNetworkServiceConfig"
          p2p_vc: "#/components/schemas/P2PNetworkServiceConfig"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServiceConfig"
        - $ref: "#/components/schemas/P2PNetworkServiceConfig"
        - $ref: "#/components/schemas/P2MPNetworkServiceConfig"
        - $ref: "#/components/schemas/MP2MPNetworkServiceConfig"
        - $ref: "#/components/schemas/CloudNetworkServiceConfig"
      title: NetworkServiceConfig
    NetworkServiceConfigPartial:
      description: Polymorphic Network Service Config
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServiceConfigPartial"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkServiceConfigPartial"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServiceConfigPartial"
          p2mp_vc: "#/components/schemas/P2MPNetworkServiceConfigPartial"
          p2p_vc: "#/components/schemas/P2PNetworkServiceConfigPartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServiceConfigPartial"
        - $ref: "#/components/schemas/P2PNetworkServiceConfigPartial"
        - $ref: "#/components/schemas/P2MPNetworkServiceConfigPartial"
        - $ref: "#/components/schemas/MP2MPNetworkServiceConfigPartial"
        - $ref: "#/components/schemas/CloudNetworkServiceConfigPartial"
      title: NetworkServiceConfig (partial)
    NetworkServiceConfigRequest:
      description: Polymorhic Network Service Config Request
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServiceConfigRequest"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkServiceConfigRequest"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServiceConfigRequest"
          p2mp_vc: "#/components/schemas/P2MPNetworkServiceConfigRequest"
          p2p_vc: "#/components/schemas/P2PNetworkServiceConfigRequest"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServiceConfigRequest"
        - $ref: "#/components/schemas/P2PNetworkServiceConfigRequest"
        - $ref: "#/components/schemas/P2MPNetworkServiceConfigRequest"
        - $ref: "#/components/schemas/MP2MPNetworkServiceConfigRequest"
        - $ref: "#/components/schemas/CloudNetworkServiceConfigRequest"
      title: NetworkServiceConfigRequest
    NetworkServiceConfigRequestPartial:
      description: Polymorhic Network Service Config Request
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServiceConfigRequestPartial"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkServiceConfigRequestPartial"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServiceConfigRequestPartial"
          p2mp_vc: "#/components/schemas/P2MPNetworkServiceConfigRequestPartial"
          p2p_vc: "#/components/schemas/P2PNetworkServiceConfigRequestPartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServiceConfigRequestPartial"
        - $ref: "#/components/schemas/P2PNetworkServiceConfigRequestPartial"
        - $ref: "#/components/schemas/P2MPNetworkServiceConfigRequestPartial"
        - $ref: "#/components/schemas/MP2MPNetworkServiceConfigRequestPartial"
        - $ref: "#/components/schemas/CloudNetworkServiceConfigRequestPartial"
      title: NetworkServiceConfigRequest (partial)
    NetworkServiceConfigUpdate:
      description: Polymorphic Network Service Config
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServiceConfigUpdate"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkServiceConfigUpdate"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServiceConfigRequest"
          p2mp_vc: "#/components/schemas/P2MPNetworkServiceConfigRequest"
          p2p_vc: "#/components/schemas/P2PNetworkServiceConfigUpdate"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServiceConfigUpdate"
        - $ref: "#/components/schemas/P2PNetworkServiceConfigUpdate"
        - $ref: "#/components/schemas/P2MPNetworkServiceConfigRequest"
        - $ref: "#/components/schemas/MP2MPNetworkServiceConfigRequest"
        - $ref: "#/components/schemas/CloudNetworkServiceConfigUpdate"
      title: NetworkServiceConfigUpdate
    NetworkServiceConfigUpdatePartial:
      description: Polymorphic Network Service Config
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServiceConfigUpdatePartial"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkServiceConfigUpdatePartial"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServiceConfigRequestPartial"
          p2mp_vc: "#/components/schemas/P2MPNetworkServiceConfigRequestPartial"
          p2p_vc: "#/components/schemas/P2PNetworkServiceConfigUpdatePartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServiceConfigUpdatePartial"
        - $ref: "#/components/schemas/P2PNetworkServiceConfigUpdatePartial"
        - $ref: "#/components/schemas/P2MPNetworkServiceConfigRequestPartial"
        - $ref: "#/components/schemas/MP2MPNetworkServiceConfigRequestPartial"
        - $ref: "#/components/schemas/CloudNetworkServiceConfigUpdatePartial"
      title: NetworkServiceConfigUpdate (partial)
    NetworkServiceDeleteResponse:
      description: Polymorphic Network Service Request
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkService"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkService"
          p2mp_vc: "#/components/schemas/P2MPNetworkService"
          p2p_vc: "#/components/schemas/P2PNetworkService"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/P2PNetworkService"
        - $ref: "#/components/schemas/P2MPNetworkService"
        - $ref: "#/components/schemas/MP2MPNetworkService"
        - $ref: "#/components/schemas/CloudNetworkService"
      title: NetworkServiceDeleteResponse
    NetworkServiceDeleteResponsePartial:
      description: Polymorphic Network Service Request
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServicePartial"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServicePartial"
          p2mp_vc: "#/components/schemas/P2MPNetworkServicePartial"
          p2p_vc: "#/components/schemas/P2PNetworkServicePartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/P2PNetworkServicePartial"
        - $ref: "#/components/schemas/P2MPNetworkServicePartial"
        - $ref: "#/components/schemas/MP2MPNetworkServicePartial"
        - $ref: "#/components/schemas/CloudNetworkServicePartial"
      title: NetworkServiceDeleteResponse (partial)
    NetworkServicePartial:
      description: Polymorphic Network Services
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServicePartial"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkServicePartial"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServicePartial"
          p2mp_vc: "#/components/schemas/P2MPNetworkServicePartial"
          p2p_vc: "#/components/schemas/P2PNetworkServicePartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkServicePartial"
        - $ref: "#/components/schemas/P2PNetworkServicePartial"
        - $ref: "#/components/schemas/P2MPNetworkServicePartial"
        - $ref: "#/components/schemas/MP2MPNetworkServicePartial"
        - $ref: "#/components/schemas/CloudNetworkServicePartial"
      title: NetworkService (partial)
    NetworkServiceRequest:
      description: Polymorphic Network Service Request
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServiceRequest"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServiceRequest"
          p2mp_vc: "#/components/schemas/P2MPNetworkServiceRequest"
          p2p_vc: "#/components/schemas/P2PNetworkServiceRequest"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/P2PNetworkServiceRequest"
        - $ref: "#/components/schemas/P2MPNetworkServiceRequest"
        - $ref: "#/components/schemas/MP2MPNetworkServiceRequest"
        - $ref: "#/components/schemas/CloudNetworkServiceRequest"
      title: NetworkServiceRequest
    NetworkServiceRequestPartial:
      description: Polymorphic Network Service Request
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkServiceRequestPartial"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkServiceRequestPartial"
          p2mp_vc: "#/components/schemas/P2MPNetworkServiceRequestPartial"
          p2p_vc: "#/components/schemas/P2PNetworkServiceRequestPartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/P2PNetworkServiceRequestPartial"
        - $ref: "#/components/schemas/P2MPNetworkServiceRequestPartial"
        - $ref: "#/components/schemas/MP2MPNetworkServiceRequestPartial"
        - $ref: "#/components/schemas/CloudNetworkServiceRequestPartial"
      title: NetworkServiceRequest (partial)
    Ownable:
      allOf:
        - $ref: "#/components/schemas/OwnablePartial"
        - required:
            - managing_account
            - consuming_account
          title: Ownable
          type: object
    OwnablePartial:
      description: Ownable
      properties:
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
      title: PartialOwnable
      type: object
    P2MPNetworkProductOffering:
      allOf:
        - $ref: "#/components/schemas/P2MPNetworkProductOfferingPartial"
        - required:
            - id
            - name
            - display_name
            - provider_vlans
            - resource_type
            - handover_metro_area_network
            - handover_metro_area
            - service_metro_area_network
            - service_metro_area
            - bandwidth_min
            - bandwidth_max
            - physical_port_speed
            - service_provider
            - downgrade_allowed
            - upgrade_allowed
            - type
          title: P2MPNetworkProductOffering
          type: object
    P2MPNetworkProductOfferingPartial:
      description: P2MP Network Product Offering
      properties:
        bandwidth_max:
          description: |-
            When not `null`, this value enforces a mandatory
            rate limit for all network service configs.
          minimum: 0
          nullable: true
          type: integer
        bandwidth_min:
          description: |-
            When configuring access to the network service, at least
            this `capacity` must be provided.
          minimum: 0
          nullable: true
          type: integer
        display_name:
          maxLength: 256
          type: string
        downgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a lower bandwidth.
          type: boolean
        handover_metro_area:
          description: |
            Id of the `MetroArea`. The network service will be
            accessed from this metro area.
          example: met:29381993:NYC
          type: string
        handover_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`. The service will be accessed
            through the handover metro area network.
          example: "191239810"
          type: string
        id:
          maxLength: 80
          type: string
        name:
          description: Name of the product
          maxLength: 160
          type: string
        physical_port_speed:
          description: |-
            If the service is dependent on the speed of
            the physical port this field denotes the speed.
          minimum: 0
          nullable: true
          type: integer
        provider_vlans:
          description: The `NetworkService` provides `single` or `multi`ple vlans.
          enum:
            - single
            - multi
          type: string
        resource_type:
          description: |
            The resource type refers to an ix-api resource.
          enum:
            - connection
            - demarc
            - network_service
            - network_service_config
          example: network_service
          type: string
        service_metro_area:
          description: |
            Id of the `MetroArea`. The service is delivered
            in this metro area.
          example: met:213913485:LON
          type: string
        service_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`.
            The service is directly provided on the metro area network.
          example: "9123843"
          type: string
        service_provider:
          description: |
            The name of the provider providing the service.
          example: AWS
          type: string
        type:
          example: p2mp_vc
          type: string
        upgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a higher bandwidth.
          type: boolean
      required:
        - type
      title: PartialP2MPNetworkProductOffering
      type: object
    P2MPNetworkService:
      allOf:
        - $ref: "#/components/schemas/P2MPNetworkServicePartial"
        - required:
            - state
            - id
            - product_offering
            - managing_account
            - consuming_account
            - billing_account
            - name
            - network_features
            - member_joining_rules
            - type
          title: P2MPNetworkService
          type: object
    P2MPNetworkServiceConfig:
      allOf:
        - $ref: "#/components/schemas/P2MPNetworkServiceConfigPartial"
        - required:
            - state
            - id
            - network_service
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - type
          title: P2MPNetworkServiceConfig
          type: object
    P2MPNetworkServiceConfigPartial:
      description: P2MP Network Service Config
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the configured network service.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role:
          default: leaf
          description: |-
            A `leaf` can only reach roots and is
            isolated from other leafs. A `root` can
            reach any other point in the virtual circuit
            including other roots.
          enum:
            - root
            - leaf
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: p2mp_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialP2MPNetworkServiceConfig
      type: object
    P2MPNetworkServiceConfigRequest:
      allOf:
        - $ref: "#/components/schemas/P2MPNetworkServiceConfigRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - network_service
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - type
          title: P2MPNetworkServiceConfigRequest
          type: object
    P2MPNetworkServiceConfigRequestPartial:
      description: P2MP Network Service Config Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the `NetworkService` to configure.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role:
          default: leaf
          description: |-
            A `leaf` can only reach roots and is
            isolated from other leafs. A `root` can
            reach any other point in the virtual circuit
            including other roots.
          enum:
            - root
            - leaf
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: p2mp_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialP2MPNetworkServiceConfigRequest
      type: object
    P2MPNetworkServiceConfigUpdate:
      allOf:
        - $ref: "#/components/schemas/P2MPNetworkServiceConfigUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - vlan_config
            - billing_account
            - role_assignments
            - connection
            - type
          title: P2MPNetworkServiceConfigUpdate
          type: object
    P2MPNetworkServiceConfigUpdatePartial:
      description: P2MP Network Service Config Update
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role:
          default: leaf
          description: |-
            A `leaf` can only reach roots and is
            isolated from other leafs. A `root` can
            reach any other point in the virtual circuit
            including other roots.
          enum:
            - root
            - leaf
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: p2mp_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialP2MPNetworkServiceConfigUpdate
      type: object
    P2MPNetworkServicePartial:
      description: P2MP Network Service
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        member_joining_rules:
          items:
            type: string
          type: array
        name:
          description: Name of the point to multi-point virtual circuit.
          maxLength: 40
          type: string
        network_features:
          items:
            type: string
          type: array
        nsc_required_contact_roles:
          description: |-
            The configuration will require at least one of each of the
            specified roles assigned to contacts.

            The `RoleAssignment` is associated through the
            `role_assignments` list property of the network service configuration.
          items:
            type: string
          readOnly: true
          type: array
        product_offering:
          type: string
        public:
          default: false
          description: |-
            A public p2mp network service can be joined
            by everyone on the exchange unless denied by
            a member-joining-rule.

            Public network services are visible to other
            members of the IXP, however only `name`, `type`,
            `product_offering`, `consuming_account` and
            `managing_account` are made
            available.

            Other required fields are redacted.
          type: boolean
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: p2mp_vc
          type: string
      required:
        - type
      title: PartialP2MPNetworkService
      type: object
    P2MPNetworkServiceRequest:
      allOf:
        - $ref: "#/components/schemas/P2MPNetworkServiceRequestPartial"
        - required:
            - product_offering
            - managing_account
            - consuming_account
            - billing_account
            - name
            - type
          title: P2MPNetworkServiceRequest
          type: object
    P2MPNetworkServiceRequestPartial:
      description: P2MP Network Service Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        name:
          description: Name of the point to multi-point virtual circuit.
          maxLength: 40
          type: string
        product_offering:
          type: string
        public:
          default: false
          description: |-
            A public p2mp network service can be joined
            by everyone on the exchange unless denied by
            a member-joining-rule.

            Public network services are visible to other
            members of the IXP, however only `name`, `type`,
            `product_offering`, `consuming_account` and
            `managing_account` are made
            available.

            Other required fields are redacted.
          type: boolean
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        type:
          example: p2mp_vc
          type: string
      required:
        - type
      title: PartialP2MPNetworkServiceRequest
      type: object
    P2PNetworkProductOffering:
      allOf:
        - $ref: "#/components/schemas/P2PNetworkProductOfferingPartial"
        - required:
            - id
            - name
            - display_name
            - provider_vlans
            - resource_type
            - handover_metro_area_network
            - handover_metro_area
            - service_metro_area_network
            - service_metro_area
            - bandwidth_min
            - bandwidth_max
            - physical_port_speed
            - service_provider
            - downgrade_allowed
            - upgrade_allowed
            - type
          title: P2PNetworkProductOffering
          type: object
    P2PNetworkProductOfferingPartial:
      description: P2P Network Product Offering
      properties:
        bandwidth_max:
          description: |-
            When not `null`, this value enforces a mandatory
            rate limit for all network service configs.
          minimum: 0
          nullable: true
          type: integer
        bandwidth_min:
          description: |-
            When configuring access to the network service, at least
            this `capacity` must be provided.
          minimum: 0
          nullable: true
          type: integer
        display_name:
          maxLength: 256
          type: string
        downgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a lower bandwidth.
          type: boolean
        handover_metro_area:
          description: |
            Id of the `MetroArea`. The network service will be
            accessed from this metro area.
          example: met:29381993:NYC
          type: string
        handover_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`. The service will be accessed
            through the handover metro area network.
          example: "191239810"
          type: string
        id:
          maxLength: 80
          type: string
        name:
          description: Name of the product
          maxLength: 160
          type: string
        physical_port_speed:
          description: |-
            If the service is dependent on the speed of
            the physical port this field denotes the speed.
          minimum: 0
          nullable: true
          type: integer
        provider_vlans:
          description: The `NetworkService` provides `single` or `multi`ple vlans.
          enum:
            - single
            - multi
          type: string
        resource_type:
          description: |
            The resource type refers to an ix-api resource.
          enum:
            - connection
            - demarc
            - network_service
            - network_service_config
          example: network_service
          type: string
        service_metro_area:
          description: |
            Id of the `MetroArea`. The service is delivered
            in this metro area.
          example: met:213913485:LON
          type: string
        service_metro_area_network:
          description: |
            Id of the `MetroAreaNetwork`.
            The service is directly provided on the metro area network.
          example: "9123843"
          type: string
        service_provider:
          description: |
            The name of the provider providing the service.
          example: AWS
          type: string
        type:
          example: p2p_vc
          type: string
        upgrade_allowed:
          description: |-
            Indicates if the service can be migrated to
            a higher bandwidth.
          type: boolean
      required:
        - type
      title: PartialP2PNetworkProductOffering
      type: object
    P2PNetworkService:
      allOf:
        - $ref: "#/components/schemas/P2PNetworkServicePartial"
        - required:
            - state
            - id
            - product_offering
            - managing_account
            - consuming_account
            - billing_account
            - joining_member_account
            - type
          title: P2PNetworkService
          type: object
    P2PNetworkServiceConfig:
      allOf:
        - $ref: "#/components/schemas/P2PNetworkServiceConfigPartial"
        - required:
            - state
            - id
            - network_service
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - type
          title: P2PNetworkServiceConfig
          type: object
    P2PNetworkServiceConfigPartial:
      description: P2P Network Service Config
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the configured network service.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: p2p_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialP2PNetworkServiceConfig
      type: object
    P2PNetworkServiceConfigRequest:
      allOf:
        - $ref: "#/components/schemas/P2PNetworkServiceConfigRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - network_service
            - billing_account
            - role_assignments
            - connection
            - vlan_config
            - type
          title: P2PNetworkServiceConfigRequest
          type: object
    P2PNetworkServiceConfigRequestPartial:
      description: P2P Network Service Config Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        network_service:
          description: The id of the `NetworkService` to configure.
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: p2p_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialP2PNetworkServiceConfigRequest
      type: object
    P2PNetworkServiceConfigUpdate:
      allOf:
        - $ref: "#/components/schemas/P2PNetworkServiceConfigUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - vlan_config
            - billing_account
            - role_assignments
            - connection
            - type
          title: P2PNetworkServiceConfigUpdate
          type: object
    P2PNetworkServiceConfigUpdatePartial:
      description: P2P Network Service Config Update
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
        connection:
          description: The id of the connection to use for this `NetworkServiceConfig`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        network_feature_configs:
          description: |
            A list of ids of `NetworkFeatureConfig`s.
          example:
            - "12356"
            - "43829"
          items:
            type: string
          readOnly: true
          type: array
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        type:
          example: p2p_vc
          type: string
        vlan_config:
          $ref: "#/components/schemas/VlanConfig"
      required:
        - type
      title: PartialP2PNetworkServiceConfigUpdate
      type: object
    P2PNetworkServicePartial:
      description: P2P Network Service
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        capacity:
          description: |-
            The capacity of the service in Mbps. When null,
            the maximum capacity will be used.
          minimum: 1
          nullable: true
          type: integer
        charged_until:
          description: |-
            Your obligation to pay for the service will end on this date.
            Typically `≥ decommission_at`.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        decommission_at:
          description: |-
            The service will be decommissioned on this date.

            This field is only used when
            the state is `DECOMMISSION_REQUESTED` or
            `DECOMMISSIONED`.
          format: date
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          type: string
        joining_member_account:
          description: |
            The account of the B-side member joining the virtual circuit.
          example: "231829"
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        nsc_required_contact_roles:
          description: |-
            The configuration will require at least one of each of the
            specified roles assigned to contacts.

            The `RoleAssignment` is associated through the
            `role_assignments` list property of the network service configuration.
          items:
            type: string
          readOnly: true
          type: array
        product_offering:
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: p2p_vc
          type: string
      required:
        - type
      title: PartialP2PNetworkService
      type: object
    P2PNetworkServiceRequest:
      allOf:
        - $ref: "#/components/schemas/P2PNetworkServiceRequestPartial"
        - required:
            - product_offering
            - managing_account
            - consuming_account
            - billing_account
            - joining_member_account
            - type
          title: P2PNetworkServiceRequest
          type: object
    P2PNetworkServiceRequestPartial:
      description: P2P Network Service Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        joining_member_account:
          description: |
            The account of the B-side member joining the virtual circuit.
          example: "231829"
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        product_offering:
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        type:
          example: p2p_vc
          type: string
      required:
        - type
      title: PartialP2PNetworkServiceRequest
      type: object
    PointOfPresence:
      allOf:
        - $ref: "#/components/schemas/PointOfPresencePartial"
        - required:
            - name
            - facility
            - metro_area_network
            - devices
            - id
          title: PointOfPresence
          type: object
    PointOfPresencePartial:
      description: Point Of Presence
      properties:
        devices:
          items:
            type: string
          type: array
        facility:
          type: string
        id:
          maxLength: 80
          type: string
        metro_area_network:
          type: string
        name:
          maxLength: 40
          type: string
      title: PartialPointOfPresence
      type: object
    Port:
      allOf:
        - $ref: "#/components/schemas/PortPartial"
        - required:
            - state
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - id
            - media_type
            - device
            - pop
          title: Port
          type: object
    PortPartial:
      description: Port
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        connection:
          nullable: true
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        device:
          description: |
            The device the port.
          example: device:29139871
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        media_type:
          description: |
            The media type of the port.
            Query the device's capabilities for available types.
          example: 10GBASE-LR
          maxLength: 20
          type: string
        name:
          default: ""
          description: Name of the port (set by the exchange)
          maxLength: 80
          readOnly: true
          type: string
        pop:
          description: |
            Same as the `pop` of the `device`.
          example: pop:2913
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        speed:
          minimum: 0
          nullable: true
          readOnly: true
          type: integer
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
      title: PartialPort
      type: object
    PortRequest:
      allOf:
        - $ref: "#/components/schemas/PortRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - pop
            - media_type
          title: PortRequest
          type: object
    PortRequestPartial:
      description: Port Request
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        connection:
          nullable: true
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        media_type:
          description: |
            The media type of the interface.
            See the device's capabilities to see what types
            are available.
          example: 10GBASE-LR
          maxLength: 20
          type: string
        pop:
          description: |
            Same as the `pop` of the `device`.
          example: pop:2913
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        speed:
          minimum: 0
          nullable: true
          readOnly: true
          type: integer
      title: PartialPortRequest
      type: object
    PortUpdate:
      allOf:
        - $ref: "#/components/schemas/PortUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
          title: PortUpdate
          type: object
    PortUpdatePartial:
      description: Port Update
      properties:
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        connection:
          nullable: true
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        speed:
          minimum: 0
          nullable: true
          readOnly: true
          type: integer
      title: PartialPortUpdate
      type: object
    ProblemResponse:
      allOf:
        - $ref: "#/components/schemas/ProblemResponsePartial"
        - required:
            - type
          title: ProblemResponse
          type: object
    ProblemResponsePartial:
      description: Encodes a problem into an appropriate response body.
      properties:
        detail:
          description: |-
            A human-readable explanation specific to this
            occurrence of the problem.
          type: string
        instance:
          description: |-
            A URI reference that identifies the specific
            occurrence of the problem.  It may or may not yield
            further information if dereferenced.
          type: string
        status:
          description: |-
            The HTTP status code ([RFC7231], Section 6)
            generated by the origin server for this occurrence
            of the problem.
          minimum: 100
          type: integer
        title:
          description: |
            A short, human-readable summary of the problem type.

            It SHOULD NOT change from occurrence to
            occurrence of the problem, except for purposes
            of localization (e.g., using proactive content
            negotiation; see [RFC7231], Section 3.4).
          example: Some fields have validation errors.
          type: string
        type:
          description: |
            A URI reference (see RFC3986) that identifies the
            problem type.

            This specification encourages that, when
            dereferenced, it provide human-readable documentation
            for the problem type (e.g., using HTML
            [W3C.REC-html5-20141028]).

            When this member is not present, its value is assumed
            to be "about:blank".
          example: about:blank
          type: string
      title: PartialProblemResponse
      type: object
    ProductOffering:
      description: Polymorphic Product Offering
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkProductOffering"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkProductOffering"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkProductOffering"
          p2mp_vc: "#/components/schemas/P2MPNetworkProductOffering"
          p2p_vc: "#/components/schemas/P2PNetworkProductOffering"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkProductOffering"
        - $ref: "#/components/schemas/P2PNetworkProductOffering"
        - $ref: "#/components/schemas/MP2MPNetworkProductOffering"
        - $ref: "#/components/schemas/P2MPNetworkProductOffering"
        - $ref: "#/components/schemas/CloudNetworkProductOffering"
      title: ProductOffering
    ProductOfferingPartial:
      description: Polymorphic Product Offering
      discriminator:
        mapping:
          cloud_vc: "#/components/schemas/CloudNetworkProductOfferingPartial"
          exchange_lan: "#/components/schemas/ExchangeLanNetworkProductOfferingPartial"
          mp2mp_vc: "#/components/schemas/MP2MPNetworkProductOfferingPartial"
          p2mp_vc: "#/components/schemas/P2MPNetworkProductOfferingPartial"
          p2p_vc: "#/components/schemas/P2PNetworkProductOfferingPartial"
        propertyName: type
      oneOf:
        - $ref: "#/components/schemas/ExchangeLanNetworkProductOfferingPartial"
        - $ref: "#/components/schemas/P2PNetworkProductOfferingPartial"
        - $ref: "#/components/schemas/MP2MPNetworkProductOfferingPartial"
        - $ref: "#/components/schemas/P2MPNetworkProductOfferingPartial"
        - $ref: "#/components/schemas/CloudNetworkProductOfferingPartial"
      title: ProductOffering (partial)
    RateLimitedNetworkServiceConfig:
      allOf:
        - $ref: "#/components/schemas/RateLimitedNetworkServiceConfigPartial"
        - title: RateLimitedNetworkServiceConfig
          type: object
    RateLimitedNetworkServiceConfigPartial:
      description: |-
        Rate limited network services include a capacity
        property.
      properties:
        capacity:
          description: |-
            The capacity of the service in Mbps. If set to Null,
            the maximum capacity will be used, i.e. the virtual circuit is
            not rate-limited.

            An exchange may choose to constrain the available capacity range
            of a `ProductOffering`.

            That means, the service can consume up to the total bandwidth
            of the `Connection`.

            Typically the service is charged based on the capacity.
          minimum: 1
          nullable: true
          type: integer
      title: PartialRateLimitedNetworkServiceConfig
      type: object
    RefreshTokenRequest:
      allOf:
        - $ref: "#/components/schemas/RefreshTokenRequestPartial"
        - required:
            - refresh_token
          title: RefreshTokenRequest
          type: object
    RefreshTokenRequestPartial:
      description: RefreshTokenRequest
      properties:
        refresh_token:
          type: string
      title: PartialRefreshTokenRequest
      type: object
    Role:
      allOf:
        - $ref: "#/components/schemas/RolePartial"
        - required:
            - name
            - required_fields
            - id
          title: Role
          type: object
    RoleAssignment:
      allOf:
        - $ref: "#/components/schemas/RoleAssignmentPartial"
        - required:
            - role
            - contact
            - id
          title: RoleAssignment
          type: object
    RoleAssignmentPartial:
      description: A role assignment for a contact
      properties:
        contact:
          description: |
            The `id` of a contact the role is assigned to.
          example: contact:42b
          type: string
        id:
          type: string
        role:
          description: |
            The `id` of a role the contact is assigned to.
          example: role:23
          type: string
      title: PartialRoleAssignment
      type: object
    RoleAssignmentRequest:
      allOf:
        - $ref: "#/components/schemas/RoleAssignmentRequestPartial"
        - required:
            - role
            - contact
          title: RoleAssignmentRequest
          type: object
    RoleAssignmentRequestPartial:
      description: A role assignment request
      properties:
        contact:
          description: |
            The `id` of a contact the role is assigned to.
          example: contact:42b
          type: string
        role:
          description: |
            The `id` of a role the contact is assigned to.
          example: role:23
          type: string
      title: PartialRoleAssignmentRequest
      type: object
    RoleAssignmentUpdate:
      allOf:
        - $ref: "#/components/schemas/RoleAssignmentUpdatePartial"
        - required:
            - role
            - contact
          title: RoleAssignmentUpdate
          type: object
    RoleAssignmentUpdatePartial:
      description: A role assignemnt update
      properties:
        contact:
          description: |
            The `id` of a contact the role is assigned to.
          example: contact:42b
          type: string
        role:
          description: |
            The `id` of a role the contact is assigned to.
          example: role:23
          type: string
      title: PartialRoleAssignmentUpdate
      type: object
    RolePartial:
      description: A role for a contact
      properties:
        id:
          type: string
        name:
          description: |
            The name of the role.
          example: noc
          maxLength: 80
          type: string
        required_fields:
          description: |
            A list of required field names.
          example:
            - name
            - email
          items:
            maxLength: 80
            type: string
          type: array
      title: PartialRole
      type: object
    RoleRequest:
      allOf:
        - $ref: "#/components/schemas/RoleRequestPartial"
        - required:
            - name
            - required_fields
          title: RoleRequest
          type: object
    RoleRequestPartial:
      description: A new role
      properties:
        name:
          description: |
            The name of the role.
          example: noc
          maxLength: 80
          type: string
        required_fields:
          description: |
            A list of required field names.
          example:
            - name
            - email
          items:
            maxLength: 80
            type: string
          type: array
      title: PartialRoleRequest
      type: object
    RoleUpdate:
      allOf:
        - $ref: "#/components/schemas/RoleUpdatePartial"
        - required:
            - name
            - required_fields
          title: RoleUpdate
          type: object
    RoleUpdatePartial:
      description: A role update
      properties:
        name:
          description: |
            The name of the role.
          example: noc
          maxLength: 80
          type: string
        required_fields:
          description: |
            A list of required field names.
          example:
            - name
            - email
          items:
            maxLength: 80
            type: string
          type: array
      title: PartialRoleUpdate
      type: object
    RouteServerNetworkFeature:
      allOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeaturePartial"
        - required:
            - id
            - name
            - required
            - flags
            - network_service
            - asn
            - fqdn
            - address_families
            - session_mode
            - available_bgp_session_types
            - ip_v4
            - ip_v6
            - type
          title: RouteServerNetworkFeature
          type: object
    RouteServerNetworkFeatureConfig:
      allOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeatureConfigPartial"
        - required:
            - state
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - network_feature
            - network_service_config
            - asn
            - session_mode
            - bgp_session_type
            - ip
            - id
            - type
          title: RouteServerNetworkFeatureConfig
          type: object
    RouteServerNetworkFeatureConfigPartial:
      description: Route Server Network Feature Config
      properties:
        as_set_v4:
          description: |
            AS-SET of the customer for IPv4 prefix filtering.
            This is used to generate filters on the router servers.

            Only valid referenced prefixes within the AS-SET
            are allowed inbound to the route server. All other routes are
            filtered.

            This field is *required* if the route server network feature only
            supports the `af_inet` address family.
            If multiple address families are supported, it is optional if the
            `as_set_v6` is provided.

            Important: The format has to be: "AS-SET@IRR". IRR is the database
            where the AS-SET is registred. Typically used IRR's are RADB, RIPE,
            NTTCOM, APNIC, ALTDB, LEVEL3, ARIN, AFRINIC, LACNIC
          example: MOON-AS@RIPE
          maxLength: 100
          nullable: true
          type: string
        as_set_v6:
          description: |
            AS-SET of the customer for IPv6. This is used to generate filters
            on the router servers. Only valid referenced prefixes within
            the AS-SET are allowed inbound to the route server.
            All other routes are filtered.

            This field is *required* if the route server network feature only
            supports the `af_inet6` address family.
            If multiple address families are supported, it is optional if the
            `as_set_v4` is provided.

            Important: The format has to be: "AS-SET@IRR". IRR is the database
            where the AS-SET is registred. Typically used IRR's are RADB, RIPE,
            NTTCOM, APNIC, ALTDB, LEVEL3, ARIN, AFRINIC, LACNIC
          example: MOON-AS@RIPE
          maxLength: 100
          nullable: true
          type: string
        asn:
          description: |
            The ASN of the peer.
          example: 4200000023
          format: int64
          maximum: 4294967295
          minimum: 0
          type: integer
        bgp_session_type:
          description: |
            The session type describes which of the both parties will open the
            connection. If set to passive, the customer router needs to open
            the connection. If its set to active, the route server will open
            the connection. The standard behavior on most exchanges is passive.
          enum:
            - active
            - passive
          example: passive
          type: string
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        id:
          maxLength: 80
          type: string
        insert_ixp_asn:
          default: true
          description: |
            Insert the ASN of the exchange into the AS path. This function is only
            used in special cases. In 99% of all cases, it should be false.
          type: boolean
        ip:
          description: |-
            The BGP session will be established from this IP address.
            Only IPs assigned to the corresponding network service
            config can be used.
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        max_prefix_v4:
          description: |
            Announcing more than `max_prefix` IPv4 prefixes the bgp
            session will be droped.
          example: 5000
          minimum: 0
          nullable: true
          type: integer
        max_prefix_v6:
          description: |
            Announcing more than `max_prefix` IPv6 prefixes the bgp
            session will be droped.
          example: 5000
          minimum: 0
          nullable: true
          type: integer
        network_feature:
          type: string
        network_service_config:
          type: string
        password:
          default: ""
          description: The cleartext BGP session password
          example: bgp-session-test-23
          maxLength: 128
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        session_mode:
          description: |
            Set the session mode with the routeserver.
          enum:
            - public
            - collector
          example: public
          type: string
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
        type:
          example: route_server
          type: string
      required:
        - type
      title: PartialRouteServerNetworkFeatureConfig
      type: object
    RouteServerNetworkFeatureConfigRequest:
      allOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeatureConfigRequestPartial"
        - required:
            - managing_account
            - consuming_account
            - billing_account
            - role_assignments
            - network_feature
            - network_service_config
            - asn
            - session_mode
            - bgp_session_type
            - ip
            - type
          title: RouteServerNetworkFeatureConfigRequest
          type: object
    RouteServerNetworkFeatureConfigRequestPartial:
      description: Route Server Network Feature Config Request
      properties:
        as_set_v4:
          description: |
            AS-SET of the customer for IPv4 prefix filtering.
            This is used to generate filters on the router servers.

            Only valid referenced prefixes within the AS-SET
            are allowed inbound to the route server. All other routes are
            filtered.

            This field is *required* if the route server network feature only
            supports the `af_inet` address family.
            If multiple address families are supported, it is optional if the
            `as_set_v6` is provided.

            Important: The format has to be: "AS-SET@IRR". IRR is the database
            where the AS-SET is registred. Typically used IRR's are RADB, RIPE,
            NTTCOM, APNIC, ALTDB, LEVEL3, ARIN, AFRINIC, LACNIC
          example: MOON-AS@RIPE
          maxLength: 100
          nullable: true
          type: string
        as_set_v6:
          description: |
            AS-SET of the customer for IPv6. This is used to generate filters
            on the router servers. Only valid referenced prefixes within
            the AS-SET are allowed inbound to the route server.
            All other routes are filtered.

            This field is *required* if the route server network feature only
            supports the `af_inet6` address family.
            If multiple address families are supported, it is optional if the
            `as_set_v4` is provided.

            Important: The format has to be: "AS-SET@IRR". IRR is the database
            where the AS-SET is registred. Typically used IRR's are RADB, RIPE,
            NTTCOM, APNIC, ALTDB, LEVEL3, ARIN, AFRINIC, LACNIC
          example: MOON-AS@RIPE
          maxLength: 100
          nullable: true
          type: string
        asn:
          description: |
            The ASN of the peer.
          example: 4200000023
          format: int64
          maximum: 4294967295
          minimum: 0
          type: integer
        bgp_session_type:
          description: |
            The session type describes which of the both parties will open the
            connection. If set to passive, the customer router needs to open
            the connection. If its set to active, the route server will open
            the connection. The standard behavior on most exchanges is passive.
          enum:
            - active
            - passive
          example: passive
          type: string
        billing_account:
          description: An account requires billing_information to be used as a `billing_account`.
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        contract_ref:
          description: |
            A reference to a contract. If no specific contract is used, a default
            MAY be chosen by the implementer.
          example: contract:31824
          maxLength: 128
          nullable: true
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        insert_ixp_asn:
          default: true
          description: |
            Insert the ASN of the exchange into the AS path. This function is only
            used in special cases. In 99% of all cases, it should be false.
          type: boolean
        ip:
          description: |-
            The BGP session will be established from this IP address.
            Only IPs assigned to the corresponding network service
            config can be used.
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        max_prefix_v4:
          description: |
            Announcing more than `max_prefix` IPv4 prefixes the bgp
            session will be droped.
          example: 5000
          minimum: 0
          nullable: true
          type: integer
        max_prefix_v6:
          description: |
            Announcing more than `max_prefix` IPv6 prefixes the bgp
            session will be droped.
          example: 5000
          minimum: 0
          nullable: true
          type: integer
        network_feature:
          type: string
        network_service_config:
          type: string
        password:
          default: ""
          description: The cleartext BGP session password
          example: bgp-session-test-23
          maxLength: 128
          type: string
        purchase_order:
          default: ""
          description: |
            Purchase Order ID which will be displayed on the invoice.
          example: "Project: DC Moon"
          maxLength: 80
          type: string
        role_assignments:
          description: |
            A set of `RoleAssignment`s. See the documentation
            on the specific `required_contact_roles`,
            `nfc_required_contact_roles` or `nsc_required_contact_roles`
            on what `RoleAssignment`s to provide.
          example:
            - c-impl:123
            - c-noc:331
          items:
            type: string
          type: array
        session_mode:
          description: |
            Set the session mode with the routeserver.
          enum:
            - public
            - collector
          example: public
          type: string
        type:
          example: route_server
          type: string
      required:
        - type
      title: PartialRouteServerNetworkFeatureConfigRequest
      type: object
    RouteServerNetworkFeatureConfigUpdate:
      allOf:
        - $ref: "#/components/schemas/RouteServerNetworkFeatureConfigUpdatePartial"
        - required:
            - managing_account
            - consuming_account
            - asn
            - session_mode
            - bgp_session_type
            - ip
            - type
          title: RouteServerNetworkFeatureConfigUpdate
          type: object
    RouteServerNetworkFeatureConfigUpdatePartial:
      description: Route Server Network Feature Config Update
      properties:
        as_set_v4:
          description: |
            AS-SET of the customer for IPv4 prefix filtering.
            This is used to generate filters on the router servers.

            Only valid referenced prefixes within the AS-SET
            are allowed inbound to the route server. All other routes are
            filtered.

            This field is *required* if the route server network feature only
            supports the `af_inet` address family.
            If multiple address families are supported, it is optional if the
            `as_set_v6` is provided.

            Important: The format has to be: "AS-SET@IRR". IRR is the database
            where the AS-SET is registred. Typically used IRR's are RADB, RIPE,
            NTTCOM, APNIC, ALTDB, LEVEL3, ARIN, AFRINIC, LACNIC
          example: MOON-AS@RIPE
          maxLength: 100
          nullable: true
          type: string
        as_set_v6:
          description: |
            AS-SET of the customer for IPv6. This is used to generate filters
            on the router servers. Only valid referenced prefixes within
            the AS-SET are allowed inbound to the route server.
            All other routes are filtered.

            This field is *required* if the route server network feature only
            supports the `af_inet6` address family.
            If multiple address families are supported, it is optional if the
            `as_set_v4` is provided.

            Important: The format has to be: "AS-SET@IRR". IRR is the database
            where the AS-SET is registred. Typically used IRR's are RADB, RIPE,
            NTTCOM, APNIC, ALTDB, LEVEL3, ARIN, AFRINIC, LACNIC
          example: MOON-AS@RIPE
          maxLength: 100
          nullable: true
          type: string
        asn:
          description: |
            The ASN of the peer.
          example: 4200000023
          format: int64
          maximum: 4294967295
          minimum: 0
          type: integer
        bgp_session_type:
          description: |
            The session type describes which of the both parties will open the
            connection. If set to passive, the customer router needs to open
            the connection. If its set to active, the route server will open
            the connection. The standard behavior on most exchanges is passive.
          enum:
            - active
            - passive
          example: passive
          type: string
        consuming_account:
          description: |
            The `id` of the account consuming a service.

            Used to be `owning_customer`.
          example: "2381982"
          type: string
        external_ref:
          description: Reference field, free to use for the API user.
          example: IX:Service:23042
          maxLength: 128
          nullable: true
          type: string
        insert_ixp_asn:
          default: true
          description: |
            Insert the ASN of the exchange into the AS path. This function is only
            used in special cases. In 99% of all cases, it should be false.
          type: boolean
        ip:
          description: |-
            The BGP session will be established from this IP address.
            Only IPs assigned to the corresponding network service
            config can be used.
          type: string
        managing_account:
          description: |
            The `id` of the account responsible for managing the service via
            the API. A manager can read and update the state of entities.
          example: "238189294"
          type: string
        max_prefix_v4:
          description: |
            Announcing more than `max_prefix` IPv4 prefixes the bgp
            session will be droped.
          example: 5000
          minimum: 0
          nullable: true
          type: integer
        max_prefix_v6:
          description: |
            Announcing more than `max_prefix` IPv6 prefixes the bgp
            session will be droped.
          example: 5000
          minimum: 0
          nullable: true
          type: integer
        password:
          default: ""
          description: The cleartext BGP session password
          example: bgp-session-test-23
          maxLength: 128
          type: string
        session_mode:
          description: |
            Set the session mode with the routeserver.
          enum:
            - public
            - collector
          example: public
          type: string
        type:
          example: route_server
          type: string
      required:
        - type
      title: PartialRouteServerNetworkFeatureConfigUpdate
      type: object
    RouteServerNetworkFeaturePartial:
      description: Route Server Network Feature
      properties:
        address_families:
          description: |
            When creating a route server feature config, remember
            to specify which address family or families to use:

            If the route server network feature only supports `af_inet`,
            then the `as_set_v4` in the network feature config is required.

            If only `af_inet6` is supported, then the `as_set_v6` is required.

            If both `af_inet` and `af_inet6` are supported, either
            `as_set_v4` or `as_set_v6` is required, but both can be provided
            in the network service config.
          example:
            - af_inet
          items:
            enum:
              - af_inet
              - af_inet6
            type: string
          type: array
        asn:
          minimum: 0
          type: integer
        available_bgp_session_types:
          description: |
            The route server provides the following session modes.
          example:
            - passive
          items:
            enum:
              - active
              - passive
            type: string
          type: array
        flags:
          description: |-
            A list of IXP specific feature flags. This can be used
            to see if e.g. RPKI hard filtering is available.
          items:
            $ref: "#/components/schemas/IXPSpecificFeatureFlag"
          type: array
        fqdn:
          description: |
            The FQDN of the route server.
          example: rs1.moon-ix.net
          maxLength: 80
          type: string
        id:
          type: string
        ip_v4:
          description: |
            IPv4 address in [dot-decimal notation](https://en.wikipedia.org/wiki/Dot-decimal_notation)
            notation.
          example: 23.42.0.1
          type: string
        ip_v6:
          description: |
            IPv6 address in hexadecimal colon separated notation.
          example: 2001:23:42::1
          type: string
        looking_glass_url:
          description: |
            The url of the looking glass.
          example: https://lg.moon-ix.net/rs1
          type: string
        name:
          maxLength: 80
          type: string
        network_service:
          type: string
        nfc_required_contact_roles:
          description: |-
            The configuration will require at least one of each of the
            specified roles assigned to contacts.

            The role assignments is associated with the network feature
            config through the `role_assignments` list property.
          items:
            type: string
          readOnly: true
          type: array
        required:
          type: boolean
        session_mode:
          description: |
            When creating a route server feature config, remember
            to specify the same session_mode as the route server.
          enum:
            - public
            - collector
          example: public
          type: string
        type:
          example: route_server
          type: string
      required:
        - type
      title: PartialRouteServerNetworkFeature
      type: object
    Stateful:
      allOf:
        - $ref: "#/components/schemas/StatefulPartial"
        - required:
            - state
          title: Stateful
          type: object
    StatefulPartial:
      description: A stateful object
      properties:
        state:
          enum:
            - requested
            - allocated
            - testing
            - production
            - production_change_pending
            - decommission_requested
            - decommissioned
            - archived
            - error
            - operator
            - scheduled
          type: string
        status:
          items:
            $ref: "#/components/schemas/Status"
          type: array
      title: PartialStateful
      type: object
    Status:
      allOf:
        - $ref: "#/components/schemas/StatusPartial"
        - required:
            - severity
            - tag
            - message
            - attrs
            - timestamp
          title: Status
          type: object
    StatusPartial:
      description: Status Message
      properties:
        attrs:
          type: object
        message:
          type: string
        severity:
          description: |
            We are using syslog severity levels: 0 = Emergency,
            1 = Alert, 2 = Critical, 3 = Error, 4 = Warning,
            5 = Notice, 6 = Informational, 7 = Debug.
          example: 2
          format: int32
          maximum: 7
          minimum: 0
          type: integer
        tag:
          type: string
        timestamp:
          format: date-time
          type: string
      title: PartialStatus
      type: object
    VLanConfigDot1Q:
      allOf:
        - $ref: "#/components/schemas/VLanConfigDot1QPartial"
        - required:
            - vlan
            - vlan_type
          title: VLanConfigDot1Q
          type: object
    VLanConfigDot1QPartial:
      description: A Dot1Q vlan configuration
      properties:
        vlan:
          description: |
            A VLAN tag
          example: 23
          format: int32
          maximum: 4094
          minimum: 1
          type: integer
        vlan_ethertype:
          default: "0x8100"
          description: The ethertype of the vlan in hexadecimal notation.
          enum:
            - "0x8100"
            - "0x88a8"
            - "0x9100"
          type: string
        vlan_type:
          example: dot1q
          type: string
      required:
        - vlan_type
      title: PartialVLanConfigDot1Q
      type: object
    VLanConfigPort:
      allOf:
        - $ref: "#/components/schemas/VLanConfigPortPartial"
        - required:
            - vlan_type
          title: VLanConfigPort
          type: object
    VLanConfigPortPartial:
      description: A Port vlan configuration
      properties:
        vlan_type:
          example: port
          type: string
      required:
        - vlan_type
      title: PartialVLanConfigPort
      type: object
    VLanConfigQinQ:
      allOf:
        - $ref: "#/components/schemas/VLanConfigQinQPartial"
        - required:
            - outer_vlan
            - inner_vlan
            - vlan_type
          title: VLanConfigQinQ
          type: object
    VLanConfigQinQPartial:
      description: A QinQ vlan configuration
      properties:
        inner_vlan:
          description: |
            The inner VLAN id.
          example: 200
          format: int32
          maximum: 4094
          minimum: 1
          type: integer
        outer_vlan:
          description: |
            The outer VLAN id.
          example: 200
          format: int32
          maximum: 4094
          minimum: 1
          type: integer
        outer_vlan_ethertype:
          default: "0x8100"
          description: The ethertype of the outer tag in hexadecimal notation.
          enum:
            - "0x8100"
            - "0x88a8"
            - "0x9100"
          type: string
        vlan_type:
          example: dot1q
          type: string
      required:
        - vlan_type
      title: PartialVLanConfigQinQ
      type: object
    VlanConfig:
      description: |-
        The vlan configuration defines how the service
        is made available on the connection.
      discriminator:
        mapping:
          dot1q: "#/components/schemas/VLanConfigDot1Q"
          port: "#/components/schemas/VLanConfigPort"
          qinq: "#/components/schemas/VLanConfigQinQ"
        propertyName: vlan_type
      oneOf:
        - $ref: "#/components/schemas/VLanConfigDot1Q"
        - $ref: "#/components/schemas/VLanConfigQinQ"
        - $ref: "#/components/schemas/VLanConfigPort"
      title: VlanConfig
    VlanConfigPartial:
      description: |-
        The vlan configuration defines how the service
        is made available on the connection.
      discriminator:
        mapping:
          dot1q: "#/components/schemas/VLanConfigDot1QPartial"
          port: "#/components/schemas/VLanConfigPortPartial"
          qinq: "#/components/schemas/VLanConfigQinQPartial"
        propertyName: vlan_type
      oneOf:
        - $ref: "#/components/schemas/VLanConfigDot1QPartial"
        - $ref: "#/components/schemas/VLanConfigQinQPartial"
        - $ref: "#/components/schemas/VLanConfigPortPartial"
      title: VlanConfig (partial)
  securitySchemes:
    Bearer:
      bearerFormat: JWT
      scheme: bearer
      type: http
