Skip to content

Fibre Cafe : Tenant Updates API (1.14)

Introduction

The Fibre Cafe is a scalable, unified platform to support L2C provisioning, in-life modification/cease and T2R trouble resolution between communication providers (CP) and network operators or aggregators.

CPs are known as 'tenants' on the Fibre Cafe and communicate with this API - the Fibre Cafe's Tenant API. The network operators and aggregators providing the underlying services are known as 'suppliers'.

Where suppliers need to send updates back to the tenant (KCIs - Keep Customer Informed) then this API will be called. Each tenant is responsible for implementing this API definition for the Fibre Cage to call.

Examples of KCIs are where the order/problem state and/or order/problem fields have changed or to provide feedback on any requests e.g. amendment/cancellation submitted on the Tenant API asynchronously.

Unsolicited ceases can also be sent via this API - these will be represented as a new order in the system that follows a similar but reduced order flow. __

© 2022-2026 Strategic Imperatives

Download OpenAPI description
Languages
Servers
https://api.provided_by_tenant.net/kcis

KCIs

KCI (Keep Customer Informed) updates are sent from a supplier to the tenant to provide order updates. For example, updates about an inflight order for a new service may include order state changes, delays and requests for information. A KCI update may represent an unsolicited cease from the supplier.

Operations

Endpoint to receive an update (KCI).

Request

This endpoint is called by the Fibre Cafe to send an update (KCI) to the tenant.

Each KCI will have timestamps showing when issued by the supplier and the Fibre Cafe as appropriate. The reason for the KCI will be provided along with the updated associated entity.

Security
oauth2
Headers
X-Request-IDstringrequired

Unique identifier to link request and response events across the Fibre Cafe gateway - this will change with each request

X-Conversation-IDstringrequired

Identifier to track message journey across the Fibre Cafe gateway - this will match equivalent header from order creation

Bodyapplication/json
Any of:

An update for a provide service order

Any of:

KCI update - informational, no action required.

idstring^[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{...required

Unique identifier for this update (UUID)

Example: "3456cf7d-4471-42e4-a5be-c24ed58a7aa6"
supplierstring^\w{1,20}$required

System identifier for a supplier on the Fibre Cafe that is associated with this order

Example: "SUPPLIER1"
sequenceNumbernumber>= 1required

Sequence number of this KCI to ensure ordering

Example: 1
issuedOnstring(date-time)

Date/time when supplier issued this update

Example: "2022-01-10T09:00:00.000Z"
receivedOnstring(date-time)

Date/time when Fibre Cafe received this update

Example: "2022-01-10T09:00:00.000Z"
deliveredOnstring(date-time)required

Date/time when Fibre Cafe delivered this update to the tenant API

Example: "2022-01-10T09:00:00.000Z"
supplierNotesArray of objects(SupplierNote)

The supplier has added these note(s) about the order relating to this KCI

updateTypestring(InformationalUpdateType)required

The type of update - informational

Value"INFORMATIONAL"
informationobject(Information)required

Represents an informational update from the supplier - these are given a reason type to aid with any process/flows on the tenant system.

information.​typestring(InformationType)required

Type of informational update:

  • CREATED : Entity has been created by supplier (unsolicited cease)
  • ACKNOWLEDGED : Supplier has acknowledged receipt (KCI1)
  • COMMITTED : Supplier has committed to fulfillment (KCI2)
  • DELAY : There is a problem causing a delay
  • RESUMED : The problem causing the delay has been resolved without impact on target date
  • REAPPOINTED : Supplier has re-appointed (if not suitable then treat as a REAPPOINT)
  • RESCHEDULED : Supplier makes an unsolicited change to the target date
  • ADDITIONAL : Supplier has flagged that additional information is available
  • RESUBMIT : The tenant needs to resubmit
  • WARNING : Supplier has flagged a warning
  • UPDATE : Supplier has made a generic update not covered by other types
  • AMENDED : Supplier has accepted and applied the requested amendment
  • CANCELLED : Supplier has accepted and applied the requested cancellation
  • TERMINATED : Supplier has terminated this request without fulfilling it
  • COMPLETED : Supplier has completed the request (KCI3)
Enum"CREATED""ACKNOWLEDGED""COMMITTED""DELAY""RESUMED""REAPPOINTED""RESCHEDULED""ADDITIONAL""RESUBMIT""WARNING"
information.​codestring(ProblemCode)^[A-Z_]{5,30}$

Code representing problem - these may be sent as informational or action required updates depending on whether the tenant is required to resolve the problem.

  • ACCESS_ISSUE
  • ACTIVATION_FAILED
  • ADDITIONAL_WORK
  • APPOINTMENT_NOT_REQUIRED
  • CAPACITY_ISSUE
  • COST_ISSUE
  • CUSTOMER_CHANGED_MIND
  • FAULT_AT_NODE
  • FAULT_AT_ONT
  • FAULT_AT_POP
  • INFORMATION_REQUIRED
  • INSTALL_FAILED
  • INVALID_REQUEST
  • LINKED_ORDER_ISSUE
  • NETWORK_ISSUE
  • NETWORK_UNAVAILABLE
  • NOT_IMPLEMENTED
  • NO_LONGER_REQUIRED
  • OTHER
  • PARTIAL_INSTALL
  • PLANNING_ISSUE
  • PROPERTY_UNOCCUPIED
  • REJECTION
  • ROUTER_NOT_AVAILABLE
  • SITE_UNSAFE
  • SURVEY_REQUIRED
  • TELECARE_ISSUE
  • TIMED_OUT
  • UNABLE_TO_ATTEND
  • UNKNOWN_FAULT
  • WAYLEAVE_ISSUE
Example: "NETWORK_ISSUE"
information.​textstring[ 1 .. 1000 ] characters

Textual information about this update - e.g. reason for the delay

Example: "Resolving network issue"
information.​supplierCodesArray of strings

Supplier's reason or problem code - where available

Example: ["313"]
information.​supplierCodestring[ 1 .. 50 ] charactersDeprecated

Supplier's reason or problem code - deprecated: replaced by supplierCodes array to allow for multiple underlying supplier codes

Example: "313"
entityTypestring(ProvideOrderEntityType)required

The primary entity type this KCI regards (will be supplied in entity field) - provide service order

Value"PROVIDE_ORDER"
entityobject(ProvideServiceOrder)required

Represents an order for new service(s) at a particular address.

entity.​idnumber>= 1required

Unique reference identifying this service order (order number - generated by Fibre Cafe)

Example: 123
entity.​orderTypestring(ProvideOrderType)required

The type of order - new, (re)start, takeover, transfer or swap

Enum"NEW""START""TAKEOVER""TRANSFER""SWAP"
entity.​supplierstring^\w{1,20}$required

System identifier for a supplier on the Fibre Cafe that is associated with this order

Example: "DUMMY_SUPPLIER"
entity.​supplierOrderNumberstring[ 1 .. 50 ] characters

Order reference generated by the supplier once acknowledged (for information only)

Example: "A123X"
entity.​statusstring(OrderStatus)required

Order lifecycle adapted from TMF641 - order update events (KCIs) will be forwarded to the tenant as the order transitions from one state to the other.

Enum"RECEIVED_BY_GATEWAY""SENT_TO_SUPPLIER""FAILED_TO_SEND""REJECTED""ACKNOWLEDGED""IN_PROGRESS""PENDING""HELD""PENDING_AMENDMENT""PENDING_CANCELLATION"
Example: "PENDING_CANCELLATION"
entity.​addressobject(AddressIdentifier)required

Address identifier for location including type of identifier.

entity.​address.​idstring[ 1 .. 20 ] charactersrequired

Address identifier of given type

Example: "A00000031882"
entity.​address.​typestring^[A-Za-z]{1,15}$required

Type of address identifier

Example: ["UPRN","NAD","ROBT","DistrictCode"]
entity.​address.​additionalIdentifiersArray of objects(SecondaryAddressIdentifier)non-empty

Additional address identifiers where available/required for subsequent operations

entity.​serviceOrderItemobject(ServiceOrderItem)required

Order for a service that the supplier provides at the selected address.

entity.​serviceOrderItem.​serviceSpecificationobject(ServiceSpecification)required

Details of a service the supplier provides at the selected address.

entity.​serviceOrderItem.​serviceSpecification.​idstring[ 1 .. 50 ] charactersrequired

Unique identifier for this service specification

Example: "ftthl2r"
entity.​serviceOrderItem.​serviceSpecification.​namestring[ 1 .. 50 ] characters

Name of the service

Example: "FTTH"
entity.​serviceOrderItem.​serviceCharacteristicsArray of objects(ServiceCharacteristic)>= 0 itemsrequired

List of service characteristics for the service order item - e.g. for FTTH service

  • AUTHENTICATION_AGENT (DHCPRelayAgent, PPPIntermediateAgent, None)
  • REMOTE_ID
  • LINE_PROFILE
  • SERVICE_ID
  • ENNI_ID
  • SERVICE_VLAN_ID
  • CUSTOMER_VLAN_ID
  • CABLE_LINK_ID
  • CIRCUIT_REFERENCE
  • SITE_NAME
  • SITE_LOCATION
  • ONT_REFERENCE
  • ONT_SERIAL_NUMBER
  • ONT_PORT
entity.​serviceOrderItem.​serviceCharacteristics[].​namestring[ 1 .. 50 ] charactersrequired

Name of the service characteristic

Example: "LINE_PROFILE"
entity.​serviceOrderItem.​serviceCharacteristics[].​valuestring[ 1 .. 50 ] charactersrequired

Value for this characteristic

Example: "1G_1G"
entity.​primaryContactobject(Contact)required

Represents a contact available at the given address - primary contact must be provided.

entity.​primaryContact.​namestring[ 1 .. 100 ] charactersrequired

Contact name

Example: "John Smith"
entity.​primaryContact.​emailstring^\S{1,64}@\S{2,254}$

Contact email address (if available)

Example: "john@smith.com"
entity.​primaryContact.​phoneNumberstring^\+?[\d\s\-#]{8,50}$required

Contact phone number

Example: "01234 567890"
entity.​secondaryContactobject(Contact)

Represents a contact available at the given address - primary contact must be provided.

entity.​appointmentReservationIdnumber>= 1

Unique identifier for the reserved appointment (if applicable)

Example: 345
entity.​appointmentSupplierReferencestring[ 1 .. 50 ] characters

Appointment reference generated by the supplier for a re-appointed timeslot (only returned if applicable)

Example: "123456543"
entity.​appointmentTimeslotobject

Represents a re-appointed timeslot from the supplier (only returned if applicable)

entity.​requestedCompletionDatestring(date)

Where not appointed, allows a date to be requested for the service activation.

Example: "2022-01-10"
entity.​committedDatestring(date-time)

When the supplier first commits to fulfil the order this field will contain the expected completion date. Once set, this value cannot change.

Example: "2022-01-01T09:09:33.001Z"
entity.​targetDatestring(date-time)

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.

Example: "2022-01-01T09:09:33.001Z"
entity.​engineerTasksArray of strings(EngineerTasks)

Engineer tasks to be performed at installation appointment.

  • INSTALL_ROUTER
  • TEST_SINGLE_DEVICE
  • ADDITIONAL_CABLING
  • TEST_MULTIPLE_DEVICES
  • INSTALL_BBU
  • VOICE_REINJECTION
  • PROVE_IP_VOICE
  • ENSURE_TELECARE
Example: ["TEST_SINGLE_DEVICE"]
entity.​hazardsstring[ 1 .. 1000 ] characters

Hazard information about the site where the service will be installed

Example: "Hazardous materials stored on site"
entity.​onSiteRestrictionsstring[ 1 .. 1000 ] characters

Information about restrictions on the site where the service will be installed

Example: "Restricted access"
entity.​notesstring[ 1 .. 1000 ] characters

Any notes about the order. This may include additional information that is required

Example: "Lorem ipsum dolor sit amet..."
entity.​createdstring(date-time)

Date/time when the order was created

Example: "2022-01-01T09:09:33.001Z"
entity.​updatedstring(date-time)

Date/time when the order was last updated

Example: "2022-01-01T09:45:39.001Z"
entity.​serviceOrderAmendmentobject(ProvideServiceOrderAmendment)

Represents a previous request to amend an existing inflight provide order. Any value(s) supplied will replace the existing value.

An amendment request has the following states:

  • PENDING : Supplier has received the amendment request and will accept or reject it shortly
  • FAILED_TO_SEND : The Fibre Cafe was unable to send the order amendment request
  • COMPLETED : The amendment request has been accepted by the supplier and applied to the order
  • REJECTED : The amendment request has been rejected by the supplier
Example: {"id":345,"orderId":123,"appointmentReservationId":234,"status":"REJECTED"}
entity.​serviceOrderCancellationobject(ServiceOrderCancellation)

Represents a request from the tenant to cancel an inflight order.

Cancellation requests have the following states:

  • PENDING : Supplier has received the cancellation request and will accept or reject it shortly
  • FAILED_TO_SEND : The Fibre Cafe was unable to send the order cancellation request
  • COMPLETED : The cancellation request has been accepted by the supplier and the order cancelled
  • REJECTED : The cancellation request has been rejected by the supplier
curl -i -X POST \
  https://api.provided_by_tenant.net/kcis/kcis \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-Conversation-ID: string' \
  -H 'X-Request-ID: string' \
  -d '{
    "entityType": "PROVIDE_ORDER",
    "entity": {
      "id": 123,
      "orderType": "NEW",
      "supplier": "DUMMY_SUPPLIER",
      "supplierOrderNumber": "A123X",
      "status": "PENDING_CANCELLATION",
      "address": {
        "id": "A00000031882",
        "type": [
          "UPRN",
          "NAD",
          "ROBT",
          "DistrictCode"
        ],
        "additionalIdentifiers": [
          {
            "id": "A00000031882",
            "type": [
              "UPRN",
              "NAD",
              "ROBT",
              "DistrictCode"
            ]
          }
        ]
      },
      "serviceOrderItem": {
        "serviceSpecification": {
          "id": "ftthl2r",
          "name": "FTTH"
        },
        "serviceCharacteristics": [
          {
            "name": "LINE_PROFILE",
            "value": "1G_1G"
          }
        ]
      },
      "primaryContact": {
        "name": "John Smith",
        "email": "john@smith.com",
        "phoneNumber": "01234 567890"
      },
      "secondaryContact": {
        "name": "John Smith",
        "email": "john@smith.com",
        "phoneNumber": "01234 567890"
      },
      "appointmentReservationId": 345,
      "appointmentSupplierReference": "123456543",
      "appointmentTimeslot": {
        "timeslotStartDateTime": "2022-01-10T09:00:00.000Z",
        "timeslotEndDateTime": "2022-01-10T13:00:00.000Z"
      },
      "requestedCompletionDate": "2022-01-10",
      "committedDate": "2022-01-01T09:09:33.001Z",
      "targetDate": "2022-01-01T09:09:33.001Z",
      "engineerTasks": [
        "TEST_SINGLE_DEVICE"
      ],
      "hazards": "Hazardous materials stored on site",
      "onSiteRestrictions": "Restricted access",
      "notes": "Lorem ipsum dolor sit amet...",
      "created": "2022-01-01T09:09:33.001Z",
      "updated": "2022-01-01T09:45:39.001Z",
      "serviceOrderAmendment": {
        "id": 345,
        "orderId": 123,
        "appointmentReservationId": 234,
        "status": "REJECTED"
      },
      "serviceOrderCancellation": {
        "id": 234,
        "orderId": 123,
        "supplierReference": "A123X-1",
        "reasonCode": "CUSTOMER_CHANGED_MIND",
        "text": "Delivery too long",
        "status": "REJECTED"
      }
    },
    "id": "3456cf7d-4471-42e4-a5be-c24ed58a7aa6",
    "supplier": "SUPPLIER1",
    "sequenceNumber": 1,
    "issuedOn": "2022-01-10T09:00:00.000Z",
    "receivedOn": "2022-01-10T09:00:00.000Z",
    "deliveredOn": "2022-01-10T09:00:00.000Z",
    "supplierNotes": [
      {
        "note": "Lorem ipsum dolor sit amet...",
        "type": [
          "Engineer Note",
          "Site Visit Note",
          "Customer Update"
        ],
        "created": "2022-01-01T09:09:33.001Z"
      }
    ],
    "updateType": "INFORMATIONAL",
    "information": {
      "type": "CREATED",
      "code": "NETWORK_ISSUE",
      "text": "Resolving network issue",
      "supplierCode": "313",
      "supplierCodes": [
        "313"
      ]
    }
  }'

Responses

Operation successful - update was received and will be processed

Headers
X-Request-IDstringrequired

Unique identifier to identify request and response events across the Fibre Cafe gateway

X-Conversation-IDstringrequired

Identifier to track message journey across the Fibre Cafe gateway

Response
No content