
Offers
Jump to:
This endpoint is used to obtain an Access Token using the Client Credentials Grant flow. This flow is typically used for machine-to-machine (M2M) communication where a specific user’s consent is not required, and the client application is acting on its own behalf.
Get offer details
Retrieves the detailed configuration, pricing references, and metadata for a specific service Offer identified by its namespace and name.
| Feature | Details |
|---|---|
| Method | GET |
| Endpoint | /apis/v1alpha/namespaces/{namespace}/offer/{name} |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| namespace | String | Yes | The unique identifier for the namespace. (e.g., 7 in the example) |
| name | String | Yes | The unique resource name of the offer (e.g., telr-test-001) |
Headers
| Header | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer <TOKEN> | Yes | A valid API Bearer token for authentication |
Response body schema
The response returns a JSON object representing the Offer resource.
| Field | NESTED PROPERTY | Type | Description |
|---|---|---|---|
| kind | String | The type of resource (offer) | |
| version | String | API version (e.g., v1alpha) | |
| metadata | Object | Contains timestamps, labels, and geo-spatial data (lat/long coordinates and Plus Codes) | |
| spec | Object | Contains the core business logic and configuration for the offer | |
| **quoteRef / siteRef** | References to the parent Quote and associated Site objects | ||
| terms | Array | Contract durations (e.g., 36 months) and their validity status | |
| address | Full geographic details of the service location, including normalized street data and UK-specific fields (if applicable) | ||
| **gaa / litBldgs** | Pricing reference blocks for different connectivity types (DIA, Broadband, Ethernet) | ||
| networkConfiguration | Defines HA options and LAN interface types (e.g., copper) | ||
| templateSelection | Hardware/Software constraints such as firewall requirements, max bandwidth (e.g., 200 Mbps), and circuit limits | ||
| state.phase | The current lifecycle stage of the offer (e.g., design) | ||
| dateExpired | Epoch timestamp indicating when the offer pricing/validity expires |
Example response analysis
In the provided sample, the offer “telr-test-001” is for a site in Seattle, WA.
- Pricing: The offer has successful pricing hits (hasOfferings: true) for DIA and Ethernet via GAA, but no Broadband offerings under the “Lit Buildings” category.
- Hardware: It is configured for a maximum of 200 Mbps bandwidth and 2 WAN circuits.
- Lifecycle: The offer is currently in the design phase.
Update offer configuration
This endpoint updates an existing Offer resource within a specific namespace. It is primarily used during the Design phase of a quote to refine technical specifications, select hardware templates, or adjust product attributes like speed and subnets.
| Feature | Details |
|---|---|
| Method | PUT |
| Endpoint | /apis/v1alpha/namespaces/{namespace}/offer/{name} |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| namespace | String | Yes | The unique identifier for the tenant environment (e.g., 142034) |
| name | String | Yes | The unique resource name of the offer (e.g., telr-test-001) |
Headers
| Header | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer <TOKEN> | Yes | A valid API Bearer token for authentication |
| Content-Type | application/json | Yes | Specifies the media type of the resource (standard for JSON APIs) |
Request body
The payload is a structured JSON representing the full state of the Offer resource. Key sections include:
| Field | NESTED PROPERTY | Type | Description |
|---|---|---|---|
| kind | String | The type of resource (offer) | |
| version | String | API version (e.g., v1alpha) | |
| annotations | Contains a checksum. This is often used for Optimistic Concurrency Control; the update may fail if the checksum doesn’t match the current server state to prevent overwriting intermediate changes. | ||
| geoLocation | Defines the physical delivery point using GeoJSON coordinates and Google Plus Codes | ||
| spec | Object | Technical requirements are defined | |
| products | Defines the connectivity service | ||
| type | dia (Dedicated Internet Access) | ||
| speed | 100 (Mbps) | ||
| ipSuffix | /29 (Subnet mask for the IP handoff) | ||
| templateSelection | Maps the service to specific hardware or virtual platforms | ||
| platform | EnvisionEDGE (The selected vendor/platform) | ||
| max_bandwidth_mbps | 2750 (The capacity limit of the selected template) | ||
| address | The granular location details, including street number, route, and UK-specific exchange codes if applicable. | ||
| **gaa / litBldgs** | References to pre-calculated pricing objects for different access technologies (Broadband, Ethernet, DIA) | ||
| state.phase | Indicates the current lifecycle stage. In this request, it is set to design. |
Sample request payload
{
"kind": "offer",
"version": "v1alpha",
"namespace": "142034",
"name": "telr-test-001",
"metadata": {
"dateCreated": 1770659951657,
"dateUpdated": 1770661506547,
"annotations": [
"net.gtt.offer/checksum/2e096aa3a1c836fadb745251d0665770c1a7c57d215e784a6c43ac657e62ea0f"
]
},
"spec": {
"products": [
{
"productSpecification": {
"externalId": "access",
"productCategory": "connect"
},
"attributes": {
"type": "dia",
"speed": 100,
"ipSuffix": "/29"
}
}
],
"templateSelection": {
"highAvailability": 1,
"firewall": 1,
"platform": 1,
"availableTemplates": [
{
"id": "31",
"name": "EnvisionEDGE Virtual Router",
"platform": "EnvisionEDGE",
"max_bandwidth_mbps": 2750
}
]
},
"state": {
"phase": "design"
}
}
}
Expected response
- 200 OK: Returns the fully updated Offer object, including a refreshed dateUpdated timestamp.
- 400 Bad Request: Occurs if the payload violates schema constraints (e.g., speed exceeds template limits).
- 409 Conflict: Occurs if the checksum in annotations does not match the current version on the server.
Partial update (PATCH) offer
This endpoint performs a partial update to an existing Offer resource using the JSON Patch (RFC 6902) standard. Unlike a PUT request, which requires sending the entire resource, PATCH allows you to modify specific fields—in this case, updating the product configuration without touching other metadata or site details.
| Feature | Details |
|---|---|
| Method | PATCH |
| Endpoint | /apis/v1alpha/namespaces/{namespace}/offer/{name} |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| namespace | String | Yes | The unique identifier for the tenant environment (e.g., 142034) |
| name | String | Yes | The unique resource name of the offer (e.g., telr-test-001) |
Headers
| Header | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer <TOKEN> | Yes | A valid API Bearer token for authentication |
| Content-Type | application/json | Yes | Specifies the media type of the resource (standard for JSON APIs) |
JSON patch operations
The request body uses a list of operation objects. This is a powerful way to ensure atomicity and precision when updating complex nested resources.
Update payload analysis
[
{
"op": "replace",
"path": "/spec/products",
"value": [ ... ]
}
]
| Field | Type | Required | Description |
|---|---|---|---|
| op | String | Yes | The operation type (replace)The operation type (replace) |
| path | String | Yes | The JSON pointer to the target field (/spec/products) |
| value | String | Yes | The new array of product objects to be injected. In this example, it sets a DIA 100 Mbps service with a /29 IP suffix |
Response highlights
A successful PATCH returns the fully updated resource.
- Timestamps: The metadata.dateUpdated is refreshed to reflect the patch time (e.g., 1770918180746).
- Integrity: A new net.gtt.offer/checksum is generated in the annotations field. You must use this new checksum for any subsequent PUT or PATCH operations to avoid version conflicts.
- Side Effects: Updating the product configuration may trigger backend recalculations. Notice in the sample response that templateSelection.maxBandwidthMbps has been updated to 100 to align with the new product speed.
Comparison: PUT vs. PATCH
| Feature | PUT | PATCH (JSON Patch) |
|---|---|---|
| Payload | Full resource object. | Array of specific operations. |
| Use Case | Overwriting a resource or full-state sync. | Precise updates to specific nested fields. |
| Risk | Can accidentally nullify fields if not sent. | High precision; only touches what is specified. |
Sample request body
[
{
"op": "replace",
"path": "/spec/products",
"value": [
{
"productSpecification": {
"externalId": "access",
"productCategory": "connect"
},
"attributes": {
"type": "dia",
"speed": 100,
"ipSuffix": "/29"
}
}
]
}
]
Product specification documentation (JSON Patch)
This documentation covers the various configurations for the /spec/products array within the GTT Offer API. These payloads utilize the JSON Patch (RFC 6902) standard to replace existing product configurations with specific connectivity types, ranging from wireline Dedicated Internet Access (DIA) to wireless 5G solutions.
Wireline connectivity (DIA)
Used for standard Dedicated Internet Access over fiber or copper. These specifications require defined bandwidth speeds and IP allocation details.
| Feature | DIA 100M Configuration | DIA 500M Configuration |
|---|---|---|
| externalId | access | access |
| type | dia | dia |
| speed | 100 Mbps | 500 Mbps |
| IP Subnet | /29 | /29 |
Business Logic: Upgrading speed via PATCH allows for rapid re-quoting of a site without re-entering geographic or site-specific metadata.
Wireless connectivity (5G solutions)
Wireless products are categorized by their Role (Primary vs. Backup) and their Mounting Environment (Indoor vs. Outdoor). Unlike DIA, wireless specifications include an outdoor boolean to determine the necessary hardware and installation type.
5G primary access
Designed for sites where 5G is the main circuit. It typically includes a speed attribute.
- Indoor Primary: Used for standard office environments where the 5G gateway is placed inside.
- outdoor: false, role: primary, speed: “100”
- Outdoor Primary: Used for sites requiring an external antenna or enclosure to ensure signal integrity.
- outdoor: true, role: primary, speed: “100”
5G backup access
Designed for failover redundancy. These configurations typically omit the speed attribute as they rely on “Best Effort” wireless delivery during primary circuit outages.
- Indoor Backup: outdoor: false, role: backup
- Outdoor Backup: outdoor: true, role: backup
Attribute dictionary
The following table defines the key fields within the attributes object for all product types:
| Attribute | Type | Description |
|---|---|---|
| type | String | The specific technology type (e.g., dia, 5G primary, 5G backup). |
| speed | String/Int | The provisioned bandwidth. (Note: Wireline uses Integer; Wireless often uses String). |
| ipSuffix | String | The CIDR notation for the IP handoff (e.g., /29 for 5 usable IPs). |
| outdoor | Boolean | true if outdoor hardware/mounting is required for signal optimization. |
| role | String | Defines the circuit hierarchy: primary or backup. |
Implementation example (JSON patch)
To update an offer to an Outdoor 5G Primary configuration, use the following operation:
[
{
"op": "replace",
"path": "/spec/products",
"value": [
{
"productSpecification": {
"productCategory": "connect"
},
"attributes": {
"type": "5G primary",
"outdoor": true,
"speed": "100",
"role": "primary"
}
}
]
}
]