Global System for Mobile Communications QoS Sessions API

Manage QoS sessions

Documentation

📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/CallForwardingSignal/r1.3/code/API_definitions/call-forwarding-signal.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/DeviceStatus/r1.3/code/API_definitions/device-roaming-status.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/KnowYourCustomer/r1.3/code/API_definitions/kyc-match.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/NumberVerification/r1.3/code/API_definitions/number-verification.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/OTPValidation/r1.2/code/API_definitions/one-time-password-sms.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/SimSwap/r1.3/code/API_definitions/sim-swap.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/DeviceLocation/r1.2/code/API_definitions/location-verification.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/DeviceLocation/r1.2/code/API_definitions/geofencing-subscriptions.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/DeviceLocation/r1.2/code/API_definitions/location-retrieval.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/PopulationDensityData/r1.2/code/API_definitions/population-density-data.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/QualityOnDemand/r1.2/code/API_definitions/quality-on-demand.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/ConnectivityInsights/r1.2/code/API_definitions/connectivity-insights.yaml&nocors
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/ConnectivityInsights/r1.2/code/API_definitions/connectivity-insights-subscriptions.yaml&nocors
📖
Documentation
https://github.com/camaraproject/ShortMessageService/blob/6fd0ff0e79a3e26244e5f026c8e40260b0a47494/documentation/API_documentation/Text_SMS_User_Story.md
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/HomeDevicesQoD/r1.2/code/API_definitions/home-devices-qod.yaml&nocors
📖
Documentation
https://github.com/camaraproject/SimpleEdgeDiscovery/blob/main/documentation/API_documentation/SimpleEdgeDiscovery_User_Story.md
📖
Documentation
https://github.com/camaraproject/EdgeCloud/blob/main/documentation/API_documentation/Simple_Edge_Discovery_API_Readiness_Checklist.md
📖
Documentation
https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/camaraproject/CarrierBillingCheckOut/r1.3/code/API_definitions/carrier-billing.yaml&nocors

Specifications

SDKs

Other Resources

🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Call Forwarding Signal API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/35240-bd9acd12-585e-4c28-ba61-6ee7a91f55d0
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Device Roaming Status/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/wgatuug/gsma-camara-project-device-roaming-status
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Know Your Customer Match/bruno.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/none
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Number Verification/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/lvrdn91/gsma-camara-project-number-verification
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project One Time Password SMS/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/lm2bnug/gsma-camara-project-one-time-password-sms
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project SIM Swap API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/1ohhvf0/gsma-camara-project-sim-swap-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project SIM Swap Notification Subscription API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/t35i4sr/gsma-camara-project-sms-delivery-notification-subscription-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Device Location Verification API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/35240-23a17d7b-07a0-405e-896b-6c4f3f4cc8c6
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Device Geofencing Subscriptions API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/lddca5b/gsma-camara-project-device-geofencing-subscriptions-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Device Location Retrieval API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/2un0g1u/gsma-camara-project-device-location-retrieval-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Population Density Data/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/lwfh4b3/gsma-camara-project-population-density-data
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Quality on Demand API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/35240-a139bda5-4882-455b-83a2-2e3ea7bcb16f
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Connectivity Insights API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/0jyjgn6/gsma-camara-project-connectivity-insights-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Connectivity Insights Subscriptions API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/odjfucf/gsma-camara-project-connectivity-insights-subscriptions-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Application Profiles API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/ryw6hox/gsma-camara-project-application-profiles-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project SMS API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/im7p4j1/gsma-camara-project-sms-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project SMS Delivery Notification Subscription API/bruno.json
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Home Devices QoD/bruno.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/nhttps://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/dedffqb/gsma-camara-project-home-devices-qodone
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Simple Edge Discovery/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/5ze8wkz/gsma-camara-project-simple-edge-discovery
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Traffic Influence API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/1tmj16r/gsma-camara-project-traffic-influence-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Application Endpoint Discovery API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/tomzja8/gsma-camara-project-application-endpoint-discovery-api
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Edge Application Management API/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/35240-981545ec-b150-47da-a448-59c92b127a05
🔗
BrunoCollection
https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/bruno/GSMA Camara Project Carrier Billing/bruno.json
🔗
PostmanCollection
https://www.postman.com/api-evangelist/global-system-for-mobile-communications-gsma/collection/0m2sok6/gsma-camara-project-carrier-billing

OpenAPI Specification

global-system-for-mobile-communications-qos-sessions-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Global System for Mobile Communications GSMA Camara Project Endpoint Discovery Application QoS Sessions API
  version: 0.1.0-wip
  description: The Application Discovery API extends beyond the capabilities of the Simple Edge Discovery API by not only locating the nearest Edge Cloud Zone but also directly linking to the application endpoints within those Edge Cloud Zones.
  contact:
    email: sp-edc@lists.camaraproject.org
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: '{apiRoot}/{basePath}'
  variables:
    apiRoot:
      default: https://localhost:443
      description: API root.
    basePath:
      default: application-endpoint-discovery/vwip
      description: Base path for the Application Endpoint Discovery.
tags:
- name: QoS Sessions
  description: Manage QoS sessions
paths:
  /sessions:
    post:
      tags:
      - QoS Sessions
      summary: Global System for Mobile Communications Creates a new session
      description: "Create QoS Session to manage latency/throughput priorities\n\nIf the qosStatus in the API response is \"AVAILABLE\" and a notification callback is provided the client will receive in addition to the response a\n`QOS_STATUS_CHANGED` event notification with `qosStatus` as `AVAILABLE`.\n\nIf the `qosStatus` in the API response is `REQUESTED`, the client will receive either\n- a `QOS_STATUS_CHANGED` event notification with `qosStatus` as `AVAILABLE` after the network notifies that it has created the requested session, or\n- a `QOS_STATUS_CHANGED` event notification with `qosStatus` as `UNAVAILABLE` and `statusInfo` as `NETWORK_TERMINATED` after the network notifies that it has failed to provide the requested session.\n\nA `QOS_STATUS_CHANGED` event notification with `qosStatus` as `UNAVAILABLE` will also be send if the network terminates the session before the requested duration expired\n\n**NOTES:**\n- In case of a `QOS_STATUS_CHANGED` event with `qosStatus` as `UNAVAILABLE` and `statusInfo` as `NETWORK_TERMINATED` the resources of the QoS session are not directly released, but will get deleted automatically at earliest 360 seconds after the event.\n\n  This behavior allows clients which are not receiving notification events but are polling to get the session information with the `qosStatus` `UNAVAILABLE` and `statusInfo` `NETWORK_TERMINATED`. Before a client can attempt to create a new QoD session for the same device and flow period they must release the session resources with an explicit `delete` operation if not yet automatically deleted.\n- The access token may be either 2-legged or 3-legged.\n  - If a 3-legged access token which is associated with a device is used, it is recommended NOT to include the `device` parameter in the request (see \"Handling of device information\" within the API description for details).\n  - If a 2-legged access token is used, the device parameter must be provided and identify a device.\n"
      operationId: createSession
      security:
      - openId:
        - quality-on-demand:sessions:create
      parameters:
      - $ref: '#/components/parameters/x-correlator'
      requestBody:
        description: Parameters to create a new session
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSession'
        required: true
      callbacks:
        notifications:
          '{$request.body#/sink}':
            post:
              tags:
              - Session notifications callback
              summary: Session notifications callback
              description: 'Important: this endpoint is to be implemented by the API consumer.

                The QoD server will call this endpoint whenever any QoS session change (e.g. network termination) related event occurs.

                Currently only QOS_STATUS_CHANGED event is defined.

                '
              operationId: postNotification
              parameters:
              - $ref: '#/components/parameters/x-correlator'
              requestBody:
                required: true
                content:
                  application/cloudevents+json:
                    schema:
                      $ref: '#/components/schemas/CloudEvent'
                    examples:
                      QOS_STATUS_CHANGED_EXAMPLE:
                        $ref: '#/components/examples/QOS_STATUS_CHANGED_EXAMPLE'
              responses:
                '204':
                  description: Successful notification
                  headers:
                    x-correlator:
                      $ref: '#/components/headers/x-correlator'
                '400':
                  $ref: '#/components/responses/Generic400'
                '401':
                  $ref: '#/components/responses/Generic401'
                '403':
                  $ref: '#/components/responses/Generic403'
                '410':
                  $ref: '#/components/responses/Generic410'
                '500':
                  $ref: '#/components/responses/Generic500'
                '503':
                  $ref: '#/components/responses/Generic503'
              security:
              - {}
              - notificationsBearerAuth: []
      responses:
        '201':
          description: Session created
          headers:
            x-correlator:
              $ref: '#/components/headers/x-correlator'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionInfo'
        '400':
          $ref: '#/components/responses/CreateSessionBadRequest400'
        '401':
          $ref: '#/components/responses/Generic401'
        '403':
          $ref: '#/components/responses/Generic403'
        '404':
          $ref: '#/components/responses/GenericDevice404'
        '409':
          $ref: '#/components/responses/SessionInConflict409'
        '422':
          $ref: '#/components/responses/Generic422'
        '429':
          $ref: '#/components/responses/Generic429'
        '500':
          $ref: '#/components/responses/Generic500'
        '503':
          $ref: '#/components/responses/Generic503'
  /sessions/{sessionId}:
    get:
      tags:
      - QoS Sessions
      summary: Global System for Mobile Communications Get QoS session information
      description: 'Querying for QoS session resource information details


        **NOTES:**

        - The access token may be either 2-legged or 3-legged.

        - If a 3-legged access token is used, the end user (and device) associated with the session must also be associated with the access token.

        - The session must have been created by the same API client given in the access token

        '
      operationId: getSession
      security:
      - openId:
        - quality-on-demand:sessions:read
      parameters:
      - name: sessionId
        in: path
        description: Session ID that was obtained from the createSession operation
        required: true
        schema:
          $ref: '#/components/schemas/SessionId'
      - $ref: '#/components/parameters/x-correlator'
      responses:
        '200':
          description: Contains information about active session
          headers:
            x-correlator:
              $ref: '#/components/headers/x-correlator'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionInfo'
              examples:
                SESSION_AVAILABLE:
                  $ref: '#/components/examples/SESSION_AVAILABLE_EXAMPLE'
                SESSION_UNAVAILABLE:
                  $ref: '#/components/examples/SESSION_UNAVAILABLE_EXAMPLE'
        '400':
          $ref: '#/components/responses/Generic400'
        '401':
          $ref: '#/components/responses/Generic401'
        '403':
          $ref: '#/components/responses/Generic403'
        '404':
          $ref: '#/components/responses/Generic404'
        '429':
          $ref: '#/components/responses/Generic429'
        '500':
          $ref: '#/components/responses/Generic500'
        '503':
          $ref: '#/components/responses/Generic503'
    delete:
      tags:
      - QoS Sessions
      summary: Global System for Mobile Communications Delete a QoS session
      description: 'Release resources related to QoS session


        If the notification callback is provided and the `qosStatus` of the session was `AVAILABLE` the client will receive in addition to the response a `QOS_STATUS_CHANGED` event with

        - `qosStatus` as `UNAVAILABLE` and

        - `statusInfo` as `DELETE_REQUESTED`

        There will be no notification event if the `qosStatus` was already `UNAVAILABLE`.


        **NOTES:**

        - The access token may be either 2-legged or 3-legged.

        - If a 3-legged access token is used, the end user (and device) associated with the session must also be associated with the access token.

        - The session must must have been created by the same API client given in the access token

        '
      operationId: deleteSession
      security:
      - openId:
        - quality-on-demand:sessions:delete
      parameters:
      - name: sessionId
        in: path
        description: Session ID that was obtained from the createSession operation
        required: true
        schema:
          $ref: '#/components/schemas/SessionId'
      - $ref: '#/components/parameters/x-correlator'
      responses:
        '204':
          description: Session deleted
          headers:
            x-correlator:
              $ref: '#/components/headers/x-correlator'
        '400':
          $ref: '#/components/responses/Generic400'
        '401':
          $ref: '#/components/responses/Generic401'
        '403':
          $ref: '#/components/responses/Generic403'
        '404':
          $ref: '#/components/responses/Generic404'
        '429':
          $ref: '#/components/responses/Generic429'
        '500':
          $ref: '#/components/responses/Generic500'
        '503':
          $ref: '#/components/responses/Generic503'
  /sessions/{sessionId}/extend:
    post:
      tags:
      - QoS Sessions
      summary: Global System for Mobile Communications Extend the duration of an active session
      description: 'Extend the overall session duration of an active QoS session (with qosStatus = AVAILABLE).

        The overall duration of the QoS session, including the additional extended duration, shall not exceed the maximum duration limit fixed for the QoS Profile. If the current duration plus the value of `requestedAdditionalDuration` exceeds the maximum limit, the new overall duration shall be capped to the maximum value allowed.

        An example: For a QoS profile limited to a `maxDuration` of 50,000 seconds, a QoD session was originally created with duration 30,000 seconds. Before the session expires, the developer requests to extend the session by another 30,000 seconds:

        - Previous duration: 30,000 seconds

        - Requested additional duration: 30,000 seconds

        - New overall session duration: 50,000 seconds (the maximum allowed)


        **NOTES:**

        - The access token may be either 2-legged or 3-legged.

        - If a 3-legged access token is used, the end user (and device) associated with the session must also be associated with the access token.

        - The session must must have been created by the same API client given in the access token

        '
      operationId: extendQosSessionDuration
      security:
      - openId:
        - quality-on-demand:sessions:update
      parameters:
      - name: sessionId
        in: path
        description: Session ID that was obtained from the createSession operation
        required: true
        schema:
          $ref: '#/components/schemas/SessionId'
      - $ref: '#/components/parameters/x-correlator'
      requestBody:
        description: Parameters to extend the duration of an active session
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExtendSessionDuration'
        required: true
      responses:
        '200':
          description: Contains information about active session
          headers:
            x-correlator:
              $ref: '#/components/headers/x-correlator'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionInfo'
        '400':
          $ref: '#/components/responses/GenericExtendSessionDuration400'
        '401':
          $ref: '#/components/responses/Generic401'
        '403':
          $ref: '#/components/responses/Generic403'
        '404':
          $ref: '#/components/responses/Generic404'
        '409':
          $ref: '#/components/responses/SessionStatusConflict409'
        '429':
          $ref: '#/components/responses/Generic429'
        '500':
          $ref: '#/components/responses/Generic500'
        '503':
          $ref: '#/components/responses/Generic503'
  /retrieve-sessions:
    post:
      tags:
      - QoS Sessions
      summary: Global System for Mobile Communications Get QoS session information for a device
      description: "Querying for QoS session resource information details for a device\n\n**NOTES:**\n- The access token may be either 2-legged or 3-legged.\n  - If a 3-legged access token is used, the end user (and device) associated with the session must also be associated with the access token. In this case it is recommended NOT to include the `device` parameter in the request (see \"Handling of device information\" within the API description for details).\n  - If a 2-legged access token is used, the device parameter must be provided and identify a device.\n- The session must have been created by the same API client given in the access token\n- If no QoS session is found for the requested device, an empty array is returned.\n"
      operationId: retrieveSessionsByDevice
      parameters:
      - $ref: '#/components/parameters/x-correlator'
      requestBody:
        description: Parameters to get QoS session information by device
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RetrieveSessionsInput'
        required: true
      responses:
        '200':
          description: Returns the QoS sessions information for a given device. A device may have multiple sessions, thus the response is an array. An empty array is returned if no sessions are found.
          headers:
            x-correlator:
              $ref: '#/components/headers/x-correlator'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetrieveSessionsOutput'
              examples:
                RETRIEVE_SESSIONS_ONE_ITEM:
                  $ref: '#/components/examples/RETRIEVE_SESSIONS_EXAMPLE'
                RETRIEVE_SESSIONS_NO_ITEMS:
                  $ref: '#/components/examples/RETRIEVE_SESSIONS_EMPTY_EXAMPLE'
        '400':
          $ref: '#/components/responses/Generic400'
        '401':
          $ref: '#/components/responses/Generic401'
        '403':
          $ref: '#/components/responses/Generic403'
        '404':
          $ref: '#/components/responses/GenericDevice404'
        '422':
          $ref: '#/components/responses/Generic422'
        '429':
          $ref: '#/components/responses/Generic429'
        '500':
          $ref: '#/components/responses/Generic500'
        '503':
          $ref: '#/components/responses/Generic503'
      security:
      - openId:
        - quality-on-demand:sessions:retrieve-by-device
components:
  responses:
    Generic503:
      description: Service Unavailable
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_503_UNAVAILABLE:
              description: Service is not available. Temporary situation usually related to maintenance process in the server side
              value:
                status: 503
                code: UNAVAILABLE
                message: Service Unavailable.
    GenericDevice404:
      description: Not found
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_404_NOT_FOUND:
              description: Resource is not found
              value:
                status: 404
                code: NOT_FOUND
                message: The specified resource is not found.
            GENERIC_404_DEVICE_NOT_FOUND:
              description: Device identifier not found
              value:
                status: 404
                code: DEVICE_NOT_FOUND
                message: Device identifier not found.
    Generic500:
      description: Internal server error
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          example:
            status: 500
            code: INTERNAL
            message: 'Internal server error: ...'
    Generic422:
      description: Unprocessable Content
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_422_DEVICE_IDENTIFIERS_MISMATCH:
              description: Inconsistency between device identifiers not pointing to the same device
              value:
                status: 422
                code: DEVICE_IDENTIFIERS_MISMATCH
                message: Provided device identifiers are not consistent.
            GENERIC_422_DEVICE_NOT_APPLICABLE:
              description: Service is not available for the provided device
              value:
                status: 422
                code: DEVICE_NOT_APPLICABLE
                message: The service is not available for the provided device.
            GENERIC_422_UNIDENTIFIABLE_DEVICE:
              description: Service is not available for the provided device
              value:
                status: 422
                code: UNIDENTIFIABLE_DEVICE
                message: The device cannot be identified.
    CreateSessionBadRequest400:
      description: Bad Request when creating a session
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_400_INVALID_ARGUMENT:
              description: Invalid Argument. Generic Syntax Exception
              value:
                status: 400
                code: INVALID_ARGUMENT
                message: Client specified an invalid argument, request body or query param.
            GENERIC_400_OUT_OF_RANGE:
              description: Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested
              value:
                status: 400
                code: OUT_OF_RANGE
                message: Client specified an invalid range.
            DurationOutOfRangeForQoSProfile:
              description: The requested duration is out of the allowed range for the specific QoS profile
              value:
                status: 400
                code: QUALITY_ON_DEMAND.DURATION_OUT_OF_RANGE
                message: The requested duration is out of the allowed range for the specific QoS profile
            GENERIC_400_INVALID_CREDENTIAL:
              value:
                status: 400
                code: INVALID_CREDENTIAL
                message: Only Access token is supported
            GENERIC_400_INVALID_TOKEN:
              value:
                status: 400
                code: INVALID_TOKEN
                message: Only bearer token is supported
    Generic410:
      description: Gone
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_410_GONE:
              description: Use in notifications flow to allow API Consumer to indicate that its callback is no longer available
              value:
                status: 410
                code: GONE
                message: Access to the target resource is no longer available.
    Generic429:
      description: Too Many Requests
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_429_QUOTA_EXCEEDED:
              description: Request is rejected due to exceeding a business quota limit
              value:
                status: 429
                code: QUOTA_EXCEEDED
                message: Either out of resource quota or reaching rate limiting.
            GENERIC_429_TOO_MANY_REQUESTS:
              description: API Server request limit is overpassed
              value:
                status: 429
                code: TOO_MANY_REQUESTS
                message: Either out of resource quota or reaching rate limiting.
    Generic400:
      description: Bad Request
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_400_INVALID_ARGUMENT:
              description: Invalid Argument. Generic Syntax Exception
              value:
                status: 400
                code: INVALID_ARGUMENT
                message: Client specified an invalid argument, request body or query param.
            GENERIC_400_OUT_OF_RANGE:
              description: Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested
              value:
                status: 400
                code: OUT_OF_RANGE
                message: Client specified an invalid range.
    Generic401:
      description: Unauthorized
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_401_UNAUTHENTICATED:
              description: Request cannot be authenticated
              value:
                status: 401
                code: UNAUTHENTICATED
                message: Request not authenticated due to missing, invalid, or expired credentials.
            GENERIC_401_AUTHENTICATION_REQUIRED:
              description: New authentication is needed, authentication is no longer valid
              value:
                status: 401
                code: AUTHENTICATION_REQUIRED
                message: New authentication is required.
    GenericExtendSessionDuration400:
      description: Bad Request
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_400_INVALID_ARGUMENT:
              description: Invalid Argument. Generic Syntax Exception
              value:
                status: 400
                code: INVALID_ARGUMENT
                message: Client specified an invalid argument, request body or query param.
            GENERIC_400_OUT_OF_RANGE:
              description: Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested
              value:
                status: 400
                code: OUT_OF_RANGE
                message: Client specified an invalid range.
            DurationOutOfRangeForQoSProfile:
              description: The requested duration is out of the allowed range for the specific QoS profile
              value:
                status: 400
                code: QUALITY_ON_DEMAND.DURATION_OUT_OF_RANGE
                message: The requested duration is out of the allowed range for the specific QoS profile
    SessionStatusConflict409:
      description: Conflict
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            SessionExtensionNotAllowed:
              description: Session extension is in conflict with current session status
              value:
                status: 409
                code: QUALITY_ON_DEMAND.SESSION_EXTENSION_NOT_ALLOWED
                message: Extending the session duration is not allowed in the current state ({qosStatus}). The session must be in the AVAILABLE state.
    Generic403:
      description: Forbidden
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_403_PERMISSION_DENIED:
              description: Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security
              value:
                status: 403
                code: PERMISSION_DENIED
                message: Client does not have sufficient permissions to perform this action.
            GENERIC_403_INVALID_TOKEN_CONTEXT:
              description: Reflect some inconsistency between information in some field of the API and the related OAuth2 Token
              value:
                status: 403
                code: INVALID_TOKEN_CONTEXT
                message: '{{field}} is not consistent with access token.'
    SessionInConflict409:
      description: Conflict
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          example:
            status: 409
            code: CONFLICT
            message: Conflict with an existing session for the same device.
    Generic404:
      description: Not found
      headers:
        x-correlator:
          $ref: '#/components/headers/x-correlator'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorInfo'
          examples:
            GENERIC_404_NOT_FOUND:
              description: Resource is not found
              value:
                status: 404
                code: NOT_FOUND
                message: The specified resource is not found.
  schemas:
    StatusInfo:
      description: 'Reason for the new `qosStatus`. Currently `statusInfo` is only applicable when `qosStatus` is ''UNAVAILABLE''.

        * `DURATION_EXPIRED` - Session terminated due to requested duration expired

        * `NETWORK_TERMINATED` - Network terminated the session before the requested duration expired

        * `DELETE_REQUESTED`- User requested the deletion of the session before the requested duration expired

        '
      type: string
      enum:
      - DURATION_EXPIRED
      - NETWORK_TERMINATED
      - DELETE_REQUESTED
    QosProfileName:
      description: "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n  - A UUID style string\n  - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n  - A searchable descriptive name\nThe set of QoS Profiles that an operator is offering can be retrieved by means of the [QoS Profile API](link TBC).\n"
      type: string
      example: QCI_1_voice
      minLength: 3
      maxLength: 256
      format: string
      pattern: ^[a-zA-Z0-9_.-]+$
    SessionInfo:
      description: 'Session related information returned in responses.

        Note that the device object is defined as optional and will only to be returned if provided in createSession. If more than one type of device identifier was provided, only one identifier will be returned (at implementation choice and with the original value provided in createSession).

        Please note that IP addresses of devices can change and get reused, so the original values may no longer identify the same device. They identified the device at the time of session creation.

        '
      allOf:
      - $ref: '#/components/schemas/BaseSessionInfo'
      - type: object
        properties:
          sessionId:
            $ref: '#/components/schemas/SessionId'
          duration:
            description: 'Session duration in seconds. Implementations can grant the requested session duration or set a different duration, based on network policies or conditions.

              - When `qosStatus` is "REQUESTED", the value is the duration to be scheduled, granted by the implementation.

              - When `qosStatus` is AVAILABLE", the value is the overall duration since `startedAt. When the session is extended, the value is the new overall duration of the session.

              - When `qosStatus` is "UNAVAILABLE", the value is the overall effective duration since `startedAt` until the session was terminated.

              '
            type: integer
            format: int32
            minimum: 1
            example: 3600
          startedAt:
            description: Date and time when the QoS status became "AVAILABLE". Not to be returned when `qosStatus` is "REQUESTED". Format must follow RFC 3339 and must indicate time zone (UTC or local).
            type: string
            format: date-time
            example: '2024-06-01T12:00:00Z'
          expiresAt:
            description: 'Date and time of the QoS session expiration. Format must follow RFC 3339 and must indicate time zone (UTC or local).

              - When `qosStatus` is "AVAILABLE", it is the limit time when the session is scheduled to finnish, if not terminated by other means.

              - When `qosStatus` is "UNAVAILABLE", it is the time when the session was terminated.

              - Not to be returned when `qosStatus` is "REQUESTED".

              When the session is extended, the value is the new expiration time of the session.

              '
            type: string
            format: date-time
            example: '2024-06-01T13:00:00Z'
          qosStatus:
            $ref: '#/components/schemas/QosStatus'
          statusInfo:
            $ref: '#/components/schemas/StatusInfo'
        required:
        - sessionId
        - duration
        - qosStatus
    CloudEvent:
      description: Event compliant with the CloudEvents specification
      required:
      - id
      - source
      - specversion
      - type
      - time
      properties:
        id:
          description: Identifier of this event, that must be unique in the source context.
          type: string
        source:
          description: Identifies the context in which an event happened in the specific Provider Implementation.
          type: string
          format: uri-reference
        type:
          description: The type of the event.
          type: string
          enum:
          - org.camaraproject.quality-on-demand.v0.qos-status-changed
        specversion:
          description: Version of the specification to which this event conforms (must be 1.0 if it conforms to cloudevents 1.0.2 version)
          type: string
          enum:
          - '1.0'
        datacontenttype:
          description: media-type that describes the event payload encoding, must be "application/json" for CAMARA APIs
          type: string
          enum:
          - application/json
        data:
          description: Event notification details payload, which depends on the event type
          type: object
        time:
          description: 'Timestamp of when the occurrence happened. It must follow RFC 3339

            '
          type: string
          format: date-time
      discriminator:
        propertyName: type
        mapping:
          org.camaraproject.quality-on-demand.v0.qos-status-changed: '#/components/schemas/Event

# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/global-system-for-mobile-communications/refs/heads/main/openapi/global-system-for-mobile-communications-qos-sessions-api-openapi.yml