{
  "openapi": "3.0.3",
  "info": {
    "title": "Fibre Cafe : Tenant API",
    "version": "1.17",
    "description": "# Introduction\n\nThe Fibre Cafe is a scalable, unified platform to support L2C provisioning, in-life modification/cease and\nT2R trouble resolution between communication providers (CP) and network operators or aggregators.\n\nCPs are known as 'tenants' on the Fibre Cafe and communicate with this API - the Fibre Cafe's Tenant API. The\nnetwork operators and aggregators providing the underlying services are known as 'suppliers'.\n\nThe Fibre Cafe will route requests from this API to appropriate supplier(s). Tenants will be configured to use \nsuppliers based on requirements and commercial agreements.\n\nInitial availability and appointing requests are synchronous. Ordering requests are asynchronous with confirmation\nand updates via KCIs (Keep Customer Informed).\n\n**Note:** Order updates (KCIs) will be sent to the Tenant Updates API which the tenant must implement.\n__\n\n© 2022-2026 Strategic Imperatives\n"
  },
  "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.\n\nThis is not implemented by all suppliers - it is primarily provided to assist with NAD/District Code lookup for\nsuppliers operating on the Openreach network.\n\nThis follows the concepts in TMF673 - Address Management API.\n"
    },
    {
      "name": "Service Availability",
      "description": "Retrieve what services (if any) the supplier has available for a given address.\n\nThis follows the concepts in TMF645 - Service Qualification API and TMF673 - Address Management API.\n"
    },
    {
      "name": "Quote Management",
      "description": "Create and manage a quote to provide service at requested sites.\nThis follows the concepts in TMF648 - Quote Management API.\n"
    },
    {
      "name": "Appointment Management",
      "description": "Retrieve and reserve appointments for installing or maintaining a service at a given address.\n\nThis follows the concepts in TMF646 - Appointment API.\n"
    },
    {
      "name": "Order Management",
      "description": "Create and manage an order to provide, cease or modify a service at a given address.\n\nThis follows the concepts in TMF641 - Service Ordering Management API.\n"
    }
  ],
  "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\nidentifiers (e.g. NAD and District Code) to use in subsequent calls.\n\nPostal code or UPRN must be supplied. When using postal code, additional\ncontext such as house name, street number and/or street should be supplied\nto reduce returned results\n(results may be truncated by the underlying address source).\n\nAvailability of this endpoint requires an address source to be configured - it is primarily\nprovided to assist with NAD/District Code lookup for suppliers operating on the Openreach network.\n",
        "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\naddress.\n\nAn address query parameter must be supplied specifying address ID and type\nas described above.\n\nIf required, a particular supplier or list of suppliers can be specified\nin the request; otherwise the Fibre Cafe will check with all suppliers as\nconfigured for the tenant.\n",
        "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.\nThe details of the individual supplier or list of suppliers must be specified in the request.\n",
        "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\nto install or maintain service(s) at a given address.\n\nAn address query parameter must be supplied specifying address ID and type along\nwith the required service specification as returned by the /service-availability\nendpoint.\n\nThe next available appointments after the appointmentStartDate will be returned -\na suitable date should be chosen based on installationLeadTime if this was\nprovided during availability check.\n\nAppointment slots are classified based on day as weekday or saturday/sunday and\nby time to day, AM/PM or early morning/evening. Based on the tenant-supplier\nagreement, some of these classifications will be considered premium.\n\nThis request will be routed to a particular supplier which must be specified.\n",
        "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\nor maintain service(s) at a given address.\n\nDetails of a previously returned available appointment must be provided to be\nreserved according to the supplier reservation policy. Where the reservation\nhas a TTL (time to live) before being released, the expiry time will be stated.\n\nThe returned reservation ID must be sent as part of the order at which point\nit should be considered confirmed.\n",
        "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\nor modify a service.\n\nThe Fibre Cafe will validate the request and generate an order number which is\nreturned. If the order is rejected immediately then a 400 code will be returned\nwith reason(s) for the rejection in the response.\n\nThe order will then be sent to the supplier for processing and further updates\nwill be sent via KCIs - this could include a rejection if the order does not\nmeet supplier validation/processing rules. Once the order is acknowledged, the\nsupplier may assign their own order number which will be returned in the KCI.\n",
        "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.\n",
        "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\nprovision, modify or cease a service.\n\nThe Fibre Cafe will validate the request and generate an amendment reference which is\nreturned. If the order amendment is rejected immediately then a 400 code will be\nreturned with reason(s) for the rejection in the response.\n\nThe order amendment will then be sent to the supplier for processing and further\nupdates will be sent via KCIs - this could include a rejection if the amendment\ndoes not meet supplier validation/processing rules.\n",
        "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\nprovision, modify or cease a service.\n\nThe Fibre Cafe will validate the request and generate a unique ID which is returned.\nIf the order cancellation is rejected immediately then a 400 code will be\nreturned with reason(s) for the rejection in the response.\n\nThe order cancellation will then be sent to the supplier for processing and further\nupdates will be sent via KCIs - this could include a rejection if the cancellation\ndoes not meet supplier validation/processing rules.\n",
        "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\nprovide is supported with cease and modify coming soon.\n\nThe Fibre Cafe will validate the request and generate an order number which is\nreturned. If the order is rejected immediately then a 400 code will be returned\nwith reason(s) for the rejection in the response.\n\nThe ethernet order will then be sent to the supplier for processing and further updates\nwill be sent via KCIs - this could include a rejection if the order does not\nmeet supplier validation/processing rules. Once the order is acknowledged, the\nsupplier may assign their own order number which will be returned in the KCI.\n",
        "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.\n",
        "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.\n\nThe Fibre Cafe will validate the request and generate a service test identifier which is\nreturned. If the test request is rejected immediately then a 4XX code will be returned\nwith reason(s) for the rejection in the response.\n\nThe Fibre Cafe will internally determine the best supplier test to execute based on supplier \nand service specification attributes, in addition to the PROBLEM_TYPE characteristics supplied.\n\nThe service test result will be returned asynchronously via a KCI, and may also be queried via\nthe GET /service-tests/{id} API.\n",
        "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\nthe test will be returned if available.\n",
        "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.\n\nThe Fibre Cafe will validate the request and generate a problem identifier which is \nreturned. If the problem request is rejected immediately then a 4XX code will be returned\nwith reason(s) for the rejection in the response.\n\nThe problem will then be sent to the supplier for processing and further updates\nwill be sent via KCIs - this could include a rejection if the problem does not\nmeet supplier validation/processing rules. Once the problem is acknowledged, the\nsupplier may assign their internal reference number which will be returned in the KCI as a characteristic.\n",
        "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.\n",
        "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.\n\nThe Fibre Cafe will validate the request and generate a unique ID which is returned.\nIf the problem amendment is rejected immediately then a 4XX code will be\nreturned with reason(s) for the rejection in the response.\n\nThe problem amendment will then be sent to the supplier for processing and further\nupdates will be sent via KCIs - this could include a rejection if the request\ndoes not meet supplier validation/processing rules.\n",
        "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.\n\nThe Fibre Cafe will validate the request and generate a unique ID which is returned.\nIf the problem cancellation is rejected immediately then a 4XX code will be\nreturned with reason(s) for the rejection in the response.\n\nThe problem cancellation will then be sent to the supplier for processing and further\nupdates will be sent via KCIs - this could include a rejection if the cancellation\ndoes not meet supplier validation/processing rules.\n",
        "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\nservice problem.\n",
        "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.\nThe underlying cause will be returned but will likely require help from the Fibre Cafe support team or\nby contacting the supplier directly.\nEvery error is uniquely identified via a UUID which should be reported to the support team as required.\n\nPossible error types:\n- NOT_AUTHORISED : An authorisation issue accessing the supplier API using the tenant's credentials.\n- SUPPLIER_FAULT : The supplier API has encountered an unexpected error or is not responding to the Fibre Cafe.\n- SUPPLIER_TIMED_OUT : The Fibre Cafe did not receive a timely response from the supplier.\n- GATEWAY_FAULT : The Fibre Cafe gateway has encountered an unexpected error.\n",
        "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\n",
            "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;\n- Entity has been updated\n- Entity has been delayed\n- Entity has been committed\n- Appointment was missed\n- Information required\n- Unable to send the entity to supplier\n",
        "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\nany service problem. This service test will classify the outcome into Red, Amber or Green, also supporting\nexception scenarios. The next steps in the journey will depend on this result and any additional details provided.\n",
        "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.\n- CPE\n- CUSTOMER\n- OUTAGE\n- PERFORMANCE\n- STABILITY\n- SYNCHRONISATION\n",
            "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\n- LINE_PROFILE\n- REMOTE_ID\n- AUTHENTICATION_AGENT (DHCPRelayAgent, PPPIntermediateAgent, None)\n- CARE_LEVEL\n",
            "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\non the tenant system.\n",
        "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\nrebook an appointment.\n",
        "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)\ne.g.\n- LINE_PROFILE\n- SERVICE_ASSET_ID\n",
            "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:\n\n- ISSUE_RESOLVED\n- CUSTOMER_NETWORK_ISSUE\n- NO_LONGER_REQUIRED\n- OTHER\n",
        "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;\n- Order has been updated\n- Order has been delayed\n- Order has been committed\n- Appointment was missed\n- Information required\n- Unable to send the order to supplier\n",
        "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;\n- Order has been updated\n- Order has been delayed\n- Order has been committed\n- Appointment was missed\n- Information required\n- Unable to send the order to supplier\n",
        "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)\ne.g.\n\n- UNINHABITED\n- HOTSITE\n- TEMPORARY\n",
            "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.\nThe underlying cause will be returned but will likely require help from the Fibre Cafe support team or\nby contacting the supplier directly.\nEvery error is uniquely identified via a UUID which should be reported to the support team as required.\n\nPossible error types:\n- NOT_AUTHORISED : An authorisation issue accessing the supplier API using the tenant's credentials.\n- SUPPLIER_FAULT : The supplier API has encountered an unexpected error or is not responding to the Fibre Cafe.\n- SUPPLIER_TIMED_OUT : The Fibre Cafe did not receive a timely response from the supplier.\n- GATEWAY_FAULT : The Fibre Cafe gateway has encountered an unexpected error.\n",
        "allOf": [
          {
            "$ref": "#/components/schemas/Error"
          }
        ]
      },
      "Error": {
        "description": "Represents an error with code to denote origin/cause.\n\n- INVALID_REQUEST : Request was well-formed/syntactically correct but did not pass validation requirements\n- MALFORMED_REQUEST : Request was not valid JSON or missing mandatory parameters\n- NOT_AUTHORISED : User was not authenticated and/or authorised to use endpoint\n- NOT_FOUND : Requested entity was not found\n- SUPPLIER_FAULT : An unexpected problem originating from the supplier API\n- SUPPLIER_TIMED_OUT : The Fibre Cafe did not receive a timely response from the supplier\n- GATEWAY_FAULT : An unexpected problem originating on the Fibre Cafe gateway\n",
        "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:\n\n- SURVEY_REQUIRED\n- BUSINESS_PARK\n- FEASIBILITY_CHECK\n- WAYLEAVE_OWNER\n- WAYLEAVE_SHARED\n- WAYLEAVE_PRIVATE\n- WAYLEAVE_UNADOPTED\n- WAYLEAVE_REFUSED\n- UNECONOMIC_LENGTH\n- UNECONOMIC_SURFACE\n- OTHER\n",
        "type": "string",
        "pattern": "^[A-Z_]{1,25}$",
        "example": "WAYLEAVE_SHARED"
      },
      "UnavailabilityReasonCode": {
        "description": "Reason why service is unavailable (hard LOC):\n\n- NOT_PLANNED\n- IN_PLANNING\n- UNDER_CONSTRUCTION\n- OUT_OF_OPTIC_RANGE\n- WAYLEAVE_ISSUE\n- UNECONOMIC_LENGTH\n- UNECONOMIC_SURFACE\n- UNECONOMIC_OTHER\n- OTHER\n",
        "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.\nType of installation involved:\n\n- STANDARD\n- EXTENDED_STANDARD\n- NON_STANDARD\n",
        "type": "string",
        "example": "STANDARD"
      },
      "AppointmentPurpose": {
        "description": "Purpose of the appointment : PROVIDE, MODIFY, REPAIR",
        "type": "string",
        "example": "PROVIDE"
      },
      "TimeslotClassification": {
        "description": "Timeslot classification:\n\n- WEEKDAY\n- WEEKDAY_AM\n- WEEKDAY_PM\n- WEEKDAY_EARLY\n- WEEKDAY_EVENING\n- SATURDAY\n- SATURDAY_AM\n- SATURDAY_PM\n- SATURDAY_EARLY\n- SATURDAY_EVENING\n- SUNDAY\n- SUNDAY_AM\n- SUNDAY_PM\n- SUNDAY_EARLY\n- SUNDAY_EVENING\n",
        "type": "string",
        "pattern": "^[A-Z_]{1,25}$",
        "readOnly": true,
        "example": "SATURDAY_AM"
      },
      "CancellationReasonCode": {
        "description": "Codes representing reason for cancellation:\n\n- CUSTOMER_CHANGED_MIND\n- INSTALL_FAILED\n- NETWORK_ISSUE\n- NO_LONGER_REQUIRED\n- OTHER\n\nReason codes for cancellation other (unsolicited cease):\n\n- NO_AUTHORISATION\n- CUSTOMER_NOT_AWARE\n- DELIBERATE_MISLEAD\n- PURCHASED_DIFFERENT_PRODUCT\n- END_USER_NOT_MOVING\n",
        "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\ndepending on whether the tenant is required to/can resolve the problem.\n\n- ACCESS_ISSUE\n- ACTIVATION_FAILED\n- ADDITIONAL_WORK\n- APPOINTMENT_NOT_REQUIRED\n- CAPACITY_ISSUE\n- COST_ISSUE\n- CUSTOMER_CHANGED_MIND\n- FAULT_AT_NODE\n- FAULT_AT_ONT\n- FAULT_AT_POP\n- INFORMATION_REQUIRED\n- INSTALL_FAILED\n- INVALID_REQUEST\n- LINKED_ORDER_ISSUE\n- NETWORK_ISSUE\n- NETWORK_UNAVAILABLE\n- NOT_IMPLEMENTED\n- NO_LONGER_REQUIRED\n- OTHER\n- PARTIAL_INSTALL\n- PLANNING_ISSUE\n- PROPERTY_UNOCCUPIED\n- REJECTION\n- ROUTER_NOT_AVAILABLE\n- SITE_UNSAFE\n- SURVEY_REQUIRED\n- TELECARE_ISSUE\n- TIMED_OUT\n- UNABLE_TO_ATTEND\n- UNKNOWN_FAULT\n- WAYLEAVE_ISSUE\n",
        "type": "string",
        "pattern": "^[A-Z_]{1,25}$",
        "example": "NETWORK_ISSUE"
      },
      "EngineerTasks": {
        "description": "Engineer tasks to be performed at installation appointment.\n\n- INSTALL_ROUTER\n- TEST_SINGLE_DEVICE\n- ADDITIONAL_CABLING\n- TEST_MULTIPLE_DEVICES\n- INSTALL_BBU\n- VOICE_REINJECTION\n- PROVE_IP_VOICE\n- ENSURE_TELECARE\n",
        "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).\n- ISDN2\n- ISDN30\n- MPF\n- PSTN\n- SOGEA\n",
        "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:\n\n- CREATED : Order has been created by supplier (unsolicited cease)\n- ACKNOWLEDGED : Supplier has acknowledged receipt of the order (KCI1)\n- COMMITTED : Supplier has committed to fulfillment of the order (KCI2)\n- DELAY : There is a problem causing a delay with the order\n- RESUMED : The problem causing the delay has been resolved without impact on target date\n- REAPPOINTED : Supplier has re-appointed the order (if not suitable then treat as a REAPPOINT)\n- RESCHEDULED : Supplier makes an unsolicited change to the target date\n- ADDITIONAL : Supplier has updated the order and flagged that additional information is available\n- WARNING : Supplier has updated the order and flagged a warning\n- RESUBMIT : Tenant needs to resubmit the request\n- UPDATE : Supplier has updated the order\n- AMENDED : Supplier has accepted and applied the requested order amendment\n- CANCELLED : Supplier has accepted and applied the requested order cancellation\n- TERMINATED : Supplier has rejected or cancelled the order and cannot fulfil it\n- COMPLETED : Supplier has completed the order (KCI3)\n",
        "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:\n\n- INFORMATION_REQUIRED : Supplier requires additional information from the tenant\n- REAPPOINT : Supplier requires the tenant to re-appoint\n- RESUBMIT : Supplier requires the tenant to resubmit the request as it failed\n- CONFIRM : Supplier has resolved the request and is awaiting acceptance or rejection\n- CONTACT_CUSTOMER : Supplier has requested the tenant to contact the customer to continue\n- CONTACT_REAPPOINT : Supplier requires the tenant to re-appoint but suggests contacting the customer first\n",
        "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.\n\n- ADD : Add or replace (where supported) a service characteristic with this new value\n- DELETE : Remove this service characteristic\n- NONE : No change to this service characteristic - provided for information only\n",
        "type": "string",
        "enum": [
          "ADD",
          "DELETE",
          "NONE"
        ],
        "default": "ADD"
      },
      "UnsolicitedCeaseReason": {
        "description": "The reason provided for the unsolicited cease:\n\n- CHANGE_OF_CP : Customer is switching to another CP\n- WORKING_LINE_TAKEOVER : Customer is moving address and is taking over the line\n- CP_REQUEST : Customer is changing service/technology but CP is not changing\n",
        "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\nFibre Cafe uses the industry standard [OAuth 2.0 protocol](https://oauth.net/2/).\n",
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "/auth/tenant/access-token",
            "scopes": {}
          }
        }
      }
    }
  }
}