Skip to content
Get started

Retrieve QoS profiles

POST/qualityondemand/retrieve-qos-profiles

Returns all QoS Profiles that match the given criteria. NOTES:

  • The access token may be either a 2-legged or 3-legged access token.
  • If the access token is 3-legged, all returned QoS Profiles will be available to the subject (device) associated with the access token.
  • If the access token is 2-legged and a device filter is provided, all returned QoS Profiles will be available to that device. If multiple device identifiers are provided within the device property, only QoS Profiles available to the device identifier chosen by the implementation will be returned, even if the identifiers do not match the same device. API provider does not perform any logic to validate/correlate that the indicated device identifiers match the same device. No error should be returned if the identifiers are otherwise valid to prevent API consumers correlating different identifiers with a given end user.
  • This call uses the POST method instead of GET to comply with the CAMARA Commonalities guidelines for sending sensitive or complex data in API calls. Since the device field may contain personally identifiable information, it should not be sent via GET. Additionally, this call may include complex data structures. CAMARA API Design Guidelines
Header ParametersExpand Collapse
"x-correlator": optional string

Value for the x-correlator

Body ParametersJSONExpand Collapse
device: optional object { ipv4Address, ipv6Address, networkAccessIdentifier, phoneNumber }

End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.

The developer can choose to provide the below specified device identifiers:

  • ipv4Address
  • ipv6Address
  • phoneNumber NOTE1: the network operator might support only a subset of these options. The API consumer can provide multiple identifiers to be compatible across different operators. In this case the identifiers MUST belong to the same device. NOTE2: as for this Commonalities release, we are enforcing that the networkAccessIdentifier is only part of the schema for future-proofing, and CAMARA does not currently allow its use. After the CAMARA meta-release work is concluded and the relevant issues are resolved, its use will need to be explicitly documented in the guidelines.
ipv4Address: optional object { privateAddress, publicAddress, publicPort }

The device should be identified by either the public (observed) IP address and port as seen by the application server, or the private (local) and any public (observed) IP addresses in use by the device (this information can be obtained by various means, for example from some DNS servers).

If the allocated and observed IP addresses are the same (i.e. NAT is not in use) then the same address should be specified for both publicAddress and privateAddress.

If NAT64 is in use, the device should be identified by its publicAddress and publicPort, or separately by its allocated IPv6 address (field ipv6Address of the Device object)

In all cases, publicAddress must be specified, along with at least one of either privateAddress or publicPort, dependent upon which is known. In general, mobile devices cannot be identified by their public IPv4 address alone.

privateAddress: optional string

A single IPv4 address with no subnet mask

formatipv4
publicAddress: optional string

A single IPv4 address with no subnet mask

formatipv4
publicPort: optional number

TCP or UDP port number

minimum0
maximum65535
ipv6Address: optional string

The device should be identified by the observed IPv6 address, or by any single IPv6 address from within the subnet allocated to the device (e.g. adding ::0 to the /64 prefix).

The session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.

formatipv6
networkAccessIdentifier: optional string

A public identifier addressing a subscription in a mobile network. In 3GPP terminology, it corresponds to the GPSI formatted with the External Identifier ({Local Identifier}@{Domain Identifier}). Unlike the telephone number, the network access identifier is not subjected to portability ruling in force, and is individually managed by each operator.

phoneNumber: optional string

A public identifier addressing a telephone subscription. In mobile networks it corresponds to the MSISDN (Mobile Station International Subscriber Directory Number). In order to be globally unique it has to be formatted in international format, according to E.164 standard, prefixed with ’+’.

name: optional string

A unique name for identifying a specific QoS profile. This may follow different formats depending on the service providers implementation. Some options addresses:

  • A UUID style string
  • Support for predefined profile names like QOS_E, QOS_S, QOS_M, and QOS_L
  • A searchable descriptive name
minLength3
maxLength256
formatstring
status: optional QosProfileStatus

The current status of the QoS Profile

  • ACTIVE- QoS Profile is available to be used
  • INACTIVE- QoS Profile is not currently available to be deployed
  • DEPRECATED- QoS profile is actively being used in a QoD session, but can not be deployed in new QoD sessions
One of the following:
"ACTIVE"
"INACTIVE"
"DEPRECATED"
ReturnsExpand Collapse
name: string

A unique name for identifying a specific QoS profile. This may follow different formats depending on the service providers implementation. Some options addresses:

  • A UUID style string
  • Support for predefined profile names like QOS_E, QOS_S, QOS_M, and QOS_L
  • A searchable descriptive name
minLength3
maxLength256
formatstring

The current status of the QoS Profile

  • ACTIVE- QoS Profile is available to be used
  • INACTIVE- QoS Profile is not currently available to be deployed
  • DEPRECATED- QoS profile is actively being used in a QoD session, but can not be deployed in new QoD sessions
One of the following:
"ACTIVE"
"INACTIVE"
"DEPRECATED"
countryAvailability: optional array of object { countryName, networks }

A list of countries, and optionally networks, for which the API provider makes the profile available

countryName: string

The two letter ISO 3166-2 country code for the country in which the QoS profile is available in at least one network

networks: optional array of string

A list of networks within the country for which the QoS profile is available from the API provider

description: optional string

A description of the QoS profile.

jitter: optional Duration { unit, value }

Specification of duration

unit: optional "Days" or "Hours" or "Minutes" or 4 more

Units of time

One of the following:
"Days"
"Hours"
"Minutes"
"Seconds"
"Milliseconds"
"Microseconds"
"Nanoseconds"
value: optional number

Quantity of duration

formatint32
minimum1
l4sQueueType: optional "non-l4s-queue" or "l4s-queue" or "mixed-queue"

NOTE: l4sQueueType is experimental and could change or be removed in a future release.

Specifies the type of queue for L4S (Low Latency, Low Loss, Scalable Throughput) traffic management. L4S is an advanced queue management approach designed to provide ultra-low latency and high throughput for internet traffic, particularly beneficial for interactive applications such as gaming, video conferencing, and virtual reality.

Queue Type Descriptions:

  • non-l4s-queue: A traditional queue used for legacy internet traffic that does not utilize L4S enhancements. It provides standard latency and throughput levels.

  • l4s-queue: A dedicated queue optimized for L4S traffic, delivering ultra-low latency, low loss, and scalable throughput to support latency-sensitive applications.

  • mixed-queue: A shared queue that can handle both L4S and traditional traffic, offering a balance between ultra-low latency for L4S flows and compatibility with non-L4S flows.

One of the following:
"non-l4s-queue"
"l4s-queue"
"mixed-queue"
maxDownstreamBurstRate: optional Rate { unit, value }

Specification of rate

unit: optional "bps" or "kbps" or "Mbps" or 2 more

Units of rate

One of the following:
"bps"
"kbps"
"Mbps"
"Gbps"
"Tbps"
value: optional number

Quantity of rate

formatint32
minimum0
maximum1024
maxDownstreamRate: optional Rate { unit, value }

Specification of rate

unit: optional "bps" or "kbps" or "Mbps" or 2 more

Units of rate

One of the following:
"bps"
"kbps"
"Mbps"
"Gbps"
"Tbps"
value: optional number

Quantity of rate

formatint32
minimum0
maximum1024
maxDuration: optional Duration { unit, value }

Specification of duration

unit: optional "Days" or "Hours" or "Minutes" or 4 more

Units of time

One of the following:
"Days"
"Hours"
"Minutes"
"Seconds"
"Milliseconds"
"Microseconds"
"Nanoseconds"
value: optional number

Quantity of duration

formatint32
minimum1
maxUpstreamBurstRate: optional Rate { unit, value }

Specification of rate

unit: optional "bps" or "kbps" or "Mbps" or 2 more

Units of rate

One of the following:
"bps"
"kbps"
"Mbps"
"Gbps"
"Tbps"
value: optional number

Quantity of rate

formatint32
minimum0
maximum1024
maxUpstreamRate: optional Rate { unit, value }

Specification of rate

unit: optional "bps" or "kbps" or "Mbps" or 2 more

Units of rate

One of the following:
"bps"
"kbps"
"Mbps"
"Gbps"
"Tbps"
value: optional number

Quantity of rate

formatint32
minimum0
maximum1024
minDuration: optional Duration { unit, value }

Specification of duration

unit: optional "Days" or "Hours" or "Minutes" or 4 more

Units of time

One of the following:
"Days"
"Hours"
"Minutes"
"Seconds"
"Milliseconds"
"Microseconds"
"Nanoseconds"
value: optional number

Quantity of duration

formatint32
minimum1
packetDelayBudget: optional Duration { unit, value }

Specification of duration

unit: optional "Days" or "Hours" or "Minutes" or 4 more

Units of time

One of the following:
"Days"
"Hours"
"Minutes"
"Seconds"
"Milliseconds"
"Microseconds"
"Nanoseconds"
value: optional number

Quantity of duration

formatint32
minimum1
packetErrorLossRate: optional number

This field specifies the acceptable level of data loss during transmission. The value is an exponent of 10, so a value of 3 means that up to 10⁻³, or 0.1%, of the data packets may be lost. This setting is part of a broader system that categorizes different types of network traffic (like phone calls, video streams, or data transfers) to ensure they perform reliably on the network.

formatint32
minimum1
maximum10
priority: optional number

Priority levels allow efficient resource allocation and ensure optimal performance for various services in each technology, with the highest priority traffic receiving preferential treatment. The lower value the higher priority. Not all access networks use the same priority range, so this priority will be scaled to the access network’s priority range.

formatint32
minimum1
maximum100
serviceClass: optional "microsoft_voice" or "microsoft_audio_video" or "real_time_interactive" or 6 more

NOTE: serviceClass is experimental and could change or be removed in a future release.

The name of a Service Class, representing a QoS Profile designed to provide optimized behavior for a specific application type. While DSCP values are commonly associated with Service Classes, their use may vary across network segments and may not be applied throughout the entire end-to-end QoS session. This aligns with the serviceClass concept used in HomeDevicesQoQ for consistent terminology.

Service classes define specific QoS behaviors that map to DSCP (Differentiated Services Code Point) values or Microsoft QoS traffic types.

The supported mappings are:

  1. Values aligned with the RFC4594 guidelines for differentiated traffic classes.
  2. Microsoft QOS_TRAFFIC_TYPE values for Windows developers.

Supported Service Classes:

Service Class NameDSCP NameDSCP value (decimal)DCSP value (binary)Microsoft ValueApplication Examples
Microsoft VoiceCS7561110004,5Microsoft QOSTrafficTypeVoice and QOSTrafficTypeControl
Microsoft Audio/VideoCS5401010002,3Microsoft QOSTrafficTypeExcellentEffort and QOSTrafficTypeAudioVideo
Real-Time InteractiveCS432100000Video conferencing and Interactive gaming
Multimedia StreamingAF3126011010Streaming video and audio on demand
Broadcast VideoCS324011000Broadcast TV & live events
Low-Latency DataAF2118010010Client/server transactions Web-based ordering
High-Throughput DataAF1110001010Store and forward applications
Low-Priority DataCS180010001Any flow that has no BW assurance - also:
Microsoft QOSTrafficTypeBackground
StandardDF(CS0)00000000Undifferentiated applications - also:
Microsoft QOSTrafficTypeBestEffort
One of the following:
"microsoft_voice"
"microsoft_audio_video"
"real_time_interactive"
"multimedia_streaming"
"broadcast_video"
"low_latency_data"
"high_throughput_data"
"low_priority_data"
"standard"
targetMinDownstreamRate: optional Rate { unit, value }

Specification of rate

unit: optional "bps" or "kbps" or "Mbps" or 2 more

Units of rate

One of the following:
"bps"
"kbps"
"Mbps"
"Gbps"
"Tbps"
value: optional number

Quantity of rate

formatint32
minimum0
maximum1024
targetMinUpstreamRate: optional Rate { unit, value }

Specification of rate

unit: optional "bps" or "kbps" or "Mbps" or 2 more

Units of rate

One of the following:
"bps"
"kbps"
"Mbps"
"Gbps"
"Tbps"
value: optional number

Quantity of rate

formatint32
minimum0
maximum1024

Retrieve QoS profiles

curl https://api.example.com/camara/qualityondemand/retrieve-qos-profiles \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer $CAMARA_BEARER_TOKEN" \
    -d '{
          "name": "voice"
        }'
[
  {
    "name": "voice",
    "description": "QoS profile for high-quality interactive voice",
    "status": "ACTIVE",
    "targetMinUpstreamRate": {
      "value": 100,
      "unit": "kbps"
    },
    "targetMinDownstreamRate": {
      "value": 100,
      "unit": "kbps"
    },
    "minDuration": {
      "value": 1,
      "unit": "Days"
    },
    "maxDuration": {
      "value": 10,
      "unit": "Days"
    },
    "priority": 10,
    "packetDelayBudget": {
      "value": 50,
      "unit": "Milliseconds"
    },
    "jitter": {
      "value": 5,
      "unit": "Milliseconds"
    },
    "packetErrorLossRate": 3,
    "l4sQueueType": "non-l4s-queue"
  }
]
{
  "status": 400,
  "code": "INVALID_ARGUMENT",
  "message": "Client specified an invalid argument, request body or query param."
}
{
  "status": 400,
  "code": "OUT_OF_RANGE",
  "message": "Client specified an invalid range."
}
{
  "status": 401,
  "code": "UNAUTHENTICATED",
  "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required."
}
{
  "status": 403,
  "code": "PERMISSION_DENIED",
  "message": "Client does not have sufficient permissions to perform this action."
}
{
  "status": 404,
  "code": "NOT_FOUND",
  "message": "The specified resource is not found."
}
{
  "status": 404,
  "code": "IDENTIFIER_NOT_FOUND",
  "message": "Device identifier not found."
}
{
  "status": 422,
  "code": "SERVICE_NOT_APPLICABLE",
  "message": "The service is not available for the provided identifier."
}
{
  "status": 422,
  "code": "UNSUPPORTED_IDENTIFIER",
  "message": "The identifier provided is not supported."
}
{
  "status": 422,
  "code": "UNNECESSARY_IDENTIFIER",
  "message": "The device is already identified by the access token."
}
{
  "status": 429,
  "code": "QUOTA_EXCEEDED",
  "message": "Out of resource quota."
}
{
  "status": 429,
  "code": "TOO_MANY_REQUESTS",
  "message": "Rate limit reached."
}
Returns Examples
[
  {
    "name": "voice",
    "description": "QoS profile for high-quality interactive voice",
    "status": "ACTIVE",
    "targetMinUpstreamRate": {
      "value": 100,
      "unit": "kbps"
    },
    "targetMinDownstreamRate": {
      "value": 100,
      "unit": "kbps"
    },
    "minDuration": {
      "value": 1,
      "unit": "Days"
    },
    "maxDuration": {
      "value": 10,
      "unit": "Days"
    },
    "priority": 10,
    "packetDelayBudget": {
      "value": 50,
      "unit": "Milliseconds"
    },
    "jitter": {
      "value": 5,
      "unit": "Milliseconds"
    },
    "packetErrorLossRate": 3,
    "l4sQueueType": "non-l4s-queue"
  }
]
{
  "status": 400,
  "code": "INVALID_ARGUMENT",
  "message": "Client specified an invalid argument, request body or query param."
}
{
  "status": 400,
  "code": "OUT_OF_RANGE",
  "message": "Client specified an invalid range."
}
{
  "status": 401,
  "code": "UNAUTHENTICATED",
  "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required."
}
{
  "status": 403,
  "code": "PERMISSION_DENIED",
  "message": "Client does not have sufficient permissions to perform this action."
}
{
  "status": 404,
  "code": "NOT_FOUND",
  "message": "The specified resource is not found."
}
{
  "status": 404,
  "code": "IDENTIFIER_NOT_FOUND",
  "message": "Device identifier not found."
}
{
  "status": 422,
  "code": "SERVICE_NOT_APPLICABLE",
  "message": "The service is not available for the provided identifier."
}
{
  "status": 422,
  "code": "UNSUPPORTED_IDENTIFIER",
  "message": "The identifier provided is not supported."
}
{
  "status": 422,
  "code": "UNNECESSARY_IDENTIFIER",
  "message": "The device is already identified by the access token."
}
{
  "status": 429,
  "code": "QUOTA_EXCEEDED",
  "message": "Out of resource quota."
}
{
  "status": 429,
  "code": "TOO_MANY_REQUESTS",
  "message": "Rate limit reached."
}