curl --request PUT \
--url https://apiv2.example.com/licenses/{licenseId}/product-offering-change \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"productOfferingId": "<string>",
"scheduledAt": "2024-02-01",
"metadata": {}
}
'import requests
url = "https://apiv2.example.com/licenses/{licenseId}/product-offering-change"
payload = {
"productOfferingId": "<string>",
"scheduledAt": "2024-02-01",
"metadata": {}
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({productOfferingId: '<string>', scheduledAt: '2024-02-01', metadata: {}})
};
fetch('https://apiv2.example.com/licenses/{licenseId}/product-offering-change', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://apiv2.example.com/licenses/{licenseId}/product-offering-change",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'productOfferingId' => '<string>',
'scheduledAt' => '2024-02-01',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://apiv2.example.com/licenses/{licenseId}/product-offering-change"
payload := strings.NewReader("{\n \"productOfferingId\": \"<string>\",\n \"scheduledAt\": \"2024-02-01\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://apiv2.example.com/licenses/{licenseId}/product-offering-change")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"productOfferingId\": \"<string>\",\n \"scheduledAt\": \"2024-02-01\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://apiv2.example.com/licenses/{licenseId}/product-offering-change")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"productOfferingId\": \"<string>\",\n \"scheduledAt\": \"2024-02-01\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"licenseId": "<string>",
"status": "PENDING",
"type": "<string>",
"customer": {
"customerId": "<string>",
"name": "<string>"
},
"productOffering": {
"productOfferingId": "<string>",
"name": "<string>",
"price": {
"currency": "USD",
"priceType": "ONE_TIME",
"discount": 5,
"netPrice": 5,
"boundMonths": 12,
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptions": {}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
},
"activatedAt": "2023-12-25",
"assignedTo": {
"type": "SUBSCRIPTION",
"subscriptionId": "<string>",
"subscriptionDisplay": "<string>"
},
"details": {},
"pendingStatus": {
"status": "PENDING",
"scheduledAt": "2023-12-25"
},
"pendingProductOffering": {
"scheduledAt": "2023-12-25",
"product": {
"productOfferingId": "<string>",
"name": "<string>",
"price": {
"currency": "USD",
"priceType": "ONE_TIME",
"discount": 5,
"netPrice": 5,
"boundMonths": 12,
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptions": {}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
}
},
"cancelledAt": "2023-12-25",
"pausedAt": "2023-12-25",
"metadata": {}
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}Change license product offering
Change the product offering of a license (upgrade or downgrade).
To get a list of what product offerings the license can be changed to and when, get change options for the license.
When the change takes effect is dictated by what product offering is chosen, which in turn depends on the license terms and billing cycle.
curl --request PUT \
--url https://apiv2.example.com/licenses/{licenseId}/product-offering-change \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"productOfferingId": "<string>",
"scheduledAt": "2024-02-01",
"metadata": {}
}
'import requests
url = "https://apiv2.example.com/licenses/{licenseId}/product-offering-change"
payload = {
"productOfferingId": "<string>",
"scheduledAt": "2024-02-01",
"metadata": {}
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({productOfferingId: '<string>', scheduledAt: '2024-02-01', metadata: {}})
};
fetch('https://apiv2.example.com/licenses/{licenseId}/product-offering-change', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://apiv2.example.com/licenses/{licenseId}/product-offering-change",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'productOfferingId' => '<string>',
'scheduledAt' => '2024-02-01',
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://apiv2.example.com/licenses/{licenseId}/product-offering-change"
payload := strings.NewReader("{\n \"productOfferingId\": \"<string>\",\n \"scheduledAt\": \"2024-02-01\",\n \"metadata\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://apiv2.example.com/licenses/{licenseId}/product-offering-change")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"productOfferingId\": \"<string>\",\n \"scheduledAt\": \"2024-02-01\",\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://apiv2.example.com/licenses/{licenseId}/product-offering-change")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"productOfferingId\": \"<string>\",\n \"scheduledAt\": \"2024-02-01\",\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"licenseId": "<string>",
"status": "PENDING",
"type": "<string>",
"customer": {
"customerId": "<string>",
"name": "<string>"
},
"productOffering": {
"productOfferingId": "<string>",
"name": "<string>",
"price": {
"currency": "USD",
"priceType": "ONE_TIME",
"discount": 5,
"netPrice": 5,
"boundMonths": 12,
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptions": {}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
},
"activatedAt": "2023-12-25",
"assignedTo": {
"type": "SUBSCRIPTION",
"subscriptionId": "<string>",
"subscriptionDisplay": "<string>"
},
"details": {},
"pendingStatus": {
"status": "PENDING",
"scheduledAt": "2023-12-25"
},
"pendingProductOffering": {
"scheduledAt": "2023-12-25",
"product": {
"productOfferingId": "<string>",
"name": "<string>",
"price": {
"currency": "USD",
"priceType": "ONE_TIME",
"discount": 5,
"netPrice": 5,
"boundMonths": 12,
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptions": {}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
}
},
"cancelledAt": "2023-12-25",
"pausedAt": "2023-12-25",
"metadata": {}
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}{
"message": "<string>",
"code": "<string>",
"details": [
{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"suggestion": "<string>"
}
],
"hint": "<string>"
}Authorizations
An API key that grants access to the Connect API. You can create and manage API keys in the portal.
Headers
A unique key to ensure idempotency of requests. If a request with the same key has already been processed, the same result will be returned. The key must be unique for each distinct operation. Keys are expired after 24 hours, but we recommend using a new key for each request.
Modified requests with the same idempotency keys are rejected with a 409 Conflict status code.
256Path Parameters
The unique identifier of the license.
Body
Request to change the product offering of a license.
The unique identifier of the new product offering.
Earliest date to perform the change on. If the change schedule doesn't fit this date, the earliest date after this will be chosen.
"2024-02-01"
A set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format.
Show child attributes
Show child attributes
Response
Product offering change scheduled.
A license represents a permission to use a software product with embedded customer and product offering details.
The unique identifier for the license.
The status of the license.
PENDING, ACTIVE, PAUSED, CANCELLED, BLOCKED The type of license, categorizing the software product or service into various telecommunications license types.
Customer information embedded in responses. Sensitive details require separate API calls with appropriate authorization.
Show child attributes
Show child attributes
Embedded representation of a product offering.
Show child attributes
Show child attributes
The date and time when the license was activated.
Assignment details for a license, indicating what entity the license is assigned to. This embedded version includes additional display information for each assignment type.
Show child attributes
Show child attributes
Additional license details specific to certain license types.
Details about when a pending status change is scheduled for this license.
Show child attributes
Show child attributes
Pending product offering change.
Show child attributes
Show child attributes
The date and time when the license was cancelled (if applicable).
The date and time when the license was paused (if applicable).
A set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format.
Show child attributes
Show child attributes