Licenses
Manage licenses.
List licenses
/licensesList all licenses.
Query parameters
customer Idarray of stringFilter by customer. May be the entity's internal UUID or an external reference identifier.
Reference identifiers MUST be prefixed with rid_ (e.g., rid_crm-customer-12345) so the API
can distinguish them from internal UUIDs. The prefix is stripped before lookup.
typearray of LicenseTypeThe type of license to filter by.
limitinteger>= 1<= 1000default 100The maximum number of items to return.
cursorstringOpaque pagination token from a previous response's nextCursor.
Responses
200A list of licenses.
application/json
A list of licenses.
A list of licenses.
object
itemsarray of LicenserequiredShow child attributes
license IdstringrequiredThe unique identifier for the license.
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
typestringrequiredThe kind of feature the license unlocks. Most types cover business telephony (PBX) features,
such as PBX_USER_LEVEL (a PBX seat for one user), PBX_SOFTPHONE (softphone client),
PBX_ROUTE_IVR, PBX_ROUTE_GROUP, PBX_ROUTE_QUEUE, and PBX_ROUTE_VOICEMAIL (call routing
features), plus EXTERNAL_PRODUCT for licenses tied to products outside the telecom platform.
customerobjectrequiredCustomer information embedded in responses. Sensitive details require separate API calls with appropriate authorization.
Show child attributes
customer IdstringrequiredThe unique identifier for the customer. Use it with the customer endpoints to fetch full details.
namestringrequiredThe customer's display name — the company name for business customers or the person's full name for consumers.
product OfferingobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
image UrlstringuriURL to the image representing the product offering.
assigned ToobjectThe entity that a license is assigned to, with the display information for it. A license is always assigned to a subscription.
Show child attributes
typeenum<string>requiredThe type of assignment
values
SUBSCRIPTION
subscription IdstringrequiredThe unique identifier for the subscription
subscription DisplaystringDisplay name for the subscription (typically the phone number)
detailsobjectAdditional license details specific to certain license types.
Show child attributes
property NameanyAny additional properties, passed through as given.
pending StatusobjectA status change that has been requested but not yet applied, for example a scheduled cancellation. Present only while a status change is scheduled.
Show child attributes
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
scheduled AtstringdaterequiredThe date when the pending status change is scheduled to occur.
pending Product OfferingobjectA product offering change (upgrade or downgrade) that has been requested but not yet applied. Present only while a change is scheduled; the current offering remains in productOffering until the scheduled date.
Show child attributes
scheduled AtstringdaterequiredThe date when the pending product offering change is scheduled to occur.
productobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
activated AtstringdaterequiredThe date when the license was activated.
cancelled AtstringdateThe date when the license was canceled (if applicable).
paused AtstringdateThe date when the license was paused (if applicable).
metadataobject with string keysA set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format. Provided by API clients and returned as-is; the platform does not interpret the values.
Show child attributes
*stringpaginationobjectrequiredCursor-based pagination information returned by list endpoints.
Pass nextCursor as the cursor query parameter of the next request to fetch the following page.
Show child attributes
next Cursorstring | nullrequiredOpaque token for fetching the next page. Null when no more results.
400The request was malformed or invalid.
application/json
The request was malformed or invalid.
The request was malformed or invalid.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
401Authentication is required to access this resource.
application/json
Authentication is required to access this resource.
Authentication is required to access this resource.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
403Access to this resource is forbidden.
application/json
Access to this resource is forbidden.
Access to this resource is forbidden.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
404The requested resource was not found.
application/json
The requested resource was not found.
The requested resource was not found.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
429Too many requests have been sent in a given amount of time.
application/json
Too many requests have been sent in a given amount of time.
Too many requests have been sent in a given amount of time.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
500An unexpected error occurred on the server.
application/json
An unexpected error occurred on the server.
An unexpected error occurred on the server.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
Auth required
Send one of
X-Api-KeyBearer JWT+X-Api-Key
The API key is always required; the bearer token is optional.
curl https://apiv2.example.com/api/v2/licenses \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'X-Api-Key: YOUR_API_KEY'fetch('https://apiv2.example.com/api/v2/licenses', {
headers: {
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
'X-Api-Key': 'YOUR_API_KEY'
}
})requests.get(
"https://apiv2.example.com/api/v2/licenses",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"X-Api-Key": "YOUR_API_KEY"
}
)package main
import (
"fmt"
"io"
"net/http"
)
func main() {
requestUrl := "https://apiv2.example.com/api/v2/licenses"
req, _ := http.NewRequest("GET", requestUrl, nil)
req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Add("X-Api-Key", "YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}{
"items": [
{
"licenseId": "c9d0e1f2-a3b4-5678-9012-def012345678",
"status": "PENDING",
"type": "PBX_USER_LEVEL",
"customer": {
"customerId": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"name": "John Doe"
},
"productOffering": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
},
"assignedTo": {
"type": "SUBSCRIPTION",
"subscriptionId": "c9a4d8d4-24c0-4164-ac8d-c77c4103b786",
"subscriptionDisplay": "+1 (555) 123-4567"
},
"details": {},
"pendingStatus": {
"status": "PENDING",
"scheduledAt": "2024-02-01"
},
"pendingProductOffering": {
"scheduledAt": "2024-02-01",
"product": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
}
},
"activatedAt": "2024-01-15",
"cancelledAt": "2024-06-30",
"pausedAt": "2024-03-01",
"metadata": {
"propertyName": "string"
}
}
],
"pagination": {
"nextCursor": "eyJvZmZzZXQiOjEwMH0"
}
}{
"message": "The request body is invalid.",
"code": "bad_request",
"details": [
{
"message": "Email format is invalid.",
"code": "invalid_email",
"property": "contact.email"
}
],
"hint": "Check the request payload and correct the highlighted fields."
}{
"message": "Authentication is required to access this resource.",
"code": "unauthorized",
"hint": "Provide a valid API key in the X-Api-Key header."
}{
"message": "You do not have permission to perform this action.",
"code": "forbidden",
"hint": "Ensure your API key or user has the required permissions."
}{
"message": "The requested customer could not be found.",
"code": "not_found",
"hint": "Verify the customerId and try again."
}{
"message": "Too many requests. Please slow down.",
"code": "too_many_requests",
"hint": "Retry after the number of seconds indicated in the Retry-After header."
}{
"message": "An unexpected error occurred on the server.",
"code": "internal_server_error",
"hint": "Retry the request later. If the problem persists, contact support."
}Create license
/licensesCreate a new license
Headers
X- Idempotency- Keystringmax length 256A 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.
BodyCreateLicenseRequestrequiredapplication/json
Create a new license.
The product offering sets the type of the license. A license for an external product is
standalone and takes no assignedTo. Every other license needs assignedTo, and the
subscription must belong to the same customer.
product Offering IdstringrequiredThe unique identifier for the product offering to subscribe to.
The offering sets the type of the license.
customer IdstringuuidrequiredThe unique identifier for the existing customer who will own this license.
license TypestringdeprecatedDeprecated. The product offering sets the type of the license.
The platform rejects a value that does not agree with the product offering.
The kind of feature the license unlocks. Most types cover business telephony (PBX) features,
such as PBX_USER_LEVEL (a PBX seat for one user), PBX_SOFTPHONE (softphone client),
PBX_ROUTE_IVR, PBX_ROUTE_GROUP, PBX_ROUTE_QUEUE, and PBX_ROUTE_VOICEMAIL (call routing
features), plus EXTERNAL_PRODUCT for licenses tied to products outside the telecom platform.
assigned Toone ofThe entity that a license is assigned to. A license is always assigned to a subscription.
Show child attributes
typeenum<string>requiredThe type of entity the license is assigned to.
values
SUBSCRIPTION
subscription IdstringrequiredThe unique identifier of the subscription the license is assigned to.
schedule Activation AtstringdateDate when the license must be activated. The platform activates the license today when you omit this date. A date in the past is not permitted.
metadataobject with string keysA set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format. Provided by API clients and returned as-is; the platform does not interpret the values.
Show child attributes
*stringResponses
201License created successfully.
application/json
License created successfully.
License created successfully.
objectLicense
A license represents a permission to use a software product with embedded customer and product offering details.
license IdstringrequiredThe unique identifier for the license.
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
typestringrequiredThe kind of feature the license unlocks. Most types cover business telephony (PBX) features,
such as PBX_USER_LEVEL (a PBX seat for one user), PBX_SOFTPHONE (softphone client),
PBX_ROUTE_IVR, PBX_ROUTE_GROUP, PBX_ROUTE_QUEUE, and PBX_ROUTE_VOICEMAIL (call routing
features), plus EXTERNAL_PRODUCT for licenses tied to products outside the telecom platform.
customerobjectrequiredCustomer information embedded in responses. Sensitive details require separate API calls with appropriate authorization.
Show child attributes
customer IdstringrequiredThe unique identifier for the customer. Use it with the customer endpoints to fetch full details.
namestringrequiredThe customer's display name — the company name for business customers or the person's full name for consumers.
product OfferingobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
net Price Minorintegerint64The configured price of the offering, in minor currency units.
currencystringrequiredThe ISO 4217 currency code the price is expressed in (e.g., "USD").
price Typeenum<string>requiredHow the price is charged.
- ONE_TIME: Charged once (e.g., a setup fee or hardware purchase).
- RECURRING: Charged every billing cycle (e.g., a monthly subscription fee).
values
ONE_TIMERECURRING
binding ContractobjectA commitment to keep the subscription for a fixed term, usually in exchange for a discount that runs for the length of the commitment.
Show child attributes
standard DiscountobjectA recurring amount that comes off the price when you price the order. The amount applies to one billing period, the same as the price, and it is not a total. For example, a discount of 500 for 3 periods takes 500 off each of the first three periods, and 1500 in all.
Show child attributes
custom Upfront PaymentobjectBilling cycles the customer pays for in advance when ordering, usually at a discount. Billing returns to the normal cycle once the prepaid cycles run out.
Show child attributes
billing CycleobjectHow often a recurring price is charged.
Show child attributes
currency Options Minorobject with string keysPer-currency price overrides keyed by three-letter ISO currency code (e.g. "USD", "SEK"). Each value is the cost in that currency, in minor currency units.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
product Offering Group IdstringrequiredUnique identifier for the product group.
namestringrequiredName of the product group in the requested locale.
descriptionstringDescription of the product group in the requested locale.
categoryenum<string>requiredA product category is a sub-type for grouping offerings of the same type.
Typically, product offerings of the same type with the same category allow for switching between them. For upgrading and downgrading subscriptions and licenses, we recommend using their corresponding endpoints though.
Categories are grouped by their product type:
SUBSCRIPTION categories:
PRODUCT_CATEGORY_SUBSCRIPTION_CELL- Mobile cellular subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_DATA_SIM- Data-only SIM subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_BROADBAND- Broadband internet subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_M2M- Machine-to-machine IoT subscriptionPRODUCT_CATEGORY_TRAVEL_ESIM- Travel eSIM subscription for international roaming
SUBSCRIPTION_ADDON categories:
PRODUCT_CATEGORY_EXTRA_DATA- Additional data package addonPRODUCT_CATEGORY_TRAVEL_ESIM_PACKAGE- Travel eSIM data package with country/region coveragePRODUCT_CATEGORY_ABROAD- International roaming addon
EXTERNAL_PRODUCT categories:
PRODUCT_CATEGORY_EXTERNAL_PRODUCT- External purchasable productPRODUCT_CATEGORY_EXTERNAL_PRODUCT_ADDON- Addon for external product
SIM_CARD categories:
PRODUCT_CATEGORY_SIM_CARD- Physical SIM or eSIM replacement for an existing subscription
values
PRODUCT_CATEGORY_SUBSCRIPTION_CELLPRODUCT_CATEGORY_SUBSCRIPTION_DATA_SIMPRODUCT_CATEGORY_SUBSCRIPTION_BROADBANDPRODUCT_CATEGORY_SUBSCRIPTION_M2MPRODUCT_CATEGORY_TRAVEL_ESIMPRODUCT_CATEGORY_EXTRA_DATAPRODUCT_CATEGORY_TRAVEL_ESIM_PACKAGEPRODUCT_CATEGORY_ABROADPRODUCT_CATEGORY_EXTERNAL_PRODUCTPRODUCT_CATEGORY_EXTERNAL_PRODUCT_ADDONPRODUCT_CATEGORY_SIM_CARD
internal DescriptionstringInternal description of the product group for operational use only.
image UrlstringuriURL to the image representing the product offering.
assigned ToobjectThe entity that a license is assigned to, with the display information for it. A license is always assigned to a subscription.
Show child attributes
typeenum<string>requiredThe type of assignment
values
SUBSCRIPTION
subscription IdstringrequiredThe unique identifier for the subscription
subscription DisplaystringDisplay name for the subscription (typically the phone number)
detailsobjectAdditional license details specific to certain license types.
Show child attributes
property NameanyAny additional properties, passed through as given.
pending StatusobjectA status change that has been requested but not yet applied, for example a scheduled cancellation. Present only while a status change is scheduled.
Show child attributes
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
scheduled AtstringdaterequiredThe date when the pending status change is scheduled to occur.
pending Product OfferingobjectA product offering change (upgrade or downgrade) that has been requested but not yet applied. Present only while a change is scheduled; the current offering remains in productOffering until the scheduled date.
Show child attributes
scheduled AtstringdaterequiredThe date when the pending product offering change is scheduled to occur.
productobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
image UrlstringuriURL to the image representing the product offering.
activated AtstringdaterequiredThe date when the license was activated.
cancelled AtstringdateThe date when the license was canceled (if applicable).
paused AtstringdateThe date when the license was paused (if applicable).
metadataobject with string keysA set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format. Provided by API clients and returned as-is; the platform does not interpret the values.
Show child attributes
*string400The request was malformed or invalid.
application/json
The request was malformed or invalid.
The request was malformed or invalid.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
401Authentication is required to access this resource.
application/json
Authentication is required to access this resource.
Authentication is required to access this resource.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
403Access to this resource is forbidden.
application/json
Access to this resource is forbidden.
Access to this resource is forbidden.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
409The request conflicts with the current state of the resource.
application/json
The request conflicts with the current state of the resource.
The request conflicts with the current state of the resource.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
429Too many requests have been sent in a given amount of time.
application/json
Too many requests have been sent in a given amount of time.
Too many requests have been sent in a given amount of time.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
500An unexpected error occurred on the server.
application/json
An unexpected error occurred on the server.
An unexpected error occurred on the server.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
Auth required
Send one of
X-Api-KeyBearer JWT+X-Api-Key
The API key is always required; the bearer token is optional.
curl https://apiv2.example.com/api/v2/licenses \
--request POST \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"productOfferingId": "a7b8c9d0-e1f2-3456-7890-bcdef0123456",
"customerId": "b8c9d0e1-f2a3-4567-8901-cdef01234567"
}'fetch('https://apiv2.example.com/api/v2/licenses', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
productOfferingId: 'a7b8c9d0-e1f2-3456-7890-bcdef0123456',
customerId: 'b8c9d0e1-f2a3-4567-8901-cdef01234567'
})
})requests.post(
"https://apiv2.example.com/api/v2/licenses",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"X-Api-Key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"productOfferingId": "a7b8c9d0-e1f2-3456-7890-bcdef0123456",
"customerId": "b8c9d0e1-f2a3-4567-8901-cdef01234567"
}
)package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
requestUrl := "https://apiv2.example.com/api/v2/licenses"
payload := strings.NewReader(`{
"productOfferingId": "a7b8c9d0-e1f2-3456-7890-bcdef0123456",
"customerId": "b8c9d0e1-f2a3-4567-8901-cdef01234567"
}`)
req, _ := http.NewRequest("POST", requestUrl, payload)
req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Add("X-Api-Key", "YOUR_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(res)
fmt.Println(string(body))
}{
"licenseId": "c9d0e1f2-a3b4-5678-9012-def012345678",
"status": "PENDING",
"type": "PBX_USER_LEVEL",
"customer": {
"customerId": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"name": "John Doe"
},
"productOffering": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
},
"assignedTo": {
"type": "SUBSCRIPTION",
"subscriptionId": "c9a4d8d4-24c0-4164-ac8d-c77c4103b786",
"subscriptionDisplay": "+1 (555) 123-4567"
},
"details": {},
"pendingStatus": {
"status": "PENDING",
"scheduledAt": "2024-02-01"
},
"pendingProductOffering": {
"scheduledAt": "2024-02-01",
"product": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
}
},
"activatedAt": "2024-01-15",
"cancelledAt": "2024-06-30",
"pausedAt": "2024-03-01",
"metadata": {
"propertyName": "string"
}
}{
"message": "The request body is invalid.",
"code": "bad_request",
"details": [
{
"message": "Email format is invalid.",
"code": "invalid_email",
"property": "contact.email"
}
],
"hint": "Check the request payload and correct the highlighted fields."
}{
"message": "Authentication is required to access this resource.",
"code": "unauthorized",
"hint": "Provide a valid API key in the X-Api-Key header."
}{
"message": "You do not have permission to perform this action.",
"code": "forbidden",
"hint": "Ensure your API key or user has the required permissions."
}{
"message": "The request conflicts with the current state of the resource.",
"code": "conflict",
"hint": "Reload the resource to get its latest state before retrying."
}{
"message": "Too many requests. Please slow down.",
"code": "too_many_requests",
"hint": "Retry after the number of seconds indicated in the Retry-After header."
}{
"message": "An unexpected error occurred on the server.",
"code": "internal_server_error",
"hint": "Retry the request later. If the problem persists, contact support."
}Get license
/licenses/{licenseId}Retrieve detailed information about a specific license using its unique identifier.
Path parameters
license IdstringrequiredThe unique identifier of the license.
Responses
200A license object.
application/json
A license object.
A license object.
objectLicense
A license represents a permission to use a software product with embedded customer and product offering details.
license IdstringrequiredThe unique identifier for the license.
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
typestringrequiredThe kind of feature the license unlocks. Most types cover business telephony (PBX) features,
such as PBX_USER_LEVEL (a PBX seat for one user), PBX_SOFTPHONE (softphone client),
PBX_ROUTE_IVR, PBX_ROUTE_GROUP, PBX_ROUTE_QUEUE, and PBX_ROUTE_VOICEMAIL (call routing
features), plus EXTERNAL_PRODUCT for licenses tied to products outside the telecom platform.
customerobjectrequiredCustomer information embedded in responses. Sensitive details require separate API calls with appropriate authorization.
Show child attributes
customer IdstringrequiredThe unique identifier for the customer. Use it with the customer endpoints to fetch full details.
namestringrequiredThe customer's display name — the company name for business customers or the person's full name for consumers.
product OfferingobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
net Price Minorintegerint64The configured price of the offering, in minor currency units.
currencystringrequiredThe ISO 4217 currency code the price is expressed in (e.g., "USD").
price Typeenum<string>requiredHow the price is charged.
- ONE_TIME: Charged once (e.g., a setup fee or hardware purchase).
- RECURRING: Charged every billing cycle (e.g., a monthly subscription fee).
values
ONE_TIMERECURRING
binding ContractobjectA commitment to keep the subscription for a fixed term, usually in exchange for a discount that runs for the length of the commitment.
Show child attributes
standard DiscountobjectA recurring amount that comes off the price when you price the order. The amount applies to one billing period, the same as the price, and it is not a total. For example, a discount of 500 for 3 periods takes 500 off each of the first three periods, and 1500 in all.
Show child attributes
custom Upfront PaymentobjectBilling cycles the customer pays for in advance when ordering, usually at a discount. Billing returns to the normal cycle once the prepaid cycles run out.
Show child attributes
billing CycleobjectHow often a recurring price is charged.
Show child attributes
currency Options Minorobject with string keysPer-currency price overrides keyed by three-letter ISO currency code (e.g. "USD", "SEK"). Each value is the cost in that currency, in minor currency units.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
product Offering Group IdstringrequiredUnique identifier for the product group.
namestringrequiredName of the product group in the requested locale.
descriptionstringDescription of the product group in the requested locale.
categoryenum<string>requiredA product category is a sub-type for grouping offerings of the same type.
Typically, product offerings of the same type with the same category allow for switching between them. For upgrading and downgrading subscriptions and licenses, we recommend using their corresponding endpoints though.
Categories are grouped by their product type:
SUBSCRIPTION categories:
PRODUCT_CATEGORY_SUBSCRIPTION_CELL- Mobile cellular subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_DATA_SIM- Data-only SIM subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_BROADBAND- Broadband internet subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_M2M- Machine-to-machine IoT subscriptionPRODUCT_CATEGORY_TRAVEL_ESIM- Travel eSIM subscription for international roaming
SUBSCRIPTION_ADDON categories:
PRODUCT_CATEGORY_EXTRA_DATA- Additional data package addonPRODUCT_CATEGORY_TRAVEL_ESIM_PACKAGE- Travel eSIM data package with country/region coveragePRODUCT_CATEGORY_ABROAD- International roaming addon
EXTERNAL_PRODUCT categories:
PRODUCT_CATEGORY_EXTERNAL_PRODUCT- External purchasable productPRODUCT_CATEGORY_EXTERNAL_PRODUCT_ADDON- Addon for external product
SIM_CARD categories:
PRODUCT_CATEGORY_SIM_CARD- Physical SIM or eSIM replacement for an existing subscription
values
PRODUCT_CATEGORY_SUBSCRIPTION_CELLPRODUCT_CATEGORY_SUBSCRIPTION_DATA_SIMPRODUCT_CATEGORY_SUBSCRIPTION_BROADBANDPRODUCT_CATEGORY_SUBSCRIPTION_M2MPRODUCT_CATEGORY_TRAVEL_ESIMPRODUCT_CATEGORY_EXTRA_DATAPRODUCT_CATEGORY_TRAVEL_ESIM_PACKAGEPRODUCT_CATEGORY_ABROADPRODUCT_CATEGORY_EXTERNAL_PRODUCTPRODUCT_CATEGORY_EXTERNAL_PRODUCT_ADDONPRODUCT_CATEGORY_SIM_CARD
internal DescriptionstringInternal description of the product group for operational use only.
image UrlstringuriURL to the image representing the product offering.
assigned ToobjectThe entity that a license is assigned to, with the display information for it. A license is always assigned to a subscription.
Show child attributes
typeenum<string>requiredThe type of assignment
values
SUBSCRIPTION
subscription IdstringrequiredThe unique identifier for the subscription
subscription DisplaystringDisplay name for the subscription (typically the phone number)
detailsobjectAdditional license details specific to certain license types.
Show child attributes
property NameanyAny additional properties, passed through as given.
pending StatusobjectA status change that has been requested but not yet applied, for example a scheduled cancellation. Present only while a status change is scheduled.
Show child attributes
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
scheduled AtstringdaterequiredThe date when the pending status change is scheduled to occur.
pending Product OfferingobjectA product offering change (upgrade or downgrade) that has been requested but not yet applied. Present only while a change is scheduled; the current offering remains in productOffering until the scheduled date.
Show child attributes
scheduled AtstringdaterequiredThe date when the pending product offering change is scheduled to occur.
productobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
image UrlstringuriURL to the image representing the product offering.
activated AtstringdaterequiredThe date when the license was activated.
cancelled AtstringdateThe date when the license was canceled (if applicable).
paused AtstringdateThe date when the license was paused (if applicable).
metadataobject with string keysA set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format. Provided by API clients and returned as-is; the platform does not interpret the values.
Show child attributes
*string400The request was malformed or invalid.
application/json
The request was malformed or invalid.
The request was malformed or invalid.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
401Authentication is required to access this resource.
application/json
Authentication is required to access this resource.
Authentication is required to access this resource.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
404The requested resource was not found.
application/json
The requested resource was not found.
The requested resource was not found.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
500An unexpected error occurred on the server.
application/json
An unexpected error occurred on the server.
An unexpected error occurred on the server.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
Auth required
Send one of
X-Api-KeyBearer JWT+X-Api-Key
The API key is always required; the bearer token is optional.
curl https://apiv2.example.com/api/v2/licenses/LICENSE_ID \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'X-Api-Key: YOUR_API_KEY'fetch('https://apiv2.example.com/api/v2/licenses/LICENSE_ID', {
headers: {
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
'X-Api-Key': 'YOUR_API_KEY'
}
})requests.get(
"https://apiv2.example.com/api/v2/licenses/LICENSE_ID",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"X-Api-Key": "YOUR_API_KEY"
}
)package main
import (
"fmt"
"io"
"net/http"
)
func main() {
requestUrl := "https://apiv2.example.com/api/v2/licenses/LICENSE_ID"
req, _ := http.NewRequest("GET", requestUrl, nil)
req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Add("X-Api-Key", "YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}{
"licenseId": "c9d0e1f2-a3b4-5678-9012-def012345678",
"status": "PENDING",
"type": "PBX_USER_LEVEL",
"customer": {
"customerId": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"name": "John Doe"
},
"productOffering": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
},
"assignedTo": {
"type": "SUBSCRIPTION",
"subscriptionId": "c9a4d8d4-24c0-4164-ac8d-c77c4103b786",
"subscriptionDisplay": "+1 (555) 123-4567"
},
"details": {},
"pendingStatus": {
"status": "PENDING",
"scheduledAt": "2024-02-01"
},
"pendingProductOffering": {
"scheduledAt": "2024-02-01",
"product": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
}
},
"activatedAt": "2024-01-15",
"cancelledAt": "2024-06-30",
"pausedAt": "2024-03-01",
"metadata": {
"propertyName": "string"
}
}{
"message": "The request body is invalid.",
"code": "bad_request",
"details": [
{
"message": "Email format is invalid.",
"code": "invalid_email",
"property": "contact.email"
}
],
"hint": "Check the request payload and correct the highlighted fields."
}{
"message": "Authentication is required to access this resource.",
"code": "unauthorized",
"hint": "Provide a valid API key in the X-Api-Key header."
}{
"message": "The requested customer could not be found.",
"code": "not_found",
"hint": "Verify the customerId and try again."
}{
"message": "An unexpected error occurred on the server.",
"code": "internal_server_error",
"hint": "Retry the request later. If the problem persists, contact support."
}Change license product offering
/licenses/{licenseId}/product-offering-changeChange 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.
Path parameters
license IdstringrequiredThe unique identifier of the license.
Headers
X- Idempotency- Keystringmax length 256A 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.
BodyChangeLicenseProductOfferingRequestrequiredapplication/json
Request to change the product offering of a license.
product Offering IdstringrequiredThe unique identifier of the new product offering. Use the product-offering-options endpoint to discover which offerings the license can be changed to.
scheduled AtstringdateEarliest date to perform the change on. If the change schedule doesn't fit this date, the earliest date after this will be chosen.
metadataobject with string keysA set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format. Provided by API clients and returned as-is; the platform does not interpret the values.
Show child attributes
*stringResponses
200Product offering change scheduled.
application/json
Product offering change scheduled.
Product offering change scheduled.
objectLicense
A license represents a permission to use a software product with embedded customer and product offering details.
license IdstringrequiredThe unique identifier for the license.
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
typestringrequiredThe kind of feature the license unlocks. Most types cover business telephony (PBX) features,
such as PBX_USER_LEVEL (a PBX seat for one user), PBX_SOFTPHONE (softphone client),
PBX_ROUTE_IVR, PBX_ROUTE_GROUP, PBX_ROUTE_QUEUE, and PBX_ROUTE_VOICEMAIL (call routing
features), plus EXTERNAL_PRODUCT for licenses tied to products outside the telecom platform.
customerobjectrequiredCustomer information embedded in responses. Sensitive details require separate API calls with appropriate authorization.
Show child attributes
customer IdstringrequiredThe unique identifier for the customer. Use it with the customer endpoints to fetch full details.
namestringrequiredThe customer's display name — the company name for business customers or the person's full name for consumers.
product OfferingobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
net Price Minorintegerint64The configured price of the offering, in minor currency units.
currencystringrequiredThe ISO 4217 currency code the price is expressed in (e.g., "USD").
price Typeenum<string>requiredHow the price is charged.
- ONE_TIME: Charged once (e.g., a setup fee or hardware purchase).
- RECURRING: Charged every billing cycle (e.g., a monthly subscription fee).
values
ONE_TIMERECURRING
binding ContractobjectA commitment to keep the subscription for a fixed term, usually in exchange for a discount that runs for the length of the commitment.
Show child attributes
standard DiscountobjectA recurring amount that comes off the price when you price the order. The amount applies to one billing period, the same as the price, and it is not a total. For example, a discount of 500 for 3 periods takes 500 off each of the first three periods, and 1500 in all.
Show child attributes
custom Upfront PaymentobjectBilling cycles the customer pays for in advance when ordering, usually at a discount. Billing returns to the normal cycle once the prepaid cycles run out.
Show child attributes
billing CycleobjectHow often a recurring price is charged.
Show child attributes
currency Options Minorobject with string keysPer-currency price overrides keyed by three-letter ISO currency code (e.g. "USD", "SEK"). Each value is the cost in that currency, in minor currency units.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
product Offering Group IdstringrequiredUnique identifier for the product group.
namestringrequiredName of the product group in the requested locale.
descriptionstringDescription of the product group in the requested locale.
categoryenum<string>requiredA product category is a sub-type for grouping offerings of the same type.
Typically, product offerings of the same type with the same category allow for switching between them. For upgrading and downgrading subscriptions and licenses, we recommend using their corresponding endpoints though.
Categories are grouped by their product type:
SUBSCRIPTION categories:
PRODUCT_CATEGORY_SUBSCRIPTION_CELL- Mobile cellular subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_DATA_SIM- Data-only SIM subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_BROADBAND- Broadband internet subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_M2M- Machine-to-machine IoT subscriptionPRODUCT_CATEGORY_TRAVEL_ESIM- Travel eSIM subscription for international roaming
SUBSCRIPTION_ADDON categories:
PRODUCT_CATEGORY_EXTRA_DATA- Additional data package addonPRODUCT_CATEGORY_TRAVEL_ESIM_PACKAGE- Travel eSIM data package with country/region coveragePRODUCT_CATEGORY_ABROAD- International roaming addon
EXTERNAL_PRODUCT categories:
PRODUCT_CATEGORY_EXTERNAL_PRODUCT- External purchasable productPRODUCT_CATEGORY_EXTERNAL_PRODUCT_ADDON- Addon for external product
SIM_CARD categories:
PRODUCT_CATEGORY_SIM_CARD- Physical SIM or eSIM replacement for an existing subscription
values
PRODUCT_CATEGORY_SUBSCRIPTION_CELLPRODUCT_CATEGORY_SUBSCRIPTION_DATA_SIMPRODUCT_CATEGORY_SUBSCRIPTION_BROADBANDPRODUCT_CATEGORY_SUBSCRIPTION_M2MPRODUCT_CATEGORY_TRAVEL_ESIMPRODUCT_CATEGORY_EXTRA_DATAPRODUCT_CATEGORY_TRAVEL_ESIM_PACKAGEPRODUCT_CATEGORY_ABROADPRODUCT_CATEGORY_EXTERNAL_PRODUCTPRODUCT_CATEGORY_EXTERNAL_PRODUCT_ADDONPRODUCT_CATEGORY_SIM_CARD
internal DescriptionstringInternal description of the product group for operational use only.
image UrlstringuriURL to the image representing the product offering.
assigned ToobjectThe entity that a license is assigned to, with the display information for it. A license is always assigned to a subscription.
Show child attributes
typeenum<string>requiredThe type of assignment
values
SUBSCRIPTION
subscription IdstringrequiredThe unique identifier for the subscription
subscription DisplaystringDisplay name for the subscription (typically the phone number)
detailsobjectAdditional license details specific to certain license types.
Show child attributes
property NameanyAny additional properties, passed through as given.
pending StatusobjectA status change that has been requested but not yet applied, for example a scheduled cancellation. Present only while a status change is scheduled.
Show child attributes
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
scheduled AtstringdaterequiredThe date when the pending status change is scheduled to occur.
pending Product OfferingobjectA product offering change (upgrade or downgrade) that has been requested but not yet applied. Present only while a change is scheduled; the current offering remains in productOffering until the scheduled date.
Show child attributes
scheduled AtstringdaterequiredThe date when the pending product offering change is scheduled to occur.
productobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
image UrlstringuriURL to the image representing the product offering.
activated AtstringdaterequiredThe date when the license was activated.
cancelled AtstringdateThe date when the license was canceled (if applicable).
paused AtstringdateThe date when the license was paused (if applicable).
metadataobject with string keysA set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format. Provided by API clients and returned as-is; the platform does not interpret the values.
Show child attributes
*string400The request was malformed or invalid.
application/json
The request was malformed or invalid.
The request was malformed or invalid.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
401Authentication is required to access this resource.
application/json
Authentication is required to access this resource.
Authentication is required to access this resource.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
403Access to this resource is forbidden.
application/json
Access to this resource is forbidden.
Access to this resource is forbidden.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
404The requested resource was not found.
application/json
The requested resource was not found.
The requested resource was not found.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
409The request conflicts with the current state of the resource.
application/json
The request conflicts with the current state of the resource.
The request conflicts with the current state of the resource.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
500An unexpected error occurred on the server.
application/json
An unexpected error occurred on the server.
An unexpected error occurred on the server.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
Auth required
Send one of
X-Api-KeyBearer JWT+X-Api-Key
The API key is always required; the bearer token is optional.
curl https://apiv2.example.com/api/v2/licenses/LICENSE_ID/product-offering-change \
--request PUT \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"scheduledAt": "2024-02-01",
"metadata": {
"propertyName": "string"
}
}'fetch('https://apiv2.example.com/api/v2/licenses/LICENSE_ID/product-offering-change', {
method: 'PUT',
headers: {
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
productOfferingId: 'f47ac10b-58cc-4372-a567-0e02b2c3d479',
scheduledAt: '2024-02-01',
metadata: {
propertyName: 'string'
}
})
})requests.put(
"https://apiv2.example.com/api/v2/licenses/LICENSE_ID/product-offering-change",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"X-Api-Key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"scheduledAt": "2024-02-01",
"metadata": {
"propertyName": "string"
}
}
)package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
requestUrl := "https://apiv2.example.com/api/v2/licenses/LICENSE_ID/product-offering-change"
payload := strings.NewReader(`{
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"scheduledAt": "2024-02-01",
"metadata": {
"propertyName": "string"
}
}`)
req, _ := http.NewRequest("PUT", requestUrl, payload)
req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Add("X-Api-Key", "YOUR_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(res)
fmt.Println(string(body))
}{
"licenseId": "c9d0e1f2-a3b4-5678-9012-def012345678",
"status": "PENDING",
"type": "PBX_USER_LEVEL",
"customer": {
"customerId": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"name": "John Doe"
},
"productOffering": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
},
"assignedTo": {
"type": "SUBSCRIPTION",
"subscriptionId": "c9a4d8d4-24c0-4164-ac8d-c77c4103b786",
"subscriptionDisplay": "+1 (555) 123-4567"
},
"details": {},
"pendingStatus": {
"status": "PENDING",
"scheduledAt": "2024-02-01"
},
"pendingProductOffering": {
"scheduledAt": "2024-02-01",
"product": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
}
},
"activatedAt": "2024-01-15",
"cancelledAt": "2024-06-30",
"pausedAt": "2024-03-01",
"metadata": {
"propertyName": "string"
}
}{
"message": "The request body is invalid.",
"code": "bad_request",
"details": [
{
"message": "Email format is invalid.",
"code": "invalid_email",
"property": "contact.email"
}
],
"hint": "Check the request payload and correct the highlighted fields."
}{
"message": "Authentication is required to access this resource.",
"code": "unauthorized",
"hint": "Provide a valid API key in the X-Api-Key header."
}{
"message": "You do not have permission to perform this action.",
"code": "forbidden",
"hint": "Ensure your API key or user has the required permissions."
}{
"message": "The requested customer could not be found.",
"code": "not_found",
"hint": "Verify the customerId and try again."
}{
"message": "The request conflicts with the current state of the resource.",
"code": "conflict",
"hint": "Reload the resource to get its latest state before retrying."
}{
"message": "An unexpected error occurred on the server.",
"code": "internal_server_error",
"hint": "Retry the request later. If the problem persists, contact support."
}Get product offering options for license
/licenses/{licenseId}/product-offering-optionsGet all available product offerings a license can be changed to and when the change can take effect.
When the license can be changed typically depends on the license terms, billing cycle, and current product offering. As a rule of thumb (though not always), upgrades and lateral moves are immediate, while downgrades take effect at the next renewal date.
Path parameters
license IdstringrequiredThe unique identifier of the license.
Responses
200Available change options.
application/json
Available change options.
Available change options.
object
itemsarray of ProductOfferingOptionrequiredShow child attributes
product OfferingobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
image UrlstringuriURL to the image representing the product offering.
change Scheduleenum<string>requiredThe schedule type for when a product offering change can take effect.
- INSTANT: Change takes effect immediately
- FIRST_OF_NEXT_MONTH: Change takes effect on the first day of the next calendar month
- NEXT_RENEWAL_DAY: Change takes effect on the next renewal date
- NEXT_PAYMENT_DAY: Change takes effect at the end of the prepaid period, the next payment day
values
INSTANTFIRST_OF_NEXT_MONTHNEXT_RENEWAL_DAYNEXT_PAYMENT_DAY
change Schedule DatestringdaterequiredThe date when the product offering change can take effect.
400The request was malformed or invalid.
application/json
The request was malformed or invalid.
The request was malformed or invalid.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
401Authentication is required to access this resource.
application/json
Authentication is required to access this resource.
Authentication is required to access this resource.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
403Access to this resource is forbidden.
application/json
Access to this resource is forbidden.
Access to this resource is forbidden.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
404The requested resource was not found.
application/json
The requested resource was not found.
The requested resource was not found.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
500An unexpected error occurred on the server.
application/json
An unexpected error occurred on the server.
An unexpected error occurred on the server.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
Auth required
Send one of
X-Api-KeyBearer JWT+X-Api-Key
The API key is always required; the bearer token is optional.
curl https://apiv2.example.com/api/v2/licenses/LICENSE_ID/product-offering-options \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'X-Api-Key: YOUR_API_KEY'fetch('https://apiv2.example.com/api/v2/licenses/LICENSE_ID/product-offering-options', {
headers: {
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
'X-Api-Key': 'YOUR_API_KEY'
}
})requests.get(
"https://apiv2.example.com/api/v2/licenses/LICENSE_ID/product-offering-options",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"X-Api-Key": "YOUR_API_KEY"
}
)package main
import (
"fmt"
"io"
"net/http"
)
func main() {
requestUrl := "https://apiv2.example.com/api/v2/licenses/LICENSE_ID/product-offering-options"
req, _ := http.NewRequest("GET", requestUrl, nil)
req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Add("X-Api-Key", "YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}{
"items": [
{
"productOffering": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
},
"changeSchedule": "INSTANT",
"changeScheduleDate": "2024-02-01"
}
]
}{
"message": "The request body is invalid.",
"code": "bad_request",
"details": [
{
"message": "Email format is invalid.",
"code": "invalid_email",
"property": "contact.email"
}
],
"hint": "Check the request payload and correct the highlighted fields."
}{
"message": "Authentication is required to access this resource.",
"code": "unauthorized",
"hint": "Provide a valid API key in the X-Api-Key header."
}{
"message": "You do not have permission to perform this action.",
"code": "forbidden",
"hint": "Ensure your API key or user has the required permissions."
}{
"message": "The requested customer could not be found.",
"code": "not_found",
"hint": "Verify the customerId and try again."
}{
"message": "An unexpected error occurred on the server.",
"code": "internal_server_error",
"hint": "Retry the request later. If the problem persists, contact support."
}Cancel license
/licenses/{licenseId}/cancelCancel a license.
This endpoint allows cancelling a license with an optional scheduled date. The cancellation will take effect according to the specified schedule or immediately if no schedule is provided.
Path parameters
license IdstringrequiredThe unique identifier of the license.
Headers
X- Idempotency- Keystringmax length 256A 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.
BodyCancelLicenseRequestapplication/json
Request to cancel a license.
scheduled AtstringdateThe date when the license should be cancelled. If not provided, the license will be cancelled immediately or according to the default schedule.
metadataobject with string keysA set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format. Provided by API clients and returned as-is; the platform does not interpret the values.
Show child attributes
*stringResponses
200License cancellation scheduled successfully.
application/json
License cancellation scheduled successfully.
License cancellation scheduled successfully.
objectLicense
A license represents a permission to use a software product with embedded customer and product offering details.
license IdstringrequiredThe unique identifier for the license.
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
typestringrequiredThe kind of feature the license unlocks. Most types cover business telephony (PBX) features,
such as PBX_USER_LEVEL (a PBX seat for one user), PBX_SOFTPHONE (softphone client),
PBX_ROUTE_IVR, PBX_ROUTE_GROUP, PBX_ROUTE_QUEUE, and PBX_ROUTE_VOICEMAIL (call routing
features), plus EXTERNAL_PRODUCT for licenses tied to products outside the telecom platform.
customerobjectrequiredCustomer information embedded in responses. Sensitive details require separate API calls with appropriate authorization.
Show child attributes
customer IdstringrequiredThe unique identifier for the customer. Use it with the customer endpoints to fetch full details.
namestringrequiredThe customer's display name — the company name for business customers or the person's full name for consumers.
product OfferingobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
net Price Minorintegerint64The configured price of the offering, in minor currency units.
currencystringrequiredThe ISO 4217 currency code the price is expressed in (e.g., "USD").
price Typeenum<string>requiredHow the price is charged.
- ONE_TIME: Charged once (e.g., a setup fee or hardware purchase).
- RECURRING: Charged every billing cycle (e.g., a monthly subscription fee).
values
ONE_TIMERECURRING
binding ContractobjectA commitment to keep the subscription for a fixed term, usually in exchange for a discount that runs for the length of the commitment.
Show child attributes
standard DiscountobjectA recurring amount that comes off the price when you price the order. The amount applies to one billing period, the same as the price, and it is not a total. For example, a discount of 500 for 3 periods takes 500 off each of the first three periods, and 1500 in all.
Show child attributes
custom Upfront PaymentobjectBilling cycles the customer pays for in advance when ordering, usually at a discount. Billing returns to the normal cycle once the prepaid cycles run out.
Show child attributes
billing CycleobjectHow often a recurring price is charged.
Show child attributes
currency Options Minorobject with string keysPer-currency price overrides keyed by three-letter ISO currency code (e.g. "USD", "SEK"). Each value is the cost in that currency, in minor currency units.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
product Offering Group IdstringrequiredUnique identifier for the product group.
namestringrequiredName of the product group in the requested locale.
descriptionstringDescription of the product group in the requested locale.
categoryenum<string>requiredA product category is a sub-type for grouping offerings of the same type.
Typically, product offerings of the same type with the same category allow for switching between them. For upgrading and downgrading subscriptions and licenses, we recommend using their corresponding endpoints though.
Categories are grouped by their product type:
SUBSCRIPTION categories:
PRODUCT_CATEGORY_SUBSCRIPTION_CELL- Mobile cellular subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_DATA_SIM- Data-only SIM subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_BROADBAND- Broadband internet subscriptionPRODUCT_CATEGORY_SUBSCRIPTION_M2M- Machine-to-machine IoT subscriptionPRODUCT_CATEGORY_TRAVEL_ESIM- Travel eSIM subscription for international roaming
SUBSCRIPTION_ADDON categories:
PRODUCT_CATEGORY_EXTRA_DATA- Additional data package addonPRODUCT_CATEGORY_TRAVEL_ESIM_PACKAGE- Travel eSIM data package with country/region coveragePRODUCT_CATEGORY_ABROAD- International roaming addon
EXTERNAL_PRODUCT categories:
PRODUCT_CATEGORY_EXTERNAL_PRODUCT- External purchasable productPRODUCT_CATEGORY_EXTERNAL_PRODUCT_ADDON- Addon for external product
SIM_CARD categories:
PRODUCT_CATEGORY_SIM_CARD- Physical SIM or eSIM replacement for an existing subscription
values
PRODUCT_CATEGORY_SUBSCRIPTION_CELLPRODUCT_CATEGORY_SUBSCRIPTION_DATA_SIMPRODUCT_CATEGORY_SUBSCRIPTION_BROADBANDPRODUCT_CATEGORY_SUBSCRIPTION_M2MPRODUCT_CATEGORY_TRAVEL_ESIMPRODUCT_CATEGORY_EXTRA_DATAPRODUCT_CATEGORY_TRAVEL_ESIM_PACKAGEPRODUCT_CATEGORY_ABROADPRODUCT_CATEGORY_EXTERNAL_PRODUCTPRODUCT_CATEGORY_EXTERNAL_PRODUCT_ADDONPRODUCT_CATEGORY_SIM_CARD
internal DescriptionstringInternal description of the product group for operational use only.
image UrlstringuriURL to the image representing the product offering.
assigned ToobjectThe entity that a license is assigned to, with the display information for it. A license is always assigned to a subscription.
Show child attributes
typeenum<string>requiredThe type of assignment
values
SUBSCRIPTION
subscription IdstringrequiredThe unique identifier for the subscription
subscription DisplaystringDisplay name for the subscription (typically the phone number)
detailsobjectAdditional license details specific to certain license types.
Show child attributes
property NameanyAny additional properties, passed through as given.
pending StatusobjectA status change that has been requested but not yet applied, for example a scheduled cancellation. Present only while a status change is scheduled.
Show child attributes
statusenum<string>requiredCurrent stage of the license lifecycle.
- PENDING: Created but not yet activated
- ACTIVE: Active and billable; the licensed feature is available
- PAUSED: Temporarily stopped; the licensed feature is disabled
- CANCELLED: Permanently terminated
- BLOCKED: Disabled by the operator, typically for policy or payment reasons
values
PENDINGACTIVEPAUSEDCANCELLEDBLOCKED
scheduled AtstringdaterequiredThe date when the pending status change is scheduled to occur.
pending Product OfferingobjectA product offering change (upgrade or downgrade) that has been requested but not yet applied. Present only while a change is scheduled; the current offering remains in productOffering until the scheduled date.
Show child attributes
scheduled AtstringdaterequiredThe date when the pending product offering change is scheduled to occur.
productobjectrequiredEssential information about a product offering — what is being sold and at what price — without the full catalog details.
Show child attributes
product Offering IdstringrequiredThe unique identifier for the product offering. Use it with the product offering endpoints to fetch full details.
namestringrequiredThe customer-facing name of the product offering, suitable for display in checkout and account views.
priceobjectrequiredThe cost of a product offering, as configured in the catalog. A price is either one-time or recurring, and the priceType field tells you which. Amounts are integers in the minor units of the currency. For example, 2999 is $29.99 when the currency is USD.
Show child attributes
groupobjectA product group organizes related product offerings.
Show child attributes
image UrlstringuriURL to the image representing the product offering.
activated AtstringdaterequiredThe date when the license was activated.
cancelled AtstringdateThe date when the license was canceled (if applicable).
paused AtstringdateThe date when the license was paused (if applicable).
metadataobject with string keysA set of key-value pairs that can be attached to an object for storing additional information in a semi-structured format. Provided by API clients and returned as-is; the platform does not interpret the values.
Show child attributes
*string400The request was malformed or invalid.
application/json
The request was malformed or invalid.
The request was malformed or invalid.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
401Authentication is required to access this resource.
application/json
Authentication is required to access this resource.
Authentication is required to access this resource.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
403Access to this resource is forbidden.
application/json
Access to this resource is forbidden.
Access to this resource is forbidden.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
404The requested resource was not found.
application/json
The requested resource was not found.
The requested resource was not found.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
409The request conflicts with the current state of the resource.
application/json
The request conflicts with the current state of the resource.
The request conflicts with the current state of the resource.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
500An unexpected error occurred on the server.
application/json
An unexpected error occurred on the server.
An unexpected error occurred on the server.
objectError
The error body returned by every endpoint when a request fails. Use internalCode for programmatic
handling, show message to a human, and check details for field-level problems when the request
was invalid.
messagestringrequiredA human-readable message providing more details about the error.
codestringdeprecatedrequiredDeprecated. Use internalCode.
This field mixes three unrelated codes and does not say which one you have: a code that we publish, an operator's own code when the failure came from an operator, or the request status when there is neither. Do not branch on it.
internal CodestringNames the condition that failed, from our own registry. It is independent of which system reported the failure and of the HTTP status, and it is stable across releases. Branch on this field. An unexpected failure on our side can carry no code. Then use the HTTP status.
detailsarray of objectAdditional details about the error, typically one entry per invalid field on validation failures.
Show child attributes
messagestringrequiredA human-readable message providing more details about the error.
codestringrequiredA machine-readable code for the specific detail.
propertystringThe property or field related to the error. May be nested using dot notation (e.g., "billing.email").
suggestionone ofA suggested value for the particular property.
For example, this may be set when validating an address with an alias, suggesting the expected value by the operator.
A string, number, boolean, object, or array value. The concrete type depends on the field the value is returned for.
Show child attributes
hintstringA hint to help resolve the error.
trace IdstringIdentifies the trace this request produced. Quote it when reporting a failure — it is what lets us find the request among everything else the platform served.
span IdstringThe span within the trace that failed.
Auth required
Send one of
X-Api-KeyBearer JWT+X-Api-Key
The API key is always required; the bearer token is optional.
curl https://apiv2.example.com/api/v2/licenses/LICENSE_ID/cancel \
--request POST \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"scheduledAt": "2024-03-01",
"metadata": {
"propertyName": "string"
}
}'fetch('https://apiv2.example.com/api/v2/licenses/LICENSE_ID/cancel', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_ACCESS_TOKEN',
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
scheduledAt: '2024-03-01',
metadata: {
propertyName: 'string'
}
})
})requests.post(
"https://apiv2.example.com/api/v2/licenses/LICENSE_ID/cancel",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"X-Api-Key": "YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"scheduledAt": "2024-03-01",
"metadata": {
"propertyName": "string"
}
}
)package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
requestUrl := "https://apiv2.example.com/api/v2/licenses/LICENSE_ID/cancel"
payload := strings.NewReader(`{
"scheduledAt": "2024-03-01",
"metadata": {
"propertyName": "string"
}
}`)
req, _ := http.NewRequest("POST", requestUrl, payload)
req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Add("X-Api-Key", "YOUR_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(res)
fmt.Println(string(body))
}{
"licenseId": "c9d0e1f2-a3b4-5678-9012-def012345678",
"status": "PENDING",
"type": "PBX_USER_LEVEL",
"customer": {
"customerId": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"name": "John Doe"
},
"productOffering": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
},
"assignedTo": {
"type": "SUBSCRIPTION",
"subscriptionId": "c9a4d8d4-24c0-4164-ac8d-c77c4103b786",
"subscriptionDisplay": "+1 (555) 123-4567"
},
"details": {},
"pendingStatus": {
"status": "PENDING",
"scheduledAt": "2024-02-01"
},
"pendingProductOffering": {
"scheduledAt": "2024-02-01",
"product": {
"productOfferingId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Mobile Unlimited",
"price": {
"netPriceMinor": 2999,
"currency": "USD",
"priceType": "ONE_TIME",
"bindingContract": {
"duration": {
"unit": "MONTHS",
"value": 3
},
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"standardDiscount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
},
"customUpfrontPayment": {
"billingCycles": 3,
"discount": {
"amountMinor": 500,
"duration": {
"unit": "MONTHS",
"value": 3
},
"source": "STANDARD",
"invoicingDescription": "Campaign discount"
}
},
"billingCycle": {
"period": "MONTHLY",
"interval": 1
},
"currencyOptionsMinor": {
"propertyName": 1
}
},
"group": {
"productOfferingGroupId": "mobile-plans",
"name": "Mobile Plans",
"description": "Bundled cell subscriptions with unlimited calls and SMS with ILD enabled.",
"category": "PRODUCT_CATEGORY_SUBSCRIPTION_CELL",
"internalDescription": "Core mobile offerings targeting consumer and business segments"
},
"imageUrl": "https://cdn.example.com/images/mobile-basic.png"
}
},
"activatedAt": "2024-01-15",
"cancelledAt": "2024-06-30",
"pausedAt": "2024-03-01",
"metadata": {
"propertyName": "string"
}
}{
"message": "The request body is invalid.",
"code": "bad_request",
"details": [
{
"message": "Email format is invalid.",
"code": "invalid_email",
"property": "contact.email"
}
],
"hint": "Check the request payload and correct the highlighted fields."
}{
"message": "Authentication is required to access this resource.",
"code": "unauthorized",
"hint": "Provide a valid API key in the X-Api-Key header."
}{
"message": "You do not have permission to perform this action.",
"code": "forbidden",
"hint": "Ensure your API key or user has the required permissions."
}{
"message": "The requested customer could not be found.",
"code": "not_found",
"hint": "Verify the customerId and try again."
}{
"message": "The request conflicts with the current state of the resource.",
"code": "conflict",
"hint": "Reload the resource to get its latest state before retrying."
}{
"message": "An unexpected error occurred on the server.",
"code": "internal_server_error",
"hint": "Retry the request later. If the problem persists, contact support."
}