Skip to main content

Quote Management (Ethernet)

This guide provides step-by-step instructions and payload examples for generating a quote for Wholesale Ethernet Internet.

The process flows from defining the common quote "envelope" to building the composite product payload, and finally interpreting the multi-term pricing results.

 While this tutorial uses a NAD Key (NadKeySite) for simplicity, the API supports various identifiers including Postcodes and UPRNs. Before building your integration, please review the Key concepts guide. This resource provides a full Site compatibility matrix, along with essential details on pricing, Sandbox testing, and request batching best practices to avoid rate limits.

 Generating a quote is optional. The generated Quote ID cannot be used for product ordering. The prices obtained through the Quote Management API are indicative, not firm prices.

 


Logical structure of an Ethernet Internet quote

In an Ethernet Internet configuration, the quote is defined for a single installation site. The payload combines the physical access and the virtual path into a single composite structure, where managed equipment is nested directly within the physical access component.

 

Root: Wholesale Ethernet Internet Container

The top-level envelope for the quote, defining the internet service bundle and site location.

{
  "externalId": "my quote id",
  "expectedFulfillmentStartDate": "2026-02-23",
  "quoteItem": [
    {
      "action": "add",
      "product": {
        "@type": "WholesaleEthernetInternet",
        "productSpecification": { "id": "WholesaleEthernetInternet" },
Site address (identified with a NadKey)
        "place": [
          {
            "@type": "NadKeySite",
            "nadKey": "A00007815344"
          }
        ],
The site components - Physical access (with CPE) & Virtual path

A nested structure where the virtual circuit is a peer to the physical bearer, and managed equipment is a child of that bearer.

        "product": [
          {
            /* Physical access (Etherway) */
            "@type": "EtherwayFibreService",
            "productSpecification": { "id": "EtherwayFibreService" },
            "bandwidth": "1 Gbit/s",
            "resilience": "Standard",
            "product": [
              {
                /* Optional CPE nested inside the physical access */
                "@type": "EtherwayRouterCpe",
                "productSpecification": { "id": "EtherwayRouterCpe" },
                "bandwidth": "1 Gbit/s",
                "bundle": "Router"
              }
            ]
          },
          {
            /* 2: Virtual path (Etherflow Internet) - peer to the physical access */
            "@type": "EtherflowInternetService",
            "productSpecification": { "id": "EtherflowInternetService" },
            "bandwidth": "30 Mbit/s",
            "cos": "Standard CoS",
            "ipAddressBlock": "Block /28 (16 LAN IP Addresses)"
          }
        ]
      }
    }
  ]
}

 


Prerequisites

To complete this guide, ensure you meet the prerequisites listed in the Quick start guide.

 


Step 1: Define the root attributes

Define the JSON root attributes: externalId and expectedFulfillmentStartDate,  create the common quoteItem[] "envelope", and define the parent product type (WholesaleEthernetInternet).

Property Format / Value Details
externalId String Required. The root attribute for your internal reference ID.
expectedFulfillmentStartDate "YYYY-MM-DD" Required. The root attribute for the target start date.
action "add" Fixed value. Indicates a new quote line item.
product.@type "WholesaleEthernetInternet" Fixed value. The parent product bundle name.
product.productSpecification.id "WholesaleEthernetInternet" Fixed value. The parent product bundle id.

 

View payload after step 1

{
 "externalId": "my quote id",
 "expectedFulfillmentStartDate": "2026-02-23",
 "quoteItem": [
   {
     "action": "add",
     "product": {
       "@type": "WholesaleEthernetInternet",
       "productSpecification": {
         "id": "WholesaleEthernetInternet"
       },
       /* SITE: The installation address placeholder */
       "place": [],
       /* Physical access, virtual path, and CPE components placeholder */
       "product": []
     }
   }
 ]
}

 


Step 2: Define the site address

Property Format / Value Details
place[].@type "NadKeySite" Fixed value. Specifies you are using an Address ID.
place[].nadKey String

Required. The unique Gold Address ID from your Address Management step.

Example value: A00007815344

 

View payload after step 2

{
 "externalId": "my quote id",
 "expectedFulfillmentStartDate": "2026-02-23",
 "quoteItem": [
   {
     "action": "add",
     "product": {
       "@type": "WholesaleEthernetInternet",
       "productSpecification": {
         "id": "WholesaleEthernetInternet"
       },
       /* SITE: The installation address */
       "place": [
         {
           "@type": "NadKeySite",
           "nadKey": "A00007815344"
         }
       ],
       /* Physical access, virtual path, and CPE components placeholder */
       "product": []
     }
   }
 ]
}

 

 


Step 3: Add sub-products

Once the quoteItem[] "envelope" has been defined, populate its product array with two mandatory and an optional sub-products:

  • the physical access,
  • the virtual path, and
  • optional, BT-managed CPE (Customer Premises Equipment).

 

3.1: Define the physical access (Etherway)

This represents the physical fiber and port at the site.

Property Value Details
@type "EtherwayFibreService" Fixed value.Identifies the physical fiber component.

productSpecification.id

 

"EtherwayFibreService" Fixed value.Identifies the physical fiber component.
bandwidth "1 Gbit/s"

Required. The physical port capacity.
Allowed values:

  • 100 Mbit/s
  • 1 Gbit/s
  • 10 Gbit/s
resilience "Standard" Required. Defines whether the site uses a single fibre path or diverse, independent fibre paths to ensure service continuity in the event of a physical link failure.

 

View payload after step 3.1

{
 "externalId": "my quote id",
 "expectedFulfillmentStartDate": "2026-02-23",
 "quoteItem": [
   {
     "action": "add",
     "product": {
       "@type": "WholesaleEthernetInternet",
       "productSpecification": {
         "id": "WholesaleEthernetInternet"
       },
       "place": [
         {
           "@type": "NadKeySite",
           "nadKey": "A00007815344"
         }
       ],
       "product": [
         {
           /* Physical access (Etherway) */
           "@type": "EtherwayFibreService",
           "productSpecification": {
             "id": "EtherwayFibreService"
           },
           "bandwidth": "1 Gbit/s",
           "resilience": "Standard",
           "product": [
             {
               /* Optional CPE nested inside physical access */
             }
           ]
         },
         {
           /* Virtual path (EtherflowInternetService) - Peer to Etherway */
         }
       ]
     }
   }
 ]
}

 

3.2: (Optional) Add BT-managed CPE (Customer Premises Equipment)  

If your customer requires BT-managed equipment, include the Router or Firewall specifications as children nested within the product array of the physical access (Etherway).

Notes:

  • Adding CPE here ensures your indicative quote includes the necessary one-off installation and monthly rental fees for the devices.
  • Make sure that the CPE bandwidth matches the physical bearer speed.

 

Property  Example value Details
@type "EtherwayRouterCpe" Defines the component as a Managed Router.
@type "EtherwayFirewallCpe" Defines the component as a Managed Firewall.
bundle "Firewall, Maintenance..." Specifies the service level (e.g., Installation, Managed CPE).

 

Example CPE (Customer Premises Equipment) nesting payload

{
 "externalId": "my quote id",
 "expectedFulfillmentStartDate": "2026-02-23",
 "quoteItem": [
   {
     "action": "add",
     "product": {
       "@type": "WholesaleEthernetInternet",
       "productSpecification": {
         "id": "WholesaleEthernetInternet"
       },
       "place": [
         {
           "@type": "NadKeySite",
           "nadKey": "A00007815344"
         }
       ],
       "product": [
         {
           /* EtherwayFibreService */
           "@type": "EtherwayFibreService",
           "productSpecification": {
             "id": "EtherwayFibreService"
           },
           "bandwidth": "1 Gbit/s",
           "resilience": "Standard",
           "product": [
             {
               /* Managed CPE nested inside the bearer */
               "@type": "EtherwayFirewallCpe",
               "productSpecification": {
                 "id": "EtherwayFirewallCpe"
               },
               "bandwidth": "10 Mbit/s, 10 Users",
               "bundle": "Firewall, Maintenance, Configuration, Installation, Managed CPE"
             },
             {
               "@type": "EtherwayRouterCpe",
               "productSpecification": {
                 "id": "EtherwayRouterCpe"
               },
               "bandwidth": "1 Gbit/s",
               "bundle": "Router"
             }
           ]
         },
         {
           /* EtherflowInternetService - Peer to Etherway */
         }
       ]
     }
   }
 ]
}

 

3.3: Define the virtual path (Etherflow Internet)

This defines the internet data throughput and IP requirements and Class of Service (CoS) offerings.

Property Value Details
@type "EtherflowInternetService" Fixed value. Identifies the virtual internet component.

productSpecification.id

 

"EtherflowInternetService" Fixed value. Identifies the virtual internet component.
bandwidth "30 Mbit/s" Required. The committed data speed. The Etherflow bandwidth cannot exceed the Etherway bandwidth.
cos "Standard CoS" Required. Class of Service (traffic priority).
ipAddressBlock "Block /28..." Required. The allocated LAN IP range.

 

View payload after step 3.3 (with a placeholder CPE)

{
 "externalId": "my quote id",
 "expectedFulfillmentStartDate": "2026-02-23",
 "quoteItem": [
   {
     "action": "add",
     "product": {
       "@type": "WholesaleEthernetInternet",
       "productSpecification": {
         "id": "WholesaleEthernetInternet"
       },
       "place": [
         {
           "@type": "NadKeySite",
           "nadKey": "A00007815344"
         }
       ],
       "product": [
         {
           /* 1: Physical access (Etherway) */
           "@type": "EtherwayFibreService",
           "productSpecification": {
             "id": "EtherwayFibreService"
           },
           "bandwidth": "1 Gbit/s",
           "resilience": "Standard",
           "product": [
             {
               /* Optional CPE nested within the physical access */
             }
           ]
         },
         {
           /* Virtual path (Etherflow Internet) */
           "@type": "EtherflowInternetService",
           "productSpecification": {
             "id": "EtherflowInternetService"
           },
           "bandwidth": "30 Mbit/s",
           "cos": "Standard CoS",
           "ipAddressBlock": "Block /28 (16 LAN IP Addresses)"
         }
       ]
     }
   }
 ]
}

 


Step 4: Send the request

Set the required headers, then send your chosen JSON payload in the body of a POST request to the /tmf-api/quoteManagement/v4/quote endpoint.

 


Step 5: Interpret the response

The API returns a 201 Created status with the quote details. You must parse the response for the key pieces of information: Quote IDExcess Construction Charges (ECCs)indicative pricing, and Option B variations.

For a detailed breakdown of these fields, see the Interpret the response section in the Getting started guide.

 

Example response payload

{
 "id": "15582451-1d1e-4049-89dd-797aca356e52",
 "@baseType": "Quote",
 "@type": "BtwQuote",
 "externalId": "",
 "href": "https://api.wholesale.bt.com:443/tmf-api/quoteManagement/v4/quote/15582…",
 "system": "Dev",
 "category": "Wholesale",
 "product": "WholesaleEthernetInternet",
 "description": "This quote is indicative and non-binding.",
 "quoteDate": "2022-02-21T17:03:00.235Z",
 "effectiveQuoteCompletionDate": "2022-02-21",
 "expectedFulfillmentStartDate": "2022-02-21",
 "version": "v1",
 "state": "approved",
 "validFor": {
   "startDateTime": "2022-02-21",
   "endDateTime": "2022-02-21"
 },
 "quoteItem": [
   {
     "@baseType": "QuoteItem",
     "@type": "BtwQuoteItem",
     "state": "approved",
     "action": "add",
     "product": {
       "@baseType": "Product",
       "@type": "WholesaleEthernetInternet",
       "productSpecification": {
         "id": "WholesaleEthernetInternet"
       },
       "place": [
         {
           "@type": "NadKeySite",
           "nadKey": "A00007815344"
         }
       ],
       "product": [
         {
           "@baseType": "Product",
           "@type": "EtherwayFibreService",
           "productSpecification": {
             "id": "EtherwayFibreService"
           },
           "bandwidth": "1 Gbit/s",
           "resilience": "Standard",
           "productInformation": {
             "accessProvider": "Openreach",
             "openreachOnNet": "No",
             "servingExchange": {
               "code": "THMSD",
               "name": "MEDSTEAD"
             },
             "ethernetSwitch": [
               {
                 "code": "THATN",
                 "name": "ALTON TE",
                 "exchangeDistance": {
                   "unit": "Kilometre",
                   "value": 8
                 },
                 "siteDistance": {
                   "unit": "Kilometre",
                   "value": 5
                 }
               }
             ],
             "indicativeECCs": {
               "circuitDeliveryCategory": "3",
               "tariff": "Unable to calculate ECC",
               "indicativeExtraECCs": "Unable to calculate ECC",
               "fibrePresent": "No",
               "tNodeCapacity": "No"
             }
           },
           "productPrice": [
             {
               "name": "1 Year connection",
               "priceType": "nonRecurring",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 1857
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 2228.4
                 }
               }
             },
             {
               "name": "1 Year rental",
               "priceType": "recurring",
               "recurringChargePeriod": "year",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 5431
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 6517.2
                 }
               }
             },
             {
               "name": "3 Year connection",
               "priceType": "nonRecurring",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 0
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 0
                 }
               }
             },
             {
               "name": "3 Year rental",
               "priceType": "recurring",
               "recurringChargePeriod": "year",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 5431
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 6517.2
                 }
               }
             },
             {
               "name": "5 Year connection",
               "priceType": "nonRecurring",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 0
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 0
                 }
               }
             },
             {
               "name": "5 Year rental",
               "priceType": "recurring",
               "recurringChargePeriod": "year",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 4166
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 4999.2
                 }
               }
             },
             {
               "name": "3 Year Option B connection",
               "priceType": "nonRecurring",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 1500
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 1800
                 }
               }
             },
             {
               "name": "3 Year Option B rental",
               "priceType": "recurring",
               "recurringChargePeriod": "year",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 4931
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 5917.2
                 }
               }
             }
           ]
         },
         {
           "@baseType": "Product",
           "@type": "EtherflowInternetService",
           "productSpecification": {
             "id": "EtherflowInternetService"
           },
           "bandwidth": "30 Mbit/s",
           "cos": "Premium CoS",
           "ipAddressBlock": "Block /28 (16 LAN IP Addresses)",
           "productPrice": [
             {
               "name": "1 Year connection",
               "priceType": "nonRecurring",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 0
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 0
                 }
               }
             },
             {
               "name": "1 Year rental",
               "priceType": "recurring",
               "recurringChargePeriod": "year",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 968
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 1161.6
                 }
               }
             },
             {
               "name": "3 Year connection",
               "priceType": "nonRecurring",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 0
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 0
                 }
               }
             },
             {
               "name": "3 Year rental",
               "priceType": "recurring",
               "recurringChargePeriod": "year",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 968
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 1161.6
                 }
               }
             },
             {
               "name": "5 Year connection",
               "priceType": "nonRecurring",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 0
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 0
                 }
               }
             },
             {
               "name": "5 Year rental",
               "priceType": "recurring",
               "recurringChargePeriod": "year",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 968
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 1161.6
                 }
               }
             },
             {
               "name": "3 Year Option B connection",
               "priceType": "nonRecurring",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 0
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 0
                 }
               }
             },
             {
               "name": "3 Year Option B rental",
               "priceType": "recurring",
               "recurringChargePeriod": "year",
               "price": {
                 "taxRate": 20,
                 "dutyFreeAmount": {
                   "unit": "GBP",
                   "value": 968
                 },
                 "taxIncludedAmount": {
                   "unit": "GBP",
                   "value": 1161.6
                 }
               }
             }
           ]
         }
       ]
     }
   }
 ]
}

 


Next steps

Back to top