openapi: 3.0.3
info:
  title: 'Fibre Cafe : Tenant API'
  version: '1.17'
  description: >
    # Introduction


    The Fibre Cafe is a scalable, unified platform to support L2C provisioning,
    in-life modification/cease and

    T2R trouble resolution between communication providers (CP) and network
    operators or aggregators.


    CPs are known as 'tenants' on the Fibre Cafe and communicate with this API -
    the Fibre Cafe's Tenant API. The

    network operators and aggregators providing the underlying services are
    known as 'suppliers'.


    The Fibre Cafe will route requests from this API to appropriate supplier(s).
    Tenants will be configured to use 

    suppliers based on requirements and commercial agreements.


    Initial availability and appointing requests are synchronous. Ordering
    requests are asynchronous with confirmation

    and updates via KCIs (Keep Customer Informed).


    **Note:** Order updates (KCIs) will be sent to the Tenant Updates API which
    the tenant must implement.

    __


    © 2022-2026 Strategic Imperatives
servers:
  - url: https://prod.fibregateway.com/v1
tags:
  - name: Address Lookup
    description: >
      Used to look up address identifiers and details for a given postal code or
      UPRN.


      This is not implemented by all suppliers - it is primarily provided to
      assist with NAD/District Code lookup for

      suppliers operating on the Openreach network.


      This follows the concepts in TMF673 - Address Management API.
  - name: Service Availability
    description: >
      Retrieve what services (if any) the supplier has available for a given
      address.


      This follows the concepts in TMF645 - Service Qualification API and TMF673
      - Address Management API.
  - name: Quote Management
    description: |
      Create and manage a quote to provide service at requested sites.
      This follows the concepts in TMF648 - Quote Management API.
  - name: Appointment Management
    description: >
      Retrieve and reserve appointments for installing or maintaining a service
      at a given address.


      This follows the concepts in TMF646 - Appointment API.
  - name: Order Management
    description: >
      Create and manage an order to provide, cease or modify a service at a
      given address.


      This follows the concepts in TMF641 - Service Ordering Management API.
paths:
  /addresses:
    get:
      tags:
        - Address Lookup
      summary: Find address details including UPRN, NAD and other identifiers.
      description: >
        This endpoint can be called to lookup addresses and, in particular,
        address

        identifiers (e.g. NAD and District Code) to use in subsequent calls.


        Postal code or UPRN must be supplied. When using postal code, additional

        context such as house name, street number and/or street should be
        supplied

        to reduce returned results

        (results may be truncated by the underlying address source).


        Availability of this endpoint requires an address source to be
        configured - it is primarily

        provided to assist with NAD/District Code lookup for suppliers operating
        on the Openreach network.
      operationId: handleAddressLookup
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to link request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: postalCode
          description: Postal code of address to lookup - this or UPRN must be supplied
          in: query
          required: false
          schema:
            type: string
        - name: uprn
          description: UPRN of address to lookup - this or postal code must be supplied
          in: query
          required: false
          schema:
            type: string
        - name: name
          description: Identifying name of address to filter when searching by postal code
          in: query
          required: false
          schema:
            type: string
        - name: streetNumber
          description: >-
            Numeric identifier of address to filter when searching by postal
            code
          in: query
          required: false
          schema:
            type: string
        - name: streetName
          description: Name identifying the street to filter when searching by postal code
          in: query
          required: false
          schema:
            type: string
        - name: supplier
          description: >-
            Supplier to use. If not specified, the tenant's default configured
            supplier will be used.
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Request successful - zero or more addresses were returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                type: array
                minItems: 0
                items:
                  $ref: '#/components/schemas/Address'
        '400':
          description: >-
            Bad request - supplied parameters were malformed or missing
            mandatory parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - >-
                    Query parameters were missing or an invalid combination was
                    supplied
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: d28f39dc-9847-40c4-aa7d-0fdb30798243
                code: NOT_IMPLEMENTED
                messages:
                  - Not implemented - contact support
        '502':
          description: Invalid response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - >-
                    The supplier API returned the following message: Internal
                    Error
        '503':
          description: Fibre Cafe is temporarily unavailable
        '504':
          description: Timeout or no response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 2050d55f-7656-440e-a479-3f7d4ffbc236
                code: SUPPLIER_FAULT
                messages:
                  - >-
                    The supplier encountered a server error: 503/Service
                    Unavailable
  /service-availability:
    get:
      tags:
        - Service Availability
      summary: Return available services for a given address.
      description: >
        This endpoint can be called to find what services are available at a
        given

        address.


        An address query parameter must be supplied specifying address ID and
        type

        as described above.


        If required, a particular supplier or list of suppliers can be specified

        in the request; otherwise the Fibre Cafe will check with all suppliers
        as

        configured for the tenant.
      operationId: handleAvailabilityCheck
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to link request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: address
          description: >-
            Address identifier of provided type e.g. UPRN to check for service
            availability
          in: query
          required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddressIdentifier'
              example:
                id: '200004033694'
                type: UPRN
        - name: suppliers
          description: >-
            If specified, the request will be sent only to the specified
            supplier(s)
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/SupplierList'
        - name: postalCode
          description: Not currently used
          in: query
          required: false
          schema:
            type: string
        - name: serviceTypes
          description: >-
            If specified, filters the service availability check to only include
            the specified service types
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/ServiceTypeList'
      responses:
        '200':
          description: Request successful - zero or more services were returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                type: array
                minItems: 0
                items:
                  $ref: '#/components/schemas/SupplierPossibleAvailability'
        '400':
          description: >-
            Bad request - supplied parameters were malformed or missing
            mandatory parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Address identifier type was not recognised
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /quote:
    post:
      tags:
        - Quote Management
      summary: Return a quote for available services for a given address.
      description: >
        This endpoint can be called to generate a quote for advanced services,
        such as Ethernet.

        The details of the individual supplier or list of suppliers must be
        specified in the request.
      operationId: handleQuote
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to link request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateQuote'
      responses:
        '201':
          description: Request successful - quote details were returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteResponse'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - sites must contain A-END and B-END entries
                  - >-
                    billingFrequency must be either monthly, quarterly or
                    annually
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /available-appointments:
    get:
      tags:
        - Appointment Management
      summary: Return available appointment slots for a given service and address.
      description: >
        This endpoint can be called to find what appointments a supplier has
        available

        to install or maintain service(s) at a given address.


        An address query parameter must be supplied specifying address ID and
        type along

        with the required service specification as returned by the
        /service-availability

        endpoint.


        The next available appointments after the appointmentStartDate will be
        returned -

        a suitable date should be chosen based on installationLeadTime if this
        was

        provided during availability check.


        Appointment slots are classified based on day as weekday or
        saturday/sunday and

        by time to day, AM/PM or early morning/evening. Based on the
        tenant-supplier

        agreement, some of these classifications will be considered premium.


        This request will be routed to a particular supplier which must be
        specified.
      operationId: handleAppointmentAvailability
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: supplier
          description: System identifier for a supplier on the Fibre Cafe
          in: query
          required: true
          schema:
            type: string
          example: DUMMY_SUPPLIER
        - name: address
          description: >-
            Address identifier of provided type e.g. UPRN to check for
            appointment availability
          in: query
          required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddressIdentifier'
              example:
                id: '200004033694'
                type: UPRN
        - name: serviceSpecification
          description: The service to be installed or maintained during this appointment
          in: query
          required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceSpecification'
              example:
                id: ftthl2r
        - name: serviceCharacteristics
          description: >-
            Characteristics of the service to be maintained during this
            appointment e.g. SERVICE_ID, CARE_LEVEL
          in: query
          required: false
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ServiceCharacteristic'
        - name: appointmentFromDate
          description: Find appointment slots from this date
          in: query
          required: false
          schema:
            type: string
            format: date
          example: '2022-01-05'
        - name: standardOnly
          description: >-
            Find appointment slots classified as standard only (exclude premium
            time slots)
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: singleDayAppointment
          description: Find only appointment slots that start/end on the same day
          in: query
          required: false
          schema:
            type: boolean
            default: false
        - name: appointmentPurpose
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/AppointmentPurpose'
        - name: serviceId
          description: >-
            Identifier of the existing live service, mandatory if
            appointmentPurpose is REPAIR
          in: query
          required: false
          schema:
            type: string
            minLength: 1
            maxLength: 50
          example: SI2345432345345
      responses:
        '200':
          description: >-
            Request successful - zero or more available appointments were
            returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AvailableAppointments'
        '400':
          description: >-
            Bad request - supplied parameters were malformed or missing
            mandatory parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing supplied parameters - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - >-
                    Invalid query string parameter: appointmentPurpose must be
                    [PROVIDE]
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '502':
          description: Invalid response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - >-
                    The supplier API returned the following message: Internal
                    Error
        '503':
          description: Fibre Cafe is temporarily unavailable
        '504':
          description: Timeout or no response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 2050d55f-7656-440e-a479-3f7d4ffbc236
                code: SUPPLIER_FAULT
                messages:
                  - >-
                    The gateway did not receive a timely response from the
                    supplier
  /appointments:
    post:
      tags:
        - Appointment Management
      summary: Reserve a previously returned appointment slot.
      description: >
        This endpoint can be called to reserve an appointment with a supplier to
        install

        or maintain service(s) at a given address.


        Details of a previously returned available appointment must be provided
        to be

        reserved according to the supplier reservation policy. Where the
        reservation

        has a TTL (time to live) before being released, the expiry time will be
        stated.


        The returned reservation ID must be sent as part of the order at which
        point

        it should be considered confirmed.
      operationId: handleReserveAppointment
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAppointment'
      responses:
        '201':
          description: >-
            Operation successful - appointment was reserved. Returned ID to be
            used when placing order
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Address identifier type was not recognised
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '502':
          description: Invalid response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - >-
                    The supplier API returned the following message: Internal
                    Error
        '503':
          description: Fibre Cafe is temporarily unavailable
        '504':
          description: Timeout or no response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 2050d55f-7656-440e-a479-3f7d4ffbc236
                code: SUPPLIER_FAULT
                messages:
                  - >-
                    The gateway did not receive a timely response from the
                    supplier
  /service-orders:
    post:
      tags:
        - Order Management
      summary: Create an order for provide, cease or modify service.
      description: >
        This endpoint can be called to place a order with a supplier to provide,
        cease

        or modify a service.


        The Fibre Cafe will validate the request and generate an order number
        which is

        returned. If the order is rejected immediately then a 400 code will be
        returned

        with reason(s) for the rejection in the response.


        The order will then be sent to the supplier for processing and further
        updates

        will be sent via KCIs - this could include a rejection if the order does
        not

        meet supplier validation/processing rules. Once the order is
        acknowledged, the

        supplier may assign their own order number which will be returned in the
        KCI.
      operationId: handleCreateOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceOrder'
      responses:
        '201':
          description: >-
            Order was received by the gateway and will be acknowledged later via
            a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SolicitedServiceOrder'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - primaryContact is required
                  - >-
                    serviceOrderItem.serviceCharacteristics[?(@.name ==
                    'LINE_PROFILE')] is required
                  - >-
                    primaryContact.phoneNumber fails to match the required
                    pattern: ^\+?[\d\s-#]{9,50}$
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-orders/{id}:
    get:
      tags:
        - Order Management
      summary: Retrieve current order details including updates (KCIs).
      description: >
        This endpoint is called to retrieve the current details (including KCIs)
        about an inflight service order.
      operationId: handleGetOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: id
          in: path
          description: Find order details relating to the specified order
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Request successful - order details were returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceOrder'
        '400':
          description: >-
            Bad request - supplied parameters were malformed or missing
            mandatory parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Missing mandatory parameter(s)
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '404':
          description: Order not found with the specified id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: dfad7a95-4f29-4ab5-a743-d97fd2dc9711
                code: NOT_FOUND
                messages:
                  - Order was not found with id '123'
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - X-Request-ID identifier is required
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '502':
          description: Invalid or no response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - >-
                    The supplier API returned the following message: Internal
                    Error
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-order-amendments:
    post:
      tags:
        - Order Management
      summary: Request an amendment to an inflight provide, cease or modify order.
      description: >
        This endpoint is called to request amendment(s) to an existing inflight
        order to

        provision, modify or cease a service.


        The Fibre Cafe will validate the request and generate an amendment
        reference which is

        returned. If the order amendment is rejected immediately then a 400 code
        will be

        returned with reason(s) for the rejection in the response.


        The order amendment will then be sent to the supplier for processing and
        further

        updates will be sent via KCIs - this could include a rejection if the
        amendment

        does not meet supplier validation/processing rules.
      operationId: handleAmendOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceOrderAmendment'
        required: true
      responses:
        '201':
          description: >-
            Order amendment request has been received and will be confirmed or
            rejected later by a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceOrderAmendment'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Order amendment was invalid - primary contact is required
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-order-cancellations:
    post:
      tags:
        - Order Management
      summary: Request to cancel an inflight provide, cease or modify order.
      description: >
        This endpoint is called to request cancellation of an existing inflight
        order to

        provision, modify or cease a service.


        The Fibre Cafe will validate the request and generate a unique ID which
        is returned.

        If the order cancellation is rejected immediately then a 400 code will
        be

        returned with reason(s) for the rejection in the response.


        The order cancellation will then be sent to the supplier for processing
        and further

        updates will be sent via KCIs - this could include a rejection if the
        cancellation

        does not meet supplier validation/processing rules.
      operationId: handleCancelOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceOrderCancellation'
      responses:
        '201':
          description: >-
            Order cancellation request has been received and will be confirmed
            or rejected later by a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceOrderCancellation'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Cancellation reason code was not recognised
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /ethernet/service-orders:
    post:
      tags:
        - Order Management
      summary: Create an order to provide ethernet service.
      description: >
        This endpoint can be called to place an ethernet order with a supplier -
        currently only

        provide is supported with cease and modify coming soon.


        The Fibre Cafe will validate the request and generate an order number
        which is

        returned. If the order is rejected immediately then a 400 code will be
        returned

        with reason(s) for the rejection in the response.


        The ethernet order will then be sent to the supplier for processing and
        further updates

        will be sent via KCIs - this could include a rejection if the order does
        not

        meet supplier validation/processing rules. Once the order is
        acknowledged, the

        supplier may assign their own order number which will be returned in the
        KCI.
      operationId: handleCreateEthernetOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEthernetOrder'
      responses:
        '201':
          description: >-
            Order was received by the Fibre Cafe and will be acknowledged later
            via a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SolicitedEthernetOrder'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - primaryContact is required
                  - >-
                    serviceOrderItem.serviceCharacteristics[?(@.name ==
                    'LINE_PROFILE')] is required
                  - >-
                    primaryContact.phoneNumber fails to match the required
                    pattern: ^+?[ds-#]{9,50}$
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /ethernet/service-orders/{id}:
    get:
      tags:
        - Order Management
      summary: Retrieve current ethernet order details including updates (KCIs).
      description: >
        This endpoint is called to retrieve the current details (including KCIs)
        about an inflight ethernet order.
      operationId: handleGetEthernetOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: id
          in: path
          description: Find order details relating to the specified ethernet order
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Request successful - order details were returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EthernetOrder'
        '400':
          description: >-
            Bad request - supplied parameters were malformed or missing
            mandatory parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Missing mandatory parameter(s)
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '404':
          description: Order not found with the specified id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: dfad7a95-4f29-4ab5-a743-d97fd2dc9711
                code: NOT_FOUND
                messages:
                  - Order was not found with id '123'
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - X-Request-ID identifier is required
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '502':
          description: Invalid or no response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - >-
                    The supplier API returned the following message: Internal
                    Error
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-tests:
    post:
      tags:
        - Service Test Management
      summary: Create a service test record for an active service.
      description: >
        This endpoint can be called to perform a service test on an active
        service.


        The Fibre Cafe will validate the request and generate a service test
        identifier which is

        returned. If the test request is rejected immediately then a 4XX code
        will be returned

        with reason(s) for the rejection in the response.


        The Fibre Cafe will internally determine the best supplier test to
        execute based on supplier 

        and service specification attributes, in addition to the PROBLEM_TYPE
        characteristics supplied.


        The service test result will be returned asynchronously via a KCI, and
        may also be queried via

        the GET /service-tests/{id} API.
      operationId: handleServiceTest
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceTest'
      responses:
        '201':
          description: >-
            Request was received by the Fibre Cafe and will be acknowledged
            later via a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceTest'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - primaryContact is required
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-tests/{id}:
    get:
      tags:
        - Service Test Management
      summary: Retrieve current service test details including result if available.
      description: >
        This endpoint is called to retrieve the current details and status for a
        service test request. The result of

        the test will be returned if available.
      operationId: handleGetServiceTestById
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: id
          in: path
          description: Find service test details relating to the specified identifier
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Request successful - service test details were returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ServiceTest'
                  - $ref: '#/components/schemas/ServiceTestUpdates'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Missing mandatory parameter(s)
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '404':
          description: Service Test not found with the specified id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: dfad7a95-4f29-4ab5-a743-d97fd2dc9711
                code: NOT_FOUND
                messages:
                  - Service Test was not found with id '123'
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - X-Request-ID identifier is required
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-problems:
    post:
      tags:
        - Service Problem Management
      summary: >-
        Create a problem/incident for an active service owned by the
        communications provider (CP).
      description: >
        This endpoint can be called to raise a problem with a supplier to
        resolve a potential issue with a service.


        The Fibre Cafe will validate the request and generate a problem
        identifier which is 

        returned. If the problem request is rejected immediately then a 4XX code
        will be returned

        with reason(s) for the rejection in the response.


        The problem will then be sent to the supplier for processing and further
        updates

        will be sent via KCIs - this could include a rejection if the problem
        does not

        meet supplier validation/processing rules. Once the problem is
        acknowledged, the

        supplier may assign their internal reference number which will be
        returned in the KCI as a characteristic.
      operationId: handleCreateProblem
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceProblem'
      responses:
        '201':
          description: >-
            Problem request was received by the Fibre Cafe and will be
            acknowledged later via a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblem'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - primaryContact is required
                  - >-
                    primaryContact.phoneNumber fails to match the required
                    pattern
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-problems/{id}:
    get:
      tags:
        - Service Problem Management
      summary: Retrieve current service problem details including updates (KCIs).
      description: >
        This endpoint is called to retrieve the current details (including KCIs)
        about a service problem request.
      operationId: handleGetServiceProblemById
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: id
          in: path
          description: Find order details relating to the specified service problem
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Request successful - service problem details were returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ServiceProblem'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Missing mandatory parameter(s)
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '404':
          description: Service Problem not found with the specified id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: dfad7a95-4f29-4ab5-a743-d97fd2dc9711
                code: NOT_FOUND
                messages:
                  - Service Problem was not found with id '123'
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - X-Request-ID identifier is required
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-problem-amendments:
    post:
      tags:
        - Service Problem Management
      summary: Request to amend an inflight service problem.
      description: >
        This endpoint is called to request amendment of an existing inflight
        service problem on an active service.


        The Fibre Cafe will validate the request and generate a unique ID which
        is returned.

        If the problem amendment is rejected immediately then a 4XX code will be

        returned with reason(s) for the rejection in the response.


        The problem amendment will then be sent to the supplier for processing
        and further

        updates will be sent via KCIs - this could include a rejection if the
        request

        does not meet supplier validation/processing rules.
      operationId: handleAmendProblem
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceProblemAmendment'
      responses:
        '201':
          description: >-
            Problem amendment request has been received and will be confirmed or
            rejected later by a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblemAmendment'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - escalationRequest can only accept true/false values.
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-problem-cancellations:
    post:
      tags:
        - Service Problem Management
      summary: Request to cancel an inflight service problem.
      description: >
        This endpoint is called to request cancellation of an existing inflight
        service problem on an active service.


        The Fibre Cafe will validate the request and generate a unique ID which
        is returned.

        If the problem cancellation is rejected immediately then a 4XX code will
        be

        returned with reason(s) for the rejection in the response.


        The problem cancellation will then be sent to the supplier for
        processing and further

        updates will be sent via KCIs - this could include a rejection if the
        cancellation

        does not meet supplier validation/processing rules.
      operationId: handleCancelProblem
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceProblemCancellation'
      responses:
        '201':
          description: >-
            Problem cancellation request has been received and will be confirmed
            or rejected later by a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblemCancellation'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Cancellation reason code was not recognised
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-problem-resolutions/{id}:
    patch:
      tags:
        - Service Problem Management
      summary: Request to accept or reject resolution of an inflight service problem.
      description: >
        This endpoint is called to request acceptance or rejection of a
        supplier's resolution to an inflight

        service problem.
      operationId: handleServiceProblemResolution
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: id
          in: path
          description: Service problem resolution identifier
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchServiceProblemResolution'
      responses:
        '200':
          description: Service problem resolution has been updated successfully
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblemResolution'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Invalid resolution status
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
components:
  schemas:
    SupplierAvailability:
      description: >-
        Returns the available services that a supplier has at the selected
        address along with site information
      type: object
      required:
        - supplier
        - address
        - serviceSpecifications
      properties:
        supplier:
          description: System identifier for a supplier on the Fibre Cafe
          type: string
          pattern: ^\w{1,20}$
          example: SUPPLIER1
        address:
          $ref: '#/components/schemas/Address'
        serviceSpecifications:
          description: List of services that are available at this address
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/ServiceSpecificationAvailability'
        siteInformation:
          $ref: '#/components/schemas/SiteInformation'
    SupplierNoAvailability:
      description: Returned where a supplier has no availability at the selected address.
      type: object
      required:
        - supplier
        - address
        - unavailabilityReasons
      properties:
        supplier:
          description: System identifier for a supplier on the Fibre Cafe
          type: string
          pattern: ^\w{1,20}$
          example: SUPPLIER2
        address:
          $ref: '#/components/schemas/Address'
        unavailabilityReasons:
          description: >-
            Provides the reason(s) where there is coverage in the area but no
            availability at the address
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/UnavailabilityReason'
        serviceReadyDate:
          description: Date when the service will be available (if applicable)
          type: string
          format: date
          example: '2022-01-01'
    SupplierAvailabilityFailure:
      description: >
        Returned if the Fibre Cafe cannot connect to the supplier or the
        supplier API returns an error.

        The underlying cause will be returned but will likely require help from
        the Fibre Cafe support team or

        by contacting the supplier directly.

        Every error is uniquely identified via a UUID which should be reported
        to the support team as required.


        Possible error types:

        - NOT_AUTHORISED : An authorisation issue accessing the supplier API
        using the tenant's credentials.

        - SUPPLIER_FAULT : The supplier API has encountered an unexpected error
        or is not responding to the Fibre Cafe.

        - SUPPLIER_TIMED_OUT : The Fibre Cafe did not receive a timely response
        from the supplier.

        - GATEWAY_FAULT : The Fibre Cafe gateway has encountered an unexpected
        error.
      type: object
      required:
        - supplier
        - error
      properties:
        supplier:
          description: System identifier for a supplier on the Fibre Cafe
          type: string
          pattern: ^\w{1,20}$
          example: SUPPLIER3
        error:
          $ref: '#/components/schemas/Error'
    SupplierPossibleAvailability:
      anyOf:
        - $ref: '#/components/schemas/SupplierAvailability'
        - $ref: '#/components/schemas/SupplierNoAvailability'
        - $ref: '#/components/schemas/SupplierAvailabilityFailure'
    SiteInformation:
      description: Describes site information and details of the lines available.
      type: object
      properties:
        line:
          $ref: '#/components/schemas/NewLine'
        existingLines:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/CopperLine'
              - $ref: '#/components/schemas/Ont'
        serviceReadyDate:
          description: Date service will be/was ready
          type: string
          format: date
          example: '2022-01-01'
    BaseLineInformation:
      description: Abstract schema - defines base line information
      type: object
      properties:
        enniId:
          description: Unique identifier of the ENNI (if available)
          type: string
          minLength: 1
          maxLength: 100
          example: S1889
        siteName:
          description: >-
            Unique identifier for point of presence/handover point (if
            available)
          type: string
          minLength: 1
          maxLength: 100
        siteLocation:
          description: Site address for the point of presence/handover point (if available)
          type: string
          minLength: 1
          maxLength: 100
        installationType:
          $ref: '#/components/schemas/InstallationType'
        lineCharacteristics:
          description: Available characteristics of this line (as supported)
          type: array
          items:
            $ref: '#/components/schemas/LineCharacteristic'
    NewLine:
      description: >-
        A new line can be installed - provides installation information and any
        constraints.
      type: object
      allOf:
        - type: object
          properties:
            type:
              description: >-
                Type of available line - this is a NEW line. This is retained
                for backwards compatibility and will be removed in a future
                version.
              type: string
              default: NEW
              deprecated: true
            lineType:
              $ref: '#/components/schemas/LineType'
            constraints:
              description: Where there are constraints that must be satisfied (soft LOC)
              type: array
              items:
                $ref: '#/components/schemas/AvailabilityConstraint'
        - $ref: '#/components/schemas/BaseLineInformation'
    CopperLine:
      description: Existing copper line - if stopped then will have a stopped date
      type: object
      required:
        - lineType
        - lineId
      allOf:
        - $ref: '#/components/schemas/BaseLineInformation'
        - type: object
          properties:
            lineType:
              $ref: '#/components/schemas/CopperLineType'
            lineId:
              description: Line identifier
              type: string
              minLength: 1
              maxLength: 100
              example: OHP5738089O3
            status:
              $ref: '#/components/schemas/LineStatus'
            tenantActive:
              description: >-
                True if this line is currently in use by the tenant (optional -
                only provided where supported)
              type: boolean
              example: false
            productType:
              $ref: '#/components/schemas/ProductType'
            stoppedDate:
              description: The date the line was previously stopped (if applicable)
              type: string
              format: date-time
              example: '2022-01-01T13:45:00.000Z'
    LineCharacteristic:
      description: A characteristic or attribute of an available line.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the line characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: DOWNSTREAM_BANDWIDTH
        value:
          description: Value for this characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: '68700'
    Ont:
      description: >-
        An existing ONT device that can be used for a (re)start or line
        takeover.
      type: object
      required:
        - lineType
        - ontReference
        - ports
      allOf:
        - $ref: '#/components/schemas/BaseLineInformation'
        - type: object
          properties:
            lineType:
              $ref: '#/components/schemas/FibreLineType'
            ontReference:
              description: ONT reference number
              type: string
              example: ONT0000123123
              minLength: 1
              maxLength: 20
            ontSerialNumber:
              description: ONT serial number
              type: string
              example: '1234567890'
              minLength: 1
              maxLength: 100
            ontManufacturer:
              description: ONT manufacturer (if available)
              type: string
              example: Nokia
              minLength: 1
              maxLength: 100
            ontFloor:
              description: ONT location - floor (if available/applicable)
              type: string
              example: '1'
              minLength: 1
              maxLength: 100
            ontRoom:
              description: ONT location - room (if available/applicable)
              type: string
              example: Reception
              minLength: 1
              maxLength: 100
            ontPosition:
              description: ONT location - position (if available/applicable)
              type: string
              minLength: 1
              maxLength: 100
            ports:
              description: ONT port number(s)
              type: array
              items:
                $ref: '#/components/schemas/OntPort'
    OntPort:
      description: Defines an individual port on an ONT
      type: object
      required:
        - portNumber
        - status
      properties:
        portNumber:
          description: ONT port number
          type: number
          example: 2
        description:
          description: Description/identifier/type of ONT port (if available)
          type: string
          example: Data
        status:
          $ref: '#/components/schemas/LineStatus'
        tenantActive:
          description: >-
            True if this port is currently in use by the tenant (optional - only
            provided where supported)
          type: boolean
          example: false
        stoppedDate:
          description: The date the port was previously stopped (if applicable)
          type: string
          format: date-time
          example: '2022-01-01T13:45:00.000Z'
    AvailabilityConstraint:
      description: >-
        Where there is availability but there are some constaints to the
        installation.
      type: object
      required:
        - code
      properties:
        code:
          $ref: '#/components/schemas/AvailabilityConstraintCode'
        text:
          description: Text explaining any constraint or LOC (optional)
          type: string
          minLength: 1
          maxLength: 1000
    UnavailabilityReason:
      description: Where there is no availability, provides the reason.
      type: object
      required:
        - code
      properties:
        code:
          $ref: '#/components/schemas/UnavailabilityReasonCode'
        text:
          description: Text explaining reason for no availability (optional)
          type: string
          minLength: 1
          maxLength: 1000
    AvailableAppointments:
      description: >-
        Represents the available appointment time slots that the supplier has
        for the chosen address and service.
      type: object
      required:
        - supplier
        - address
        - serviceSpecifications
        - availableTimeslots
      properties:
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is providing
            this appointment
          type: string
          pattern: ^\w{1,20}$
          example: SUPPLIER1
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        availableTimeslots:
          description: List of available appointment timeslots
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/Timeslot'
    CreateAppointment:
      description: >-
        Represents an appointment with the supplier for the chosen address and
        service(s). The id must be sent when placing an order to confirm the
        appointment. Attempting to place an order with an appointment
        reservation after the expiry may fail.
      type: object
      required:
        - supplier
        - address
        - serviceSpecification
        - purpose
        - timeslot
      properties:
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this appointment
          type: string
          pattern: ^\w{1,20}$
          example: SUPPLIER1
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        serviceCharacteristics:
          description: >
            List of service characteristics for the appointment - e.g.
            CARE_LEVEL
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/ServiceCharacteristic'
        serviceId:
          description: >-
            Identifier of an existing live service, mandatory for REPAIR
            appointments
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345345
        purpose:
          $ref: '#/components/schemas/AppointmentPurpose'
        timeslot:
          $ref: '#/components/schemas/Timeslot'
    Appointment:
      allOf:
        - type: object
          required:
            - id
          properties:
            id:
              description: Unique identifier for this appointment
              type: number
              minimum: 1
              example: 345
            supplierReference:
              description: >-
                Appointment reference generated by the supplier (for information
                only)
              type: string
              minLength: 1
              maxLength: 50
              example: '123456543'
            expiryDateTime:
              description: >-
                Where an appointment is reserved, this contains the date/time
                when the reservation will expire.
              type: string
              format: date-time
              example: '2022-01-01T13:45:00.000Z'
        - $ref: '#/components/schemas/CreateAppointment'
    Timeslot:
      description: Represents an appointment timeslot with a supplier.
      type: object
      required:
        - timeslotStartDateTime
        - timeslotEndDateTime
      properties:
        timeslotStartDateTime:
          description: Start date/time for this timeslot
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        timeslotEndDateTime:
          description: End date/time for this timeslot
          type: string
          format: date-time
          example: '2022-01-10T13:00:00.000Z'
        classification:
          $ref: '#/components/schemas/TimeslotClassification'
        standard:
          description: Timeslot is classified as standard (non-premium)
          type: boolean
          readOnly: true
          default: true
    ServiceSpecification:
      description: Details of a service the supplier provides at the selected address.
      type: object
      required:
        - id
      properties:
        id:
          description: Unique identifier for this service specification
          type: string
          minLength: 1
          maxLength: 50
          example: ftthl2r
        name:
          description: Name of the service
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: FTTH
    ServiceSpecificationAvailability:
      allOf:
        - $ref: '#/components/schemas/ServiceSpecification'
        - type: object
          properties:
            serviceCharacteristics:
              description: Service characteristics supported by this service
              type: array
              items:
                $ref: '#/components/schemas/ServiceCharacteristicAvailability'
    ServiceCharacteristicAvailability:
      description: >-
        A characteristic or attribute of an available service (where
        applicable).
      type: object
      required:
        - name
        - values
      properties:
        name:
          description: Name of the service characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: LINE_PROFILE
        values:
          description: Supported values for this characteristic
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 50
            example: 100/20
    UnsolicitedCeaseServiceOrder:
      description: Unsolicited cease for an existing live service.
      type: object
      required:
        - id
        - supplier
        - supplierOrderNumber
        - reason
        - serviceId
        - requestedCeaseDate
        - status
        - orderType
      properties:
        id:
          description: >-
            Unique reference identifying this unsolicited cease order (generated
            by the Fibre Cafe)
          type: number
          minimum: 1
          example: 123
        orderType:
          $ref: '#/components/schemas/UnsolicitedCeaseOrderType'
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this unsolicited cease order
          type: string
          pattern: ^\w{1,20}$
          example: DUMMY_SUPPLIER
        supplierOrderNumber:
          description: Order reference provided by the supplier
          type: string
          minLength: 1
          maxLength: 50
          example: A123X
        reason:
          $ref: '#/components/schemas/UnsolicitedCeaseReason'
        serviceId:
          description: Identifier of the existing live service to be ceased
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345345
        retailerId:
          description: Gaining retailer ID (OFCOM RID of the gaining CP)
          type: string
          minLength: 1
          maxLength: 50
          example: XXX
        requestedCeaseDate:
          description: The requested date/time for the service to cease
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        committedDate:
          description: >-
            Date/time committed to the cease order. Once set, this value does
            not usually change.
          type: string
          format: date-time
          example: '2022-01-01T09:09:33.001Z'
        targetDate:
          description: >-
            The current expected completion date. This can be different to the
            committedDate if the order has been delayed for any reason, and can
            change possibly multiple times.
          type: string
          format: date-time
          example: '2022-01-01T09:09:33.001Z'
        status:
          $ref: '#/components/schemas/OrderStatus'
        created:
          description: Date/time when the order was created
          type: string
          format: date-time
          example: '2022-01-01T09:09:33.001Z'
        updated:
          description: Date/time when the order was last updated
          type: string
          format: date-time
          example: '2022-01-01T09:45:39.001Z'
        serviceOrderCancellation:
          $ref: '#/components/schemas/ServiceOrderCancellation'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/BaseServiceUpdate'
    BaseServiceUpdate:
      description: >
        An update (KCI) to an inflight service. Reasons for the entity update
        can be as follows;

        - Entity has been updated

        - Entity has been delayed

        - Entity has been committed

        - Appointment was missed

        - Information required

        - Unable to send the entity to supplier
      type: object
      required:
        - id
        - supplier
        - deliveryStatus
        - updateType
      properties:
        id:
          description: Unique identifier for this update (generated by the Fibre Cafe)
          type: string
          pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
          example: 3456cf7d-4471-42e4-a5be-c24ed58a7aa6
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this entity
          type: string
          pattern: ^\w{1,20}$
          example: SUPPLIER1
        sequenceNumber:
          description: Sequence number of this KCI to ensure ordering
          type: number
          minimum: 1
          example: 1
        issuedOn:
          description: Date/time when supplier issued this update
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        receivedOn:
          description: Date/time when Fibre Cafe received this update
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        deliveredOn:
          description: Date/time when Fibre Cafe delivered this update to the tenant API
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        deliveryStatus:
          $ref: '#/components/schemas/DeliveryStatus'
        updateType:
          $ref: '#/components/schemas/UpdateType'
        supplierNotes:
          description: >-
            The supplier has added these note(s) about the entity relating to
            this KCI
          type: array
          items:
            $ref: '#/components/schemas/SupplierNote'
        information:
          $ref: '#/components/schemas/Information'
        action:
          $ref: '#/components/schemas/Action'
        error:
          $ref: '#/components/schemas/SupplierFailure'
    ServiceProblemUpdate:
      allOf:
        - $ref: '#/components/schemas/BaseServiceUpdate'
        - type: object
          properties:
            serviceProblemResolution:
              $ref: '#/components/schemas/ServiceProblemResolution'
            serviceProblemAmendment:
              $ref: '#/components/schemas/ServiceProblemAmendment'
            serviceProblemCancellation:
              $ref: '#/components/schemas/ServiceProblemCancellation'
    CreateServiceTest:
      description: >
        Details of a service test. An intrusive service test must be performed
        against the service, prior to raising

        any service problem. This service test will classify the outcome into
        Red, Amber or Green, also supporting

        exception scenarios. The next steps in the journey will depend on this
        result and any additional details provided.
      type: object
      required:
        - serviceId
        - problemType
        - serviceSpecification
        - supplier
        - characteristics
      properties:
        serviceId:
          description: Identifier of an existing live service
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345345
        problemType:
          description: |
            The type of problem being experienced with the service.
            - CPE
            - CUSTOMER
            - OUTAGE
            - PERFORMANCE
            - STABILITY
            - SYNCHRONISATION
          type: string
          pattern: ^[\w_]{3,15}
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this service
          type: string
          pattern: ^[\w_]{1,20}
          example: DUMMY_SUPPLIER
        supplierReference:
          description: >-
            Supplier reference for this service test (if available - for
            information only)
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: A12345
        characteristics:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ServiceTestCharacteristic'
        created:
          description: Date/time when the service test was created
          type: string
          format: date-time
          readOnly: true
          example: '2022-01-01T09:09:33.001Z'
        updated:
          description: Date/time when the service test was last updated
          type: string
          format: date-time
          readOnly: true
          example: '2022-01-01T09:45:39.001Z'
    ServiceTest:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique reference identifying this service test (test number -
                generated by Fibre Cafe)
              type: number
              minimum: 1
              readOnly: true
              example: 123
            status:
              $ref: '#/components/schemas/ServiceTestStatus'
            created:
              description: Date/time when the service test was created
              type: string
              format: date-time
              readOnly: true
              example: '2022-01-01T09:09:33.001Z'
            updated:
              description: Date/time when the service test was last updated
              type: string
              format: date-time
              readOnly: true
              example: '2022-01-01T09:45:39.001Z'
            supplierReference:
              description: >-
                Supplier reference for this service test (if available - for
                information only)
              type: string
              minLength: 1
              maxLength: 50
              readOnly: true
              example: A12345
        - $ref: '#/components/schemas/CreateServiceTest'
    ServiceTestUpdates:
      description: Details of updates to a service test request
      type: object
      properties:
        result:
          $ref: '#/components/schemas/ServiceTestResult'
    ServiceTestResult:
      description: Result of a service test request once available.
      type: object
      required:
        - testValidity
        - testOutcome
      properties:
        testValidity:
          description: >-
            The time until the test results are no longer valid. If test is
            invalid, it is set to now
          type: string
          format: date-time
          readOnly: true
          example: '2022-01-01T09:45:39.001Z'
        testMeasures:
          description: >-
            The specific metrics returned as part of the service test execution
            (where available)
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/TestMeasure'
        testOutcome:
          $ref: '#/components/schemas/TestOutcome'
    TestOutcome:
      description: The outcome of the service test execution.
      type: object
      required:
        - testResult
        - code
      properties:
        testResult:
          description: RAG Status on the service test execution
          type: string
          enum:
            - UNAVAILABLE
            - RED
            - AMBER
            - GREEN
            - FAILED
          example: AMBER
        code:
          description: Code representing the test result
          type: string
          pattern: ^[A-Z_]{5,35}
          example: NO_FAULT_FOUND
        description:
          description: A textual description of the service test and associated next steps
          type: string
          maxLength: 256
        supplierCodes:
          description: 'Supplier code(s) representing the test result '
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 50
            example: D1234
        supplierText:
          description: Text from the supplier explaining the test result (where available)
          type: string
          minLength: 1
          maxLength: 1000
    TestMeasure:
      description: The specific metrics returned as part of the service test execution.
      type: object
      required:
        - metricName
        - metricValue
      properties:
        metricName:
          description: The name of the metric being reported
          type: string
          readOnly: true
          maxLength: 64
          pattern: ^[A-Z_]{5,25}
          example: ONT_LIGHT_LEVEL
        captureDateTime:
          description: The date-time the measurement was captured
          type: string
          format: date-time
          readOnly: true
          example: '2022-01-01T09:45:39.001Z'
        metricValue:
          description: A measurement of the metric
          type: string
          maxLength: 128
          readOnly: true
          example: '-14.5'
        unitOfMeasure:
          description: A unit of measurement used to measure the metric
          type: string
          maxLength: 128
          readOnly: true
          example: decibel
        ruleViolation:
          description: >-
            Confirms if the measurement is below the agreed thresholds and a
            rule violation has occurred
          type: boolean
          readOnly: true
          example: false
        ruleSeverity:
          description: The severity of the violation
          type: string
          readOnly: true
          enum:
            - SEVERE
            - MAJOR
            - MINOR
            - WARNING
            - N/A
          example: WARNING
    ServiceTestCharacteristic:
      description: >-
        A generic characteristic object to support extendable data sets. All
        characteristics will be referenced in developer documentation.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the characteristic
          type: string
          minLength: 1
          maxLength: 50
        value:
          description: Value for this characteristic
          type: string
          minLength: 1
          maxLength: 50
    ServiceProblemCharacteristic:
      description: >-
        A generic characteristic object to support extendable data sets. All
        characteristics will be referenced in developer documentation.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the characteristic
          type: string
          minLength: 1
          maxLength: 50
        value:
          description: Value for this characteristic
          type: string
          minLength: 1
          maxLength: 50
    CreateServiceProblem:
      description: >-
        Represents a request to raise a new problem on an existing active
        service.
      type: object
      required:
        - problemType
        - problemText
        - serviceId
        - serviceSpecification
        - supplier
        - serviceTestId
        - characteristics
        - primaryContact
        - notes
      properties:
        externalIdentifier:
          description: >-
            The communications provider (CP) identifier for the problem. Used
            for reference purposes only
          type: string
          minLength: 1
          maxLength: 64
          example: DS-2345432345345
        problemType:
          description: >-
            The type of problem being raised. This will be advised or inferred
            as part of the service test result
          type: string
          pattern: ^[\w_]{5,50}
          example: PERFORMANCE
        problemText:
          description: The description of problem being raised as defined by the end user.
          type: string
          minLength: 10
          maxLength: 80
          example: The service keeps dropping between 6pm and 9pm every evening.
        serviceId:
          description: Identifier of an existing live service
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345345
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this service
          type: string
          pattern: ^[\w_]{1,20}
          example: DUMMY_SUPPLIER
        serviceTestId:
          description: >-
            Identifier of a current service test that has been performed against
            the service prior to raising the service problem
          type: number
          minimum: 1
          example: 123
        characteristics:
          description: List of characteristics providing context on the problem
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ServiceProblemCharacteristic'
        primaryContact:
          $ref: '#/components/schemas/Contact'
        secondaryContact:
          $ref: '#/components/schemas/Contact'
        appointmentReservationId:
          description: Unique identifier for the reserved appointment (if applicable)
          type: number
          minimum: 1
          example: 345
        parentServiceProblemId:
          description: >-
            Unique reference for an issue that is believed to be related, for
            example a multiline network outage
          type: number
          example: 2443435345
        hazards:
          description: Hazard information about the site where the service will be restored
          type: string
          example: Hazardous materials stored on site
          minLength: 1
          maxLength: 1000
        onSiteRestrictions:
          description: >-
            Information about restrictions on the site where the service will be
            restored
          type: string
          example: Restricted access
          minLength: 1
          maxLength: 1000
        notes:
          description: >-
            Notes about the problem which are required by the supplier. This
            includes additional information that may be required - refer to
            developer portal
          type: string
          example: Lorem ipsum dolor sit amet...
          minLength: 1
          maxLength: 1000
    ServiceProblem:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique reference identifying this service problem (generated by
                Fibre Cafe)
              type: number
              minimum: 1
              example: 123
            status:
              $ref: '#/components/schemas/ProblemStatus'
            created:
              description: Date/time when the service problem was created
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            updated:
              description: Date/time when the service problem was last updated
              type: string
              format: date-time
              example: '2022-01-01T09:45:39.001Z'
            supplierIdentifier:
              description: >-
                Service problem reference generated by the supplier once
                acknowledged (for information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
            updates:
              description: Updates (KCIs) received about the service problem.
              type: array
              minItems: 0
              items:
                $ref: '#/components/schemas/ServiceProblemUpdate'
        - $ref: '#/components/schemas/CreateServiceProblem'
    ServiceOrderItem:
      description: Order for a service that the supplier provides at the selected address.
      type: object
      required:
        - serviceSpecification
        - serviceCharacteristics
      properties:
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        serviceCharacteristics:
          description: >
            List of service characteristics for the service order item - e.g.
            for FTTH service

            - LINE_PROFILE

            - REMOTE_ID

            - AUTHENTICATION_AGENT (DHCPRelayAgent, PPPIntermediateAgent, None)

            - CARE_LEVEL
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/ServiceCharacteristic'
    ServiceCharacteristic:
      description: A characteristic or attribute of an available service.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the service characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: LINE_PROFILE
        value:
          description: Value for this characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: 1G1G
    ModifyServiceCharacteristic:
      description: Modify a characteristic or attribute of an active service.
      type: object
      allOf:
        - type: object
          properties:
            action:
              $ref: '#/components/schemas/ModifyAction'
        - $ref: '#/components/schemas/ServiceCharacteristic'
    Characteristic:
      description: A generic attribute associated to an entity.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the characteristic
          type: string
          minLength: 1
          maxLength: 50
          pattern: ^[A-Z_]{5,50}
          example: POINT_OF_INTERCONNECT
        value:
          description: Value for this characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: 1G1G
    Service:
      description: The details regarding the Ethernet service
      type: object
      required:
        - serviceSpecification
        - serviceCharacteristic
      properties:
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        serviceCharacteristic:
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/Characteristic'
    Price:
      description: A generic entity to capture the price of a product/service.
      type: object
      required:
        - value
        - unit
      properties:
        value:
          description: The price of the entity
          type: number
          multipleOf: 0.01
          minimum: 0
          example: 25
        unit:
          description: The currency unit of the price, based on ISO-4217
          type: string
          minLength: 3
          maxLength: 3
          example: GBP
    PriceItem:
      description: A generic entity to capture the pricing details of a product/service.
      type: object
      required:
        - product
        - priceType
        - unit
      properties:
        product:
          description: >-
            The product or add-on the price relates to, as defined by the
            supplier
          type: string
          maxLength: 100
        productLocation:
          description: >-
            The location the product is served from, as defined by the supplier.
            Only provided if it impacts price.
          type: string
          maxLength: 64
        priceType:
          description: The type of price
          type: string
          enum:
            - ONE_OFF
            - RECURRING
        pricePeriod:
          description: The period the price applies
          type: string
          enum:
            - ONCE
            - DAILY
            - WEEKLY
            - MONTHLY
            - QUARTERLY
            - ANNUALLY
        price:
          $ref: '#/components/schemas/Price'
        description:
          description: A description of the price
          type: string
          minLength: 0
          maxLength: 64
    ContractLength:
      description: A generic entity to capture the duration of a contract
      type: object
      required:
        - value
        - unit
      properties:
        value:
          description: The length of the contract
          type: integer
          minimum: 0
          example: 36
        unit:
          description: The duration unit of the contract
          type: string
          enum:
            - MONTH
            - YEAR
          example: MONTH
    ContractItem:
      description: A generic entity to capture the contract details of a product/service.
      type: object
      required:
        - contractLength
        - billingFrequency
      properties:
        contractLength:
          $ref: '#/components/schemas/ContractLength'
        billingFrequency:
          description: The frequency the product/service will be invoiced by the supplier
          type: string
          enum:
            - MONTHLY
            - QUARTERLY
            - ANNUALLY
        priceAlteration:
          description: >-
            A price override/promotion code available between the tenant and
            supplier
          type: string
          minLength: 0
          maxLength: 64
    CreateQuoteItem:
      description: A generic entity to capture the quote details of a product/service.
      type: object
      required:
        - id
        - supplier
        - sites
        - contractDetails
        - service
      properties:
        id:
          description: >-
            A unique identifier of the quote item within the overall quote
            entity
          type: integer
          minimum: 1
        supplier:
          $ref: '#/components/schemas/SupplierId'
        sites:
          type: array
          minItems: 2
          items:
            $ref: '#/components/schemas/Site'
        contractDetails:
          $ref: '#/components/schemas/ContractItem'
        service:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/Service'
    CreateQuote:
      description: A generic entity to capture the quote details of a product/service.
      type: object
      required:
        - externalIdentifier
        - quoteItems
      properties:
        externalIdentifier:
          description: A unique identifier of the quote request, as provided by the tenant
          type: string
          minLength: 0
          maxLength: 64
          example: QUO-ETH-5001
        quoteItems:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/CreateQuoteItem'
    QuoteAvailable:
      description: A generic entity to capture the quote details of a product/service.
      allOf:
        - $ref: '#/components/schemas/CreateQuoteItem'
        - type: object
          required:
            - supplierQuoteId
            - estimate
            - validFor
            - quotePrices
          properties:
            supplierQuoteId:
              description: >-
                A unique identifier of the quote item within the overall quote
                entity, as provided by the supplier
              type: string
              minLength: 0
              maxLength: 64
              example: SUPP2-QUO-ETH-5001
            estimate:
              description: >-
                Set to true if the quote provided is considered an advisory
                quote or estimate and final quote provided as part of the order
                process.
              type: boolean
              example: false
            validFor:
              description: Date/time the quote remains valid
              type: string
              format: date-time
              example: '2022-01-01T09:45:39.001Z'
            quotePrices:
              $ref: '#/components/schemas/QuotePrice'
    QuoteUnavailable:
      description: Returned where a supplier does not return a quote for the sites
      type: object
      required:
        - supplier
        - unavailabilityReasons
      properties:
        supplier:
          $ref: '#/components/schemas/SupplierId'
        unavailabilityReasons:
          description: Provides the reason(s) the supplier has not returned a quote
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/NoQuoteReason'
    QuotePrice:
      description: >-
        The price of the quote as provided by the supplier for a
        product/service.
      type: array
      minItems: 0
      items:
        $ref: '#/components/schemas/PriceItem'
    QuotePossibleAvailability:
      anyOf:
        - $ref: '#/components/schemas/QuoteAvailable'
        - $ref: '#/components/schemas/QuoteUnavailable'
        - $ref: '#/components/schemas/SupplierAvailabilityFailure'
    QuoteResponse:
      description: A generic entity to capture the quote details of a product/service.
      type: object
      required:
        - id
        - status
        - created
        - externalId
        - quoteItems
      properties:
        id:
          description: >-
            Unique reference identifying this quote request - generated by Fibre
            Cafe)
          type: string
          pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
          example: 3456cf7d-4471-42e4-a5be-c24ed58a7aa6
        created:
          description: Date/time when the quote was created
          type: string
          format: date-time
          example: '2022-01-01T09:09:33.001Z'
        externalId:
          description: >-
            A unique identifier of the quote item within the overall quote
            entity, as provided by the tenant
          type: string
          minLength: 0
          maxLength: 64
          example: QUO-ETH-5001
        quoteItems:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/QuotePossibleAvailability'
    Wayleave:
      description: Particulars regarding permissions at a given site.
      allOf:
        - type: object
          required:
            - wayleaveOwner
          properties:
            wayleaveOwner:
              description: >-
                Set to true if the organisation placing the order has wayleave
                permissions, otherwise set to false.
              type: boolean
              example: true
            wayleaveCharacteristics:
              description: >-
                Information about restrictions on the site where the service
                will be installed.
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/Characteristic'
            wayleaveContact:
              $ref: '#/components/schemas/Contact'
        - oneOf:
            - title: wayleaveCharacteristics
              required:
                - wayleaveCharacteristics
            - title: wayleaveContact
              required:
                - wayleaveContact
    Site:
      description: Provides details for each of the Ethernet sites as part of the quote.
      type: object
      required:
        - name
        - postcode
        - role
        - address
      properties:
        name:
          description: The name of the site
          type: string
          example: Strategic Imperative Offices
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        postcode:
          description: Postal code
          type: string
          minLength: 1
          maxLength: 12
          example: TW184LG
        role:
          $ref: '#/components/schemas/SiteRole'
        siteCharacteristics:
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/Characteristic'
    EthernetSiteInformation:
      description: Details of the Ethernet Site for the order
      type: object
      allOf:
        - $ref: '#/components/schemas/Site'
        - type: object
          required:
            - wayleave
            - primaryContact
            - secondaryContact
          properties:
            wayleave:
              $ref: '#/components/schemas/Wayleave'
            primaryContact:
              $ref: '#/components/schemas/Contact'
            secondaryContact:
              $ref: '#/components/schemas/Contact'
            hazards:
              description: >-
                Hazard information about the site where the service will be
                installed
              type: string
              example: Hazardous materials stored on site
              minLength: 1
              maxLength: 1000
            onSiteRestrictions:
              description: >-
                Information about restrictions on the site where the service
                will be installed
              type: string
              example: Restricted access
              minLength: 1
              maxLength: 1000
            notes:
              description: >-
                Any additional notes about the  site. This may include
                additional information that is required
              type: string
              example: Lorem ipsum dolor sit amet...
              minLength: 1
              maxLength: 1000
    CreateEthernetOrder:
      oneOf:
        - $ref: '#/components/schemas/CreateProvideEthernetOrder'
    SolicitedEthernetOrder:
      oneOf:
        - $ref: '#/components/schemas/ProvideEthernetOrder'
    EthernetOrder:
      oneOf:
        - $ref: '#/components/schemas/SolicitedEthernetOrder'
    CreateProvideServiceOrder:
      description: Represents an order for new service(s) at a particular address.
      type: object
      required:
        - orderType
        - supplier
        - address
        - serviceOrderItem
        - primaryContact
      properties:
        orderType:
          $ref: '#/components/schemas/ProvideOrderType'
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this order
          type: string
          pattern: ^\w{1,20}$
          example: DUMMY_SUPPLIER
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        serviceOrderItem:
          $ref: '#/components/schemas/ServiceOrderItem'
        primaryContact:
          $ref: '#/components/schemas/Contact'
        secondaryContact:
          $ref: '#/components/schemas/Contact'
        appointmentReservationId:
          description: Unique identifier for the reserved appointment (if applicable)
          type: number
          minimum: 1
          example: 345
        requestedCompletionDate:
          description: >-
            Where not appointed, allows a date to be requested for the service
            activation.
          type: string
          format: date
          example: '2022-01-10'
        engineerTasks:
          $ref: '#/components/schemas/EngineerTasks'
        hazards:
          description: >-
            Hazard information about the site where the service will be
            installed
          type: string
          example: Hazardous materials stored on site
          minLength: 1
          maxLength: 1000
        onSiteRestrictions:
          description: >-
            Information about restrictions on the site where the service will be
            installed
          type: string
          example: Restricted access
          minLength: 1
          maxLength: 1000
        notes:
          description: >-
            Any notes about the order. This may include additional information
            that is required
          type: string
          example: Lorem ipsum dolor sit amet...
          minLength: 1
          maxLength: 1000
    ProvideServiceOrder:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique reference identifying this service order (order number -
                generated by Fibre Cafe)
              type: number
              minimum: 1
              example: 123
            status:
              $ref: '#/components/schemas/OrderStatus'
            supplierOrderNumber:
              description: >-
                Order reference generated by the supplier once acknowledged (for
                information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
            appointmentSupplierReference:
              description: >-
                Appointment reference generated by the supplier for a
                re-appointed timeslot (only returned if applicable)
              type: string
              minLength: 1
              maxLength: 50
              example: '123456543'
            appointmentTimeslot:
              allOf:
                - description: >-
                    Represents a re-appointed timeslot from the supplier (only
                    returned if applicable)
                - $ref: '#/components/schemas/Timeslot'
            created:
              description: Date/time when the order was created
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            updated:
              description: Date/time when the order was last updated
              type: string
              format: date-time
              example: '2022-01-01T09:45:39.001Z'
            updates:
              description: Order updates (KCIs) received about the order
              type: array
              minItems: 0
              items:
                $ref: '#/components/schemas/ProvideServiceOrderUpdate'
            committedDate:
              description: >-
                When the supplier first commits to fulfil the order this field
                will contain the expected completion date. Once set, this value
                will not change unless driven by the tenant/customer.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            targetDate:
              description: >-
                The current expected completion date - set once the order is
                committed. This can be different to the committedDate if the
                order has been delayed for any reason, and can change possibly
                multiple times.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
        - $ref: '#/components/schemas/CreateProvideServiceOrder'
    CreateServiceOrder:
      oneOf:
        - $ref: '#/components/schemas/CreateProvideServiceOrder'
        - $ref: '#/components/schemas/CreateCeaseServiceOrder'
        - $ref: '#/components/schemas/CreateModifyServiceOrder'
    SolicitedServiceOrder:
      oneOf:
        - $ref: '#/components/schemas/ProvideServiceOrder'
        - $ref: '#/components/schemas/CeaseServiceOrder'
        - $ref: '#/components/schemas/ModifyServiceOrder'
    ServiceOrder:
      oneOf:
        - $ref: '#/components/schemas/SolicitedServiceOrder'
        - $ref: '#/components/schemas/UnsolicitedCeaseServiceOrder'
    CreateProvideServiceOrderAmendment:
      description: >-
        Represents a request to amend an existing inflight service provide
        order. Any value(s) supplied will replace the existing value(s).
      type: object
      required:
        - orderId
      properties:
        orderId:
          description: Unique identifier for the modify service order to be amended
          type: number
          example: 123
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this order
          type: string
          pattern: ^\w{1,20}$
          example: DUMMY_SUPPLIER
        serviceCharacteristics:
          description: List of service characteristics for the service order item
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ServiceCharacteristic'
        primaryContact:
          $ref: '#/components/schemas/Contact'
        secondaryContact:
          $ref: '#/components/schemas/Contact'
        appointmentReservationId:
          description: Unique identifier for the reserved appointment (if applicable)
          type: number
          minimum: 1
          example: 345
        requestedCompletionDate:
          description: >-
            Where not appointed, allows a date to be requested for the service
            activation
          type: string
          format: date
          example: '2022-01-10'
        engineerTasks:
          $ref: '#/components/schemas/EngineerTasks'
        hazards:
          description: >-
            Hazard information about the site where the service will be
            installed
          type: string
          minLength: 1
          maxLength: 1000
        onSiteRestrictions:
          description: >-
            Information about restrictions on the site where the service(s) will
            be installed
          type: string
          minLength: 1
          maxLength: 1000
        notes:
          description: Notes about the order
          type: string
          minLength: 1
          maxLength: 1000
          example: Lorem ipsum dolor sit amet...
    ProvideServiceOrderAmendment:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique identifier for this provide service order amendment
                request (generated by the Fibre Cafe)
              type: number
              minimum: 1
              example: 234
            supplierReference:
              description: >-
                Supplier reference for this amendment request (if available -
                for information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X-1
            status:
              $ref: '#/components/schemas/RequestStatus'
        - $ref: '#/components/schemas/CreateProvideServiceOrderAmendment'
    CreateServiceOrderAmendment:
      oneOf:
        - $ref: '#/components/schemas/CreateProvideServiceOrderAmendment'
        - $ref: '#/components/schemas/CreateModifyServiceOrderAmendment'
        - $ref: '#/components/schemas/CreateCeaseServiceOrderAmendment'
    ServiceOrderAmendment:
      oneOf:
        - $ref: '#/components/schemas/ProvideServiceOrderAmendment'
        - $ref: '#/components/schemas/ModifyServiceOrderAmendment'
        - $ref: '#/components/schemas/CeaseServiceOrderAmendment'
    CreateServiceOrderCancellation:
      description: >-
        Represents a request from the tenant to cancel an inflight provide,
        modify or cease service order. This will need to be approved and
        confirmed or rejected by the supplier.
      type: object
      required:
        - orderId
        - reasonCode
      properties:
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this order
          type: string
          pattern: ^\w{1,20}$
          example: DUMMY_SUPPLIER
        orderId:
          description: Unique reference identifying the service order to be cancelled
          type: number
          minimum: 1
          example: 123
        reasonCode:
          $ref: '#/components/schemas/CancellationReasonCode'
        text:
          description: >-
            Textual reason for cancellation - provides more context as
            applicable
          type: string
          minLength: 1
          maxLength: 1000
          example: Delivery too long
    ServiceOrderCancellation:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique identifier for this service order cancellation request
                (generated by the Fibre Cafe)
              type: number
              minimum: 1
              example: 234
            supplierReference:
              description: >-
                Supplier reference for this cancellation request (if available -
                for information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X-1
            status:
              $ref: '#/components/schemas/RequestStatus'
        - $ref: '#/components/schemas/CreateServiceOrderCancellation'
    CreateProvideEthernetOrder:
      description: >-
        Represents an Ethernet order for new service(s) between the sites
        provided.
      type: object
      required:
        - supplier
        - supplierQuoteId
        - siteInformation
        - ethernetOrderItems
      properties:
        supplier:
          $ref: '#/components/schemas/SupplierId'
        supplierQuoteId:
          description: >-
            A unique identifier of the quote item within the overall quote
            entity, as provided by the supplier
          type: string
          minLength: 0
          maxLength: 64
          example: SUPP2-QUO-ETH-5001
        siteInformation:
          type: array
          minItems: 2
          items:
            $ref: '#/components/schemas/EthernetSiteInformation'
        ethernetOrderItems:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/EthernetOrderItem'
    ProvideEthernetOrder:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique reference identifying this ethernet order (order number -
                generated by Fibre Cafe)
              type: number
              minimum: 1
              example: 123
            status:
              $ref: '#/components/schemas/OrderStatus'
            supplierOrderNumber:
              description: >-
                Order reference generated by the supplier once acknowledged (for
                information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
            created:
              description: Date/time when the order was created
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            updated:
              description: Date/time when the order was last updated
              type: string
              format: date-time
              example: '2022-01-01T09:45:39.001Z'
            updates:
              description: Order updates (KCIs) received about the order
              type: array
              minItems: 0
              items:
                $ref: '#/components/schemas/ProvideEthernetOrderUpdate'
            committedDate:
              description: >-
                When the supplier first commits to fulfil the order this field
                will contain the expected completion date. Once set, this value
                will not change unless driven by the tenant/customer.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            targetDate:
              description: >-
                The current expected completion date - set once the order is
                committed. This can be different to the committedDate if the
                order has been delayed for any reason, and can change possibly
                multiple times.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
        - $ref: '#/components/schemas/CreateProvideEthernetOrder'
    EthernetOrderItem:
      description: >-
        Represents an Ethernet order for new service(s) between the sites
        provided.
      type: object
      required:
        - service
        - contractDetails
      properties:
        service:
          $ref: '#/components/schemas/Service'
        contractDetails:
          $ref: '#/components/schemas/ContractItem'
        requestedCompletionDate:
          description: >-
            Where not appointed, allows a date to be requested for the service
            activation.
          type: string
          format: date
          example: '2022-01-10'
        technicalContact:
          $ref: '#/components/schemas/Contact'
    Information:
      description: >
        Represents an informational update from the supplier - these are given a
        reason type to aid with any process/flows

        on the tenant system.
      type: object
      required:
        - type
      properties:
        type:
          $ref: '#/components/schemas/InformationType'
        code:
          $ref: '#/components/schemas/ProblemCode'
        text:
          description: Textual information about this update - e.g. reason for the delay
          type: string
          minLength: 1
          maxLength: 1000
          example: Resolving network issue
        supplierCode:
          deprecated: true
          description: >-
            Supplier's reason or problem code - deprecated: replaced by
            supplierCodes array to allow for multiple underlying supplier codes
          type: string
          minLength: 1
          maxLength: 50
          example: '313'
        supplierCodes:
          description: Supplier's reason or problem code - where available
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 50
            example: '313'
    Action:
      description: >
        Specifies that an action is required by the tenant to continue this
        request. For example, provide information or

        rebook an appointment.
      type: object
      required:
        - type
      properties:
        type:
          $ref: '#/components/schemas/ActionType'
        code:
          $ref: '#/components/schemas/ProblemCode'
        text:
          description: >-
            Textual information about this update - e.g. reason why reappoint is
            needed
          type: string
          minLength: 1
          maxLength: 1000
          example: Fault between Node and Toby.
        supplierCode:
          deprecated: true
          description: >-
            Supplier's reason or problem code - deprecated: replaced by
            supplierCodes array to allow for multiple underlying supplier codes
          type: string
          minLength: 1
          maxLength: 50
          example: '313'
        supplierCodes:
          description: Supplier's reason or problem code - where available
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 50
            example: '313'
    CreateCeaseServiceOrder:
      description: >-
        Request to cease an existing live service. Date must be provided - it
        can be today's date to do an immediate cease but cannot be in the past.
        Time may not be supported by all suppliers.
      type: object
      required:
        - orderType
        - supplier
        - serviceId
        - requestedCompletionDate
      properties:
        orderType:
          $ref: '#/components/schemas/CeaseOrderType'
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this order
          type: string
          pattern: ^\w{1,20}$
          example: DUMMY_SUPPLIER
        serviceId:
          description: Identifier of an existing live service
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345345
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        serviceCharacteristics:
          description: >
            List of service characteristics providing auxiliary information
            about the service being ceased (required by some suppliers)

            e.g.

            - LINE_PROFILE

            - SERVICE_ASSET_ID
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/ServiceCharacteristic'
        requestedCompletionDate:
          description: >-
            The requested date/time for the service to cease (time might not be
            supported by all suppliers)
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
    CeaseServiceOrder:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique reference identifying this cease service order (generated
                by the Fibre Cafe)
              type: number
              minimum: 1
              example: 123
            supplierOrderNumber:
              description: >-
                Order reference generated by the supplier once acknowledged (for
                information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
            committedDate:
              description: >-
                When the supplier first commits to fulfil the order this field
                will contain the expected completion date. Once set, this value
                will not change unless driven by the tenant/customer.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            targetDate:
              description: >-
                The current expected completion date - set once the order is
                committed. This can be different to the committedDate if the
                order has been delayed for any reason, and can change possibly
                multiple times.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            status:
              $ref: '#/components/schemas/OrderStatus'
            created:
              description: Date/time when the order was created
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            updated:
              description: Date/time when the order was last updated
              type: string
              format: date-time
              example: '2022-01-01T09:45:39.001Z'
            updates:
              description: Order updates (KCIs) received about the order
              type: array
              minItems: 0
              items:
                $ref: '#/components/schemas/CeaseServiceOrderUpdate'
        - $ref: '#/components/schemas/CreateCeaseServiceOrder'
    CreateCeaseServiceOrderAmendment:
      description: >-
        Represents a request to amend an existing inflight service cease order.
        Specify the replacement requested date for completion - it can be
        today's date to do an immediate cease but cannot be in the past. Time
        may not be supported by all suppliers.
      type: object
      required:
        - orderId
      properties:
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this order
          type: string
          pattern: ^\w{1,20}$
          example: DUMMY_SUPPLIER
        orderId:
          description: Unique identifier for the cease service order to be amended
          type: number
          minimum: 1
          example: 123
        requestedCompletionDate:
          description: The replacement requested date/time for the service to cease
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
    CeaseServiceOrderAmendment:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique identifier for this cease service order amendment request
                (generated by the Fibre Cafe)
              type: number
              minimum: 1
              example: 234
            supplierReference:
              description: >-
                Supplier reference for this amendment request (if available -
                for information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X-1
            status:
              $ref: '#/components/schemas/RequestStatus'
        - $ref: '#/components/schemas/CreateCeaseServiceOrderAmendment'
    CreateModifyServiceOrder:
      description: >-
        Request to modify an existing live service - specify the replacement
        characteristic(s). The requested date for completion can be specified
        but may not be supported by all suppliers.
      type: object
      required:
        - orderType
        - supplier
        - serviceId
        - serviceCharacteristics
      properties:
        orderType:
          $ref: '#/components/schemas/ModifyOrderType'
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this order
          type: string
          pattern: ^\w{1,20}$
          example: DUMMY_SUPPLIER
        serviceId:
          description: Identifier of an existing live service
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345345
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        serviceCharacteristics:
          description: Service characteristics to be updated e.g. LINE_PROFILE
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ModifyServiceCharacteristic'
        requestedCompletionDate:
          description: The requested date/time for the modify service (if supported)
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
    CreateServiceProblemCancellation:
      description: >-
        Represents a request from the tenant to cancel an inflight service
        problem. This will need to be approved and confirmed or rejected by the
        supplier.
      type: object
      required:
        - serviceProblemId
        - reasonCode
      properties:
        serviceProblemId:
          description: Unique reference identifying the service problem to be cancelled
          type: number
          minimum: 1
          example: 123
        reasonCode:
          $ref: '#/components/schemas/ServiceProblemCancellationReasonCode'
        text:
          description: >-
            Textual reason for cancellation - provides more context as
            applicable
          type: string
          minLength: 1
          maxLength: 1000
          example: Issue appears to have rectified itself.
    ServiceProblemCancellation:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique reference identifying this service problem cancellation
                request (generated by Fibre Cafe)
              type: number
              minimum: 1
              example: 123
            status:
              $ref: '#/components/schemas/RequestStatus'
        - $ref: '#/components/schemas/CreateServiceProblemCancellation'
    ServiceProblemCancellationReasonCode:
      description: |
        Codes representing reason for cancellation of the service problem:

        - ISSUE_RESOLVED
        - CUSTOMER_NETWORK_ISSUE
        - NO_LONGER_REQUIRED
        - OTHER
      type: string
      pattern: ^[A-Z_]{5,50}
      example: CUSTOMER_NETWORK_ISSUE
    CreateServiceProblemAmendment:
      description: >-
        Represents a request from the tenant to amend an inflight service
        problem. This will need to be approved and confirmed or rejected by the
        supplier.
      type: object
      required:
        - serviceProblemId
      properties:
        serviceProblemId:
          description: Unique reference identifying the service problem to be amended
          type: number
          minimum: 1
          example: 123
        problemText:
          description: The description of problem being raised as defined by the end user.
          type: string
          minLength: 10
          maxLength: 80
          example: The service keeps dropping between 6pm and 9pm every evening.
        characteristics:
          description: Update any characteristics of the problem
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ServiceProblemCharacteristic'
        hazards:
          description: Hazard information about the site where the service will be restored
          type: string
          example: Hazardous materials stored on site
          minLength: 1
          maxLength: 1000
        onSiteRestrictions:
          description: >-
            Information about restrictions on the site where the service will be
            restored
          type: string
          example: Restricted access
          minLength: 1
          maxLength: 1000
        notes:
          description: >-
            Notes about the problem which are required by the supplier. This
            includes additional information that may be required - refer to
            developer portal
          type: string
          example: Lorem ipsum dolor sit amet...
          minLength: 1
          maxLength: 1000
        primaryContact:
          $ref: '#/components/schemas/Contact'
        secondaryContact:
          $ref: '#/components/schemas/Contact'
        appointmentReservationId:
          description: Unique identifier for the new reserved appointment
          type: number
          minimum: 1
          example: 345
    ServiceProblemAmendment:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique reference identifying this service problem amendment
                (generated by Fibre Cafe)
              type: number
              minimum: 1
              readOnly: true
              example: 123
            status:
              $ref: '#/components/schemas/RequestStatus'
        - $ref: '#/components/schemas/CreateServiceProblemAmendment'
    ServiceProblemResolution:
      description: Details of resolution to a service problem request.
      type: object
      required:
        - id
        - serviceProblemId
        - status
        - resolvedDate
        - resolutionDetails
      properties:
        id:
          description: >-
            Unique reference identifying this service problem resolution
            (generated by Fibre Cafe)
          type: number
          minimum: 1
          readOnly: true
          example: 123
        serviceProblemId:
          description: >-
            Unique reference identifying the service problem (generated by Fibre
            Cafe)
          type: number
          minimum: 1
          readOnly: true
          example: 123
        status:
          $ref: '#/components/schemas/ServiceProblemResolutionStatus'
        resolvedDate:
          description: Date/time the problem was resolved by the supplier
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        closedDate:
          description: Date/time the problem was closed by the tenant or supplier
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        resolutionDetails:
          $ref: '#/components/schemas/ResolutionDetails'
        slaViolation:
          description: Indicates if the resolution has violated the agreed SLAs
          type: array
          minItems: 1
          items:
            type: string
            pattern: ^[\w_]{5,50}
            example: EXCEEDED_SLA_TIME_TO_REPAIR
        tenantNotes:
          description: >-
            Text from the tenant giving notes or reason for rejection - as
            applicable
          type: string
          minLength: 1
          maxLength: 1000
          example: The problem was not resolved
    ResolutionCode:
      description: >-
        A code published on the developer portal to uniquely identify the
        problem resolution.
      type: string
      pattern: ^[\w_]{5,25}
      enum:
        - ACCESS_ISSUE
        - BACKHAUL_CORE_NETWORK
        - CUSTOMER_FAULT
        - CUSTOMER_FAULT_B_END
        - CUSTOMER_FAULT_EQUIPMENT
        - CUSTOMER_FAULT_MODEM
        - CUSTOMER_FAULT_WIRING
        - EXTERNAL_REIN
        - INTERNAL_REIN
        - LINE_TEST_NORMAL
        - NETWORK_CABLING
        - NETWORK_ISSUE
        - NETWORK_UPLIFT
        - NO_FAULT_FOUND
        - NOT_REPRODUCIBLE
        - OTHER
        - PLANNED_ENGINEERING_WORKS
        - PROBLEM_CANCELLED
        - SERVICE_RESTRICTION
        - SUPPLIER_CPE_ISSUE
      example: NETWORK_ISSUE
    ResolutionDetails:
      description: Details of resolution to a service problem request.
      type: object
      required:
        - resolutionCode
      properties:
        resolutionCode:
          $ref: '#/components/schemas/ResolutionCode'
        resolutionCategory:
          description: The category the resolution code
          type: string
          example: FAULTY_EQUIPMENT
        resolutionText:
          description: >-
            Detailed text provided by the supplier regarding the problem
            resolution
          type: string
          maxLength: 256
        supplierCodes:
          description: Code(s) provided by the supplier regarding the resolution
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 50
            example: R9
        faultCode:
          description: Code(s) provided by the supplier regarding the problem fault
          type: array
          minItems: 1
          items:
            type: string
            pattern: ^[\w_]{5,50}
            example: DAMAGED_ONT
    PatchServiceProblemResolution:
      description: >-
        Represents a request from the tenant to accept or reject an inflight
        service problem resolution.
      type: object
      required:
        - status
      properties:
        status:
          $ref: '#/components/schemas/ServiceProblemResolutionStatus'
        tenantNotes:
          description: >-
            Text from the tenant giving notes or reason for rejection - as
            applicable
          type: string
          minLength: 1
          maxLength: 1000
          example: Issue still persists
    ModifyServiceOrder:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique identifier for this modify service order (generated by
                the Fibre Cafe)
              type: number
              minimum: 1
              example: 123
            supplierOrderNumber:
              description: >-
                Order reference generated by the supplier once acknowledged (for
                information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
            committedDate:
              description: >-
                When the supplier first commits to fulfil the order this field
                will contain the expected completion date. Once set, this value
                will not change unless driven by the tenant/customer.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            targetDate:
              description: >-
                The current expected completion date - set once the order is
                committed. This can be different to the committedDate if the
                order has been delayed for any reason, and can change possibly
                multiple times.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            status:
              $ref: '#/components/schemas/OrderStatus'
            created:
              description: Date/time when the order was created
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            updated:
              description: Date/time when the order was last updated
              type: string
              format: date-time
              example: '2022-01-01T09:45:39.001Z'
            updates:
              description: Order updates (KCIs) received about the order
              type: array
              minItems: 0
              items:
                $ref: '#/components/schemas/ModifyServiceOrderUpdate'
        - $ref: '#/components/schemas/CreateModifyServiceOrder'
    CreateModifyServiceOrderAmendment:
      description: >-
        Represents a request to amend an existing inflight service modify order.
        Any service characteristic(s) supplied will replace the existing
        value(s). The requested date for completion can be specified but may not
        be supported by all suppliers.
      type: object
      required:
        - orderId
      properties:
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this order
          type: string
          pattern: ^\w{1,20}$
          example: DUMMY_SUPPLIER
        orderId:
          description: Unique identifier for the modify service order to be amended
          type: number
          example: 123
        serviceCharacteristics:
          description: Service characteristics to be updated e.g. LINE_PROFILE
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ModifyServiceCharacteristic'
        requestedCompletionDate:
          description: The requested date/time for the modify (if supported)
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
    ModifyServiceOrderAmendment:
      allOf:
        - type: object
          required:
            - id
            - status
          properties:
            id:
              description: >-
                Unique identifier for this modify service order amendment
                request (generated by the Fibre Cafe)
              type: number
              minimum: 1
              example: 234
            supplierReference:
              description: >-
                Supplier reference for this amendment request (if available -
                for information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X-1
            status:
              $ref: '#/components/schemas/RequestStatus'
        - $ref: '#/components/schemas/CreateModifyServiceOrderAmendment'
    BaseEthernetOrderUpdate:
      description: >
        An update (KCI) to an inflight ethernet order. Reasons for the order
        update can be as follows;

        - Order has been updated

        - Order has been delayed

        - Order has been committed

        - Appointment was missed

        - Information required

        - Unable to send the order to supplier
      type: object
      required:
        - id
        - supplier
        - deliveryStatus
        - updateType
      properties:
        id:
          description: Unique identifier for this update (generated by the Fibre Cafe)
          type: string
          pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
          example: 3456cf7d-4471-42e4-a5be-c24ed58a7aa6
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this order
          type: string
          pattern: ^\w{1,20}$
          example: SUPPLIER1
        sequenceNumber:
          description: Sequence number of this KCI to ensure ordering
          type: number
          minimum: 1
          example: 1
        issuedOn:
          description: Date/time when supplier issued this update
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        receivedOn:
          description: Date/time when Fibre Cafe received this update
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        deliveredOn:
          description: Date/time when Fibre Cafe delivered this update to the tenant API
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        deliveryStatus:
          $ref: '#/components/schemas/DeliveryStatus'
        updateType:
          $ref: '#/components/schemas/UpdateType'
        supplierNotes:
          description: >-
            The supplier has added these note(s) about the order relating to
            this KCI
          type: array
          items:
            $ref: '#/components/schemas/SupplierNote'
        information:
          $ref: '#/components/schemas/Information'
        action:
          $ref: '#/components/schemas/Action'
        error:
          $ref: '#/components/schemas/SupplierFailure'
    ProvideEthernetOrderUpdate:
      allOf:
        - $ref: '#/components/schemas/BaseEthernetOrderUpdate'
    BaseServiceOrderUpdate:
      description: >
        An update (KCI) to an inflight service order. Reasons for the order
        update can be as follows;

        - Order has been updated

        - Order has been delayed

        - Order has been committed

        - Appointment was missed

        - Information required

        - Unable to send the order to supplier
      type: object
      required:
        - id
        - supplier
        - deliveryStatus
        - updateType
      properties:
        id:
          description: Unique identifier for this update (generated by the Fibre Cafe)
          type: string
          pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
          example: 3456cf7d-4471-42e4-a5be-c24ed58a7aa6
        supplier:
          description: >-
            System identifier for a supplier on the Fibre Cafe that is
            associated with this order
          type: string
          pattern: ^\w{1,20}$
          example: SUPPLIER1
        sequenceNumber:
          description: Sequence number of this KCI to ensure ordering
          type: number
          minimum: 1
          example: 1
        issuedOn:
          description: Date/time when supplier issued this update
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        receivedOn:
          description: Date/time when Fibre Cafe received this update
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        deliveredOn:
          description: Date/time when Fibre Cafe delivered this update to the tenant API
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        deliveryStatus:
          $ref: '#/components/schemas/DeliveryStatus'
        updateType:
          $ref: '#/components/schemas/UpdateType'
        supplierNotes:
          description: >-
            The supplier has added these note(s) about the order relating to
            this KCI
          type: array
          items:
            $ref: '#/components/schemas/SupplierNote'
        information:
          $ref: '#/components/schemas/Information'
        action:
          $ref: '#/components/schemas/Action'
        error:
          $ref: '#/components/schemas/SupplierFailure'
        serviceOrderCancellation:
          $ref: '#/components/schemas/ServiceOrderCancellation'
    ProvideServiceOrderUpdate:
      allOf:
        - type: object
          properties:
            serviceOrderAmendment:
              $ref: '#/components/schemas/ProvideServiceOrderAmendment'
        - $ref: '#/components/schemas/BaseServiceOrderUpdate'
    CeaseServiceOrderUpdate:
      allOf:
        - type: object
          properties:
            serviceOrderAmendment:
              $ref: '#/components/schemas/CeaseServiceOrderAmendment'
        - $ref: '#/components/schemas/BaseServiceOrderUpdate'
    ModifyServiceOrderUpdate:
      allOf:
        - type: object
          properties:
            serviceOrderAmendment:
              $ref: '#/components/schemas/ModifyServiceOrderAmendment'
        - $ref: '#/components/schemas/BaseServiceOrderUpdate'
    AddressIdentifier:
      description: Address identifier for location including type of identifier.
      allOf:
        - $ref: '#/components/schemas/SecondaryAddressIdentifier'
        - type: object
          properties:
            additionalIdentifiers:
              description: >-
                Additional address identifiers where available/required for
                subsequent operations
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/SecondaryAddressIdentifier'
    SecondaryAddressIdentifier:
      description: Additional address identifier for location including type of identifier.
      type: object
      required:
        - id
        - type
      properties:
        id:
          description: Address identifier of given type
          type: string
          minLength: 1
          maxLength: 20
          example: A00000031882
        type:
          description: Type of address identifier e.g. UPRN, NAD, DistrictCode, ROBT
          type: string
          pattern: ^[A-Za-z]{1,15}$
          example: NAD
    Address:
      description: Address for location associated with the service order.
      type: object
      required:
        - identifier
      properties:
        identifier:
          $ref: '#/components/schemas/AddressIdentifier'
        name:
          description: Identifying name of the sub unit
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: TWENTY
        streetNumber:
          description: Discriminator used to identify the property on a street
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: '20'
        streetName:
          description: Name used to identify the street
          type: string
          minLength: 1
          maxLength: 100
          readOnly: true
          example: Kingston Road
        locality:
          description: Name used to identify the area
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
        city:
          description: Name used to identify the town or city
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: Staines-Upon-Thames
        postcode:
          description: Postal code
          type: string
          minLength: 1
          maxLength: 12
          readOnly: true
          example: TW184LG
        country:
          description: Name used to identify the country
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: UK
        subAddress:
          $ref: '#/components/schemas/SubAddress'
        qualifier:
          description: Optional qualifier for this address
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: Gold
        source:
          description: System identifier for the source of this address information
          type: string
          pattern: ^\w{1,20}$
          example: OPENREACH
        additionalAttributes:
          description: |
            Additional attributes of an address (where available)
            e.g.

            - UNINHABITED
            - HOTSITE
            - TEMPORARY
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/AddressAttribute'
    AddressAttribute:
      description: Additional attribute of an address.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the attribute
          type: string
          minLength: 1
          maxLength: 50
          example: UNINHABITED
        value:
          description: Value for this attribute
          type: string
          minLength: 1
          maxLength: 50
          example: 'true'
    SubAddress:
      description: More specific definition of a property within an urban area.
      type: object
      readOnly: true
      properties:
        name:
          description: Identifying name of the sub unit
          type: string
          minLength: 1
          maxLength: 100
          example: Strategic Imperatives
        unitNumber:
          description: Discriminator used to identify the sub unit
          type: string
          minLength: 1
          maxLength: 100
          example: Floor 3
    Contact:
      description: Represents a contact available at the given address.
      type: object
      required:
        - name
        - phoneNumber
      properties:
        name:
          description: Contact name
          type: string
          minLength: 1
          maxLength: 100
          example: John Smith
        email:
          description: Contact email address (if available)
          type: string
          pattern: ^\S{1,64}@\S{2,254}$
          example: john@smith.com
        phoneNumber:
          description: Contact phone number
          type: string
          pattern: ^\+?[\d\s\-#]{8,50}$
          example: 01234 567890
    SupplierNote:
      description: >-
        Represents a note from the supplier - depending on the supplier, notes
        may be categorised by type.
      type: object
      required:
        - note
        - created
      properties:
        note:
          description: Note added by the supplier
          type: string
          minLength: 1
          maxLength: 4096
          example: Lorem ipsum dolor sit amet...
        type:
          description: Type of note if available e.g. Site Visit Notes, Customer Update
          type: string
          minLength: 1
          maxLength: 50
          example: Engineer Note
        created:
          description: Date/time when the note was created
          type: string
          format: date-time
          example: '2022-01-01T09:09:33.001Z'
    SupplierId:
      description: System identifier for a supplier on the Fibre Cafe
      type: string
      pattern: ^\w{1,20}$
      example: SUPPLIER2
    SupplierList:
      description: Supplier(s) to route request to.
      type: array
      minItems: 1
      items:
        type: string
        pattern: ^\w{1,20}$
      example:
        - SUPPLIER1
        - SUPPLIER2
    ServiceTypeList:
      description: >-
        List of service types to filter availability checks by. If not supplied,
        this will default to `[BROADBAND]`.
      type: array
      minItems: 1
      default:
        - BROADBAND
      items:
        $ref: '#/components/schemas/ServiceType'
      example:
        - BROADBAND
        - ETHERNET
    SupplierFailure:
      description: >
        Represents a failure that usually means this order has failed.

        The underlying cause will be returned but will likely require help from
        the Fibre Cafe support team or

        by contacting the supplier directly.

        Every error is uniquely identified via a UUID which should be reported
        to the support team as required.


        Possible error types:

        - NOT_AUTHORISED : An authorisation issue accessing the supplier API
        using the tenant's credentials.

        - SUPPLIER_FAULT : The supplier API has encountered an unexpected error
        or is not responding to the Fibre Cafe.

        - SUPPLIER_TIMED_OUT : The Fibre Cafe did not receive a timely response
        from the supplier.

        - GATEWAY_FAULT : The Fibre Cafe gateway has encountered an unexpected
        error.
      allOf:
        - $ref: '#/components/schemas/Error'
    Error:
      description: >
        Represents an error with code to denote origin/cause.


        - INVALID_REQUEST : Request was well-formed/syntactically correct but
        did not pass validation requirements

        - MALFORMED_REQUEST : Request was not valid JSON or missing mandatory
        parameters

        - NOT_AUTHORISED : User was not authenticated and/or authorised to use
        endpoint

        - NOT_FOUND : Requested entity was not found

        - SUPPLIER_FAULT : An unexpected problem originating from the supplier
        API

        - SUPPLIER_TIMED_OUT : The Fibre Cafe did not receive a timely response
        from the supplier

        - GATEWAY_FAULT : An unexpected problem originating on the Fibre Cafe
        gateway
      type: object
      required:
        - uuid
        - code
        - messages
      properties:
        uuid:
          description: Unique identifier of this error - for tracing purposes
          type: string
          example: 87432dfb-2e47-4532-a1b7-4b113d48867d
        code:
          $ref: '#/components/schemas/ErrorCode'
        messages:
          description: Message describing the error
          type: array
          minItems: 1
          items:
            type: string
            example: e.g. Invalid value for field x - accepted values are y
    OrderStatus:
      description: >-
        Order lifecycle adapted from TMF641 - order update events (KCIs) will be
        sent to the tenant as the order transitions from one state to the other.
      type: string
      readOnly: true
      enum:
        - RECEIVED_BY_GATEWAY
        - SENT_TO_SUPPLIER
        - FAILED_TO_SEND
        - REJECTED
        - ACKNOWLEDGED
        - IN_PROGRESS
        - PENDING
        - HELD
        - PENDING_AMENDMENT
        - PENDING_CANCELLATION
        - CANCELLED
        - FAILED
        - PARTIAL
        - COMPLETED
      example: ACKNOWLEDGED
    RequestStatus:
      description: State model for amendment and cancellation requests.
      type: string
      readOnly: true
      enum:
        - RECEIVED_BY_GATEWAY
        - PENDING
        - FAILED_TO_SEND
        - REJECTED
        - COMPLETED
      example: REJECTED
    ServiceTestStatus:
      description: >-
        Service test lifecycle adapted from TMF653 - update events (KCIs) will
        be sent to the tenant as the test transitions from one state to the
        other.
      type: string
      enum:
        - RECEIVED_BY_GATEWAY
        - SENT_TO_SUPPLIER
        - FAILED_TO_SEND
        - REJECTED
        - IN_PROGRESS
        - FAILED
        - COMPLETED
      example: IN_PROGRESS
    ProblemStatus:
      description: >-
        Service problem lifecycle adapted from TMF656 - update events (KCIs)
        will be sent to the tenant as the service problem transitions from one
        state to the other.
      type: string
      readOnly: true
      enum:
        - RECEIVED_BY_GATEWAY
        - SENT_TO_SUPPLIER
        - FAILED_TO_SEND
        - REJECTED
        - ACKNOWLEDGED
        - IN_PROGRESS
        - PENDING
        - HELD
        - NETWORK_INCIDENT
        - PENDING_AMENDMENT
        - PENDING_CANCELLATION
        - CANCELLED
        - RESOLVED
        - COMPLETED
      example: ACKNOWLEDGED
    DeliveryStatus:
      description: State model for KCIs.
      type: string
      readOnly: true
      enum:
        - PENDING
        - DELIVERED
    ServiceProblemResolutionStatus:
      description: State model for service problem resolution.
      type: string
      enum:
        - PENDING
        - REJECTED
        - ACCEPTED
      example: REJECTED
    ProvideOrderType:
      description: The type of order - new, (re)start, takeover, transfer or swap
      type: string
      enum:
        - NEW
        - START
        - TAKEOVER
        - TRANSFER
        - SWAP
    CeaseOrderType:
      description: The type of order - cease
      type: string
      enum:
        - CEASE
    ModifyOrderType:
      description: The type of order - modify
      type: string
      enum:
        - MODIFY
    UnsolicitedCeaseOrderType:
      description: The type of order - unsolicited cease
      type: string
      enum:
        - UNSOLICITED_CEASE
    OrderType:
      description: The type of order
      anyOf:
        - $ref: '#/components/schemas/ProvideOrderType'
        - $ref: '#/components/schemas/CeaseOrderType'
        - $ref: '#/components/schemas/ModifyOrderType'
        - $ref: '#/components/schemas/UnsolicitedCeaseOrderType'
    AvailabilityConstraintCode:
      description: |
        Service has availability with these constraints:

        - SURVEY_REQUIRED
        - BUSINESS_PARK
        - FEASIBILITY_CHECK
        - WAYLEAVE_OWNER
        - WAYLEAVE_SHARED
        - WAYLEAVE_PRIVATE
        - WAYLEAVE_UNADOPTED
        - WAYLEAVE_REFUSED
        - UNECONOMIC_LENGTH
        - UNECONOMIC_SURFACE
        - OTHER
      type: string
      pattern: ^[A-Z_]{1,25}$
      example: WAYLEAVE_SHARED
    UnavailabilityReasonCode:
      description: |
        Reason why service is unavailable (hard LOC):

        - NOT_PLANNED
        - IN_PLANNING
        - UNDER_CONSTRUCTION
        - OUT_OF_OPTIC_RANGE
        - WAYLEAVE_ISSUE
        - UNECONOMIC_LENGTH
        - UNECONOMIC_SURFACE
        - UNECONOMIC_OTHER
        - OTHER
      type: string
      pattern: ^[A-Z_]{1,25}$
      example: OUT_OF_OPTIC_RANGE
    NoQuoteReason:
      description: Reason why a quote was not returned by the supplier
      type: string
      pattern: ^[A-Z_]{1,25}$
      example: OUT_OF_RANGE
    InstallationType:
      description: >
        Installation is necessary and hence an appointment is required - ensure
        this is reserved and included in the order.

        Type of installation involved:


        - STANDARD

        - EXTENDED_STANDARD

        - NON_STANDARD
      type: string
      example: STANDARD
    AppointmentPurpose:
      description: 'Purpose of the appointment : PROVIDE, MODIFY, REPAIR'
      type: string
      example: PROVIDE
    TimeslotClassification:
      description: |
        Timeslot classification:

        - WEEKDAY
        - WEEKDAY_AM
        - WEEKDAY_PM
        - WEEKDAY_EARLY
        - WEEKDAY_EVENING
        - SATURDAY
        - SATURDAY_AM
        - SATURDAY_PM
        - SATURDAY_EARLY
        - SATURDAY_EVENING
        - SUNDAY
        - SUNDAY_AM
        - SUNDAY_PM
        - SUNDAY_EARLY
        - SUNDAY_EVENING
      type: string
      pattern: ^[A-Z_]{1,25}$
      readOnly: true
      example: SATURDAY_AM
    CancellationReasonCode:
      description: |
        Codes representing reason for cancellation:

        - CUSTOMER_CHANGED_MIND
        - INSTALL_FAILED
        - NETWORK_ISSUE
        - NO_LONGER_REQUIRED
        - OTHER

        Reason codes for cancellation other (unsolicited cease):

        - NO_AUTHORISATION
        - CUSTOMER_NOT_AWARE
        - DELIBERATE_MISLEAD
        - PURCHASED_DIFFERENT_PRODUCT
        - END_USER_NOT_MOVING
      type: string
      pattern: ^[A-Z_]{1,25}$
      example: CUSTOMER_CHANGED_MIND
    ProblemCode:
      description: >
        Code representing problem - these may be sent as informational or action
        required updates

        depending on whether the tenant is required to/can resolve the problem.


        - ACCESS_ISSUE

        - ACTIVATION_FAILED

        - ADDITIONAL_WORK

        - APPOINTMENT_NOT_REQUIRED

        - CAPACITY_ISSUE

        - COST_ISSUE

        - CUSTOMER_CHANGED_MIND

        - FAULT_AT_NODE

        - FAULT_AT_ONT

        - FAULT_AT_POP

        - INFORMATION_REQUIRED

        - INSTALL_FAILED

        - INVALID_REQUEST

        - LINKED_ORDER_ISSUE

        - NETWORK_ISSUE

        - NETWORK_UNAVAILABLE

        - NOT_IMPLEMENTED

        - NO_LONGER_REQUIRED

        - OTHER

        - PARTIAL_INSTALL

        - PLANNING_ISSUE

        - PROPERTY_UNOCCUPIED

        - REJECTION

        - ROUTER_NOT_AVAILABLE

        - SITE_UNSAFE

        - SURVEY_REQUIRED

        - TELECARE_ISSUE

        - TIMED_OUT

        - UNABLE_TO_ATTEND

        - UNKNOWN_FAULT

        - WAYLEAVE_ISSUE
      type: string
      pattern: ^[A-Z_]{1,25}$
      example: NETWORK_ISSUE
    EngineerTasks:
      description: |
        Engineer tasks to be performed at installation appointment.

        - INSTALL_ROUTER
        - TEST_SINGLE_DEVICE
        - ADDITIONAL_CABLING
        - TEST_MULTIPLE_DEVICES
        - INSTALL_BBU
        - VOICE_REINJECTION
        - PROVE_IP_VOICE
        - ENSURE_TELECARE
      type: array
      items:
        type: string
        pattern: ^[A-Z_]{1,25}$
        example: TEST_SINGLE_DEVICE
    CopperLineType:
      type: string
      enum:
        - COPPER
    FibreLineType:
      type: string
      enum:
        - FIBRE
    LineType:
      type: string
      oneOf:
        - $ref: '#/components/schemas/FibreLineType'
        - $ref: '#/components/schemas/CopperLineType'
    ProductType:
      description: |
        Product type of a copper line (where specified).
        - ISDN2
        - ISDN30
        - MPF
        - PSTN
        - SOGEA
      type: string
      minLength: 1
      maxLength: 25
      example: SOGEA
    LineStatus:
      description: >-
        Specify if this line/port is active (takeover), stopped (restart) or not
        available (e.g. fault)
      type: string
      enum:
        - ACTIVE
        - STOPPED
        - UNAVAILABLE
    UpdateType:
      description: Type of order update.
      type: string
      enum:
        - ACTION_REQUIRED
        - INFORMATIONAL
        - ERROR
    SiteRole:
      description: The role of the site in an Ethernet connection
      type: string
      enum:
        - A-END
        - B-END
        - MULTI-POINT
    InformationType:
      description: >
        Type of informational order update:


        - CREATED : Order has been created by supplier (unsolicited cease)

        - ACKNOWLEDGED : Supplier has acknowledged receipt of the order (KCI1)

        - COMMITTED : Supplier has committed to fulfillment of the order (KCI2)

        - DELAY : There is a problem causing a delay with the order

        - RESUMED : The problem causing the delay has been resolved without
        impact on target date

        - REAPPOINTED : Supplier has re-appointed the order (if not suitable
        then treat as a REAPPOINT)

        - RESCHEDULED : Supplier makes an unsolicited change to the target date

        - ADDITIONAL : Supplier has updated the order and flagged that
        additional information is available

        - WARNING : Supplier has updated the order and flagged a warning

        - RESUBMIT : Tenant needs to resubmit the request

        - UPDATE : Supplier has updated the order

        - AMENDED : Supplier has accepted and applied the requested order
        amendment

        - CANCELLED : Supplier has accepted and applied the requested order
        cancellation

        - TERMINATED : Supplier has rejected or cancelled the order and cannot
        fulfil it

        - COMPLETED : Supplier has completed the order (KCI3)
      type: string
      enum:
        - CREATED
        - ACKNOWLEDGED
        - COMMITTED
        - DELAY
        - RESUMED
        - REAPPOINTED
        - RESCHEDULED
        - ADDITIONAL
        - RESUBMIT
        - WARNING
        - UPDATE
        - AMENDED
        - CANCELLED
        - TERMINATED
        - COMPLETED
    ActionType:
      description: >
        Type of action required from the tenant for this update:


        - INFORMATION_REQUIRED : Supplier requires additional information from
        the tenant

        - REAPPOINT : Supplier requires the tenant to re-appoint

        - RESUBMIT : Supplier requires the tenant to resubmit the request as it
        failed

        - CONFIRM : Supplier has resolved the request and is awaiting acceptance
        or rejection

        - CONTACT_CUSTOMER : Supplier has requested the tenant to contact the
        customer to continue

        - CONTACT_REAPPOINT : Supplier requires the tenant to re-appoint but
        suggests contacting the customer first
      type: string
      enum:
        - INFORMATION_REQUIRED
        - REAPPOINT
        - RESUBMIT
        - CONFIRM
        - CONTACT_CUSTOMER
        - CONTACT_REAPPOINT
    ModifyAction:
      description: >
        Action required for modifying a service characteristic - for use where
        supported/required by the supplier.


        - ADD : Add or replace (where supported) a service characteristic with
        this new value

        - DELETE : Remove this service characteristic

        - NONE : No change to this service characteristic - provided for
        information only
      type: string
      enum:
        - ADD
        - DELETE
        - NONE
      default: ADD
    UnsolicitedCeaseReason:
      description: >
        The reason provided for the unsolicited cease:


        - CHANGE_OF_CP : Customer is switching to another CP

        - WORKING_LINE_TAKEOVER : Customer is moving address and is taking over
        the line

        - CP_REQUEST : Customer is changing service/technology but CP is not
        changing
      type: string
      pattern: ^[A-Z_]{5,21}$
      example: CHANGE_OF_CP
    ServiceType:
      description: >-
        The specified service type(s) for this request (e.g. BROADBAND,
        ETHERNET)
      type: string
      enum:
        - BROADBAND
        - ETHERNET
    ErrorCode:
      description: Fibre Cafe error codes
      type: string
      enum:
        - GATEWAY_FAULT
        - INVALID_REQUEST
        - MALFORMED_REQUEST
        - NOT_AUTHORISED
        - NOT_FOUND
        - NOT_IMPLEMENTED
        - SUPPLIER_FAULT
        - SUPPLIER_TIMED_OUT
        - TENANT_FAULT
  securitySchemes:
    oauth2:
      description: >
        All requests to the Fibre Cafe must be authenticated and include a valid
        access token. The

        Fibre Cafe uses the industry standard [OAuth 2.0
        protocol](https://oauth.net/2/).
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: /auth/tenant/access-token
          scopes: {}
