C.4 OpenAPI representation of the M5 APIs

26.5123GPP5G Media Streaming (5GMS)ProtocolsRelease 17TS

C.4.1 M5_ServiceAccessInformation API

openapi: 3.0.0

info:

  title: M5_ServiceAccessInformation

  version: 2.1.0

  description: |

    5GMS AF M5 Service Access Information API

    © 2022, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).

    All rights reserved.

tags:

  – name: M5_ServiceAccessInformation

    description: ‘5G Media Streaming: Media Session Handling (M5) APIs: Service Access Information’

externalDocs:

  description: ‘TS 26.512 V17.2.0; 5G Media Streaming (5GMS); Protocols’

  url: ‘https://www.3gpp.org/ftp/Specs/archive/26_series/26.512/’

servers:

  – url: ‘{apiRoot}/3gpp-m5/v2’

    variables:

      apiRoot:

        default: https://example.com

        description: See 3GPP TS 29.512 clause 6.1.

paths:

  /service-access-information/{provisioningSessionId}:

    parameters:

      – name: provisioningSessionId

        description: ‘The resource identifier of an existing Provisioning Session.’

        in: path

        required: true

        schema:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

    get:

      operationId: retrieveServiceAccessInformation

      summary: ‘Retrieve the Service Access Information resource’

      responses:

        ‘200’:

          description: ‘Success’

          content:

            application/json:

              schema:

                  $ref: ‘#/components/schemas/ServiceAccessInformationResource’

        ‘404’:

          description: ‘Not Found’

components:

  schemas:

    ServerAddresses:

      description: "A set of application endpoint addresses."

      type: array

      items:

        $ref: ‘TS26512_CommonData.yaml#/components/schemas/Url’

      minItems: 1

    ServiceAccessInformationResource:

      description: "A representation of a Service Access Information resource."

      type: object

      required:

      – provisioningSessionId

      – provisioningSessionType

      properties:

        provisioningSessionId:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

        provisioningSessionType:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ProvisioningSessionType’

        streamingAccess:

          type: object

          properties:

            mediaPlayerEntry:

              $ref: ‘TS26512_CommonData.yaml#/components/schemas/Url’

            eMBMSServiceAnnouncementLocator:

              $ref: ‘TS26512_CommonData.yaml#/components/schemas/Url’

        clientConsumptionReportingConfiguration:

          type: object

          required:

            – serverAddresses

            – locationReporting

            – samplePercentage

          properties:

            reportingInterval:

              $ref: ‘TS29571_CommonData.yaml#/components/schemas/DurationSec’

            serverAddresses:

              $ref: ‘#/components/schemas/ServerAddresses’

            locationReporting:

              type: boolean

            accessReporting:

              type: boolean

            samplePercentage:

              $ref: ‘TS26512_CommonData.yaml#/components/schemas/Percentage’

        dynamicPolicyInvocationConfiguration:

          type: object

          required:

            – serverAddresses

            – validPolicyTemplateIds

            – sdfMethods

          properties: 

            serverAddresses:

              $ref: ‘#/components/schemas/ServerAddresses’

            validPolicyTemplateIds:

              type: array

              items: 

                $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

              minItems: 0

            sdfMethods:

              type: array

              items:

                $ref: ‘TS26512_CommonData.yaml#/components/schemas/SdfMethod’

              minItems: 0

            externalReferences:

              type: array

              items:

                type: string

              minItems: 1

        clientMetricsReportingConfiguration:

          type: array

          items:

            type: object

            required:

            – serverAddresses

            – scheme

            – samplePercentage

            – urlFilters

            – metrics

            properties:

              serverAddresses:

                $ref: ‘#/components/schemas/ServerAddresses’

              scheme:

                $ref: ‘TS29571_CommonData.yaml#/components/schemas/Uri’

              dataNetworkName:

                $ref: ‘TS29571_CommonData.yaml#/components/schemas/Dnn’

              reportingInterval:

                $ref: ‘TS29571_CommonData.yaml#/components/schemas/DurationSec’

              samplePercentage:              

                $ref: ‘TS26512_CommonData.yaml#/components/schemas/Percentage’

              urlFilters:

                type: array

                items:

                  type: string

                minItems: 0

              metrics:

                type: array

                items:

                  type: string

        networkAssistanceConfiguration:

          type: object

          required: 

            – serverAddress

          properties:

            serverAddress:

              $ref: ‘TS26512_CommonData.yaml#/components/schemas/Url’

clientEdgeResourcesConfiguration:

          type: object

          required:

            – easDiscoveryTemplate

          properties:

            eligibilityCriteria:

              $ref: ‘TS26512_CommonData.yaml#/components/schemas/EdgeProcessingEligibilityCriteria’

            easDiscoveryTemplate:

              $ref: ‘#/components/schemas/EASDiscoveryTemplate’

            easRelocationRequirements:

              $ref: ‘#/components/schemas/M5EASRelocationRequirements’

    M5EASRelocationRequirements:

      description: ‘Relocation requirements of an EAS.’

      type: object

      required:

        – tolerance

      properties:

        tolerance:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/EASRelocationTolerance’

        maxInterruptionDuration:

          $ref: ‘TS29571_CommonData.yaml#/components/schemas/UintegerRm’

    EASDiscoveryTemplate:

      description: ‘A template for discovering an EAS instance .’

      type: object

      required:

        – easType

        – easProviderIds

        – serviceFeatures

      properties:

        easType:

          type: string

        easProviderIds:

          type: array

          items:

            type: string

        serviceFeatures:

          type: array

          items:

            type: string

C.4.2 M5_ConsumptionReporting API

openapi: 3.0.0

info:

  title: M5_ConsumptionReporting

  version: 2.0.0

  description: |

    5GMS AF M5 Consumption Reporting API

    © 2022, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).

    All rights reserved.

tags:

  – name: M5_ConsumptionReporting

    description: ‘5G Media Streaming: Media Session Handling (M5) APIs: Consumption Reporting’

externalDocs:

  description: ‘TS 26.512 V17.2.0; 5G Media Streaming (5GMS); Protocols’

  url: ‘https://www.3gpp.org/ftp/Specs/archive/26_series/26.512/’

servers:

  – url: ‘{apiRoot}/3gpp-m5/v2’

    variables:

      apiRoot:

        default: https://example.com

        description: See 3GPP TS 29.512 clause 6.1.

paths:

  /consumption-reporting/{aspId}:

    parameters:

      – name: aspId

        in: path

        required: true

        schema:

          $ref: ‘TS29514_Npcf_PolicyAuthorization.yaml#/components/schemas/AspId’

        description: ‘See 3GPP TS 26.512 clause 11.3.2.’

    post:

      operationId: submitConsumptionReport

      summary: ‘Submit a Consumption Report’

      requestBody:

        description: ‘A Consumption Report’

        required: true

        content:

          application/json:

            schema:

              $ref: ‘#/components/schemas/ConsumptionReport’

      responses:

        ‘204’:

          description: ‘Consumption Report Accepted’

        ‘400’:

          description: ‘Bad Request’

        ‘415’:

          description: ‘Unsupported Media Type’

components:

  schemas:

    ConsumptionReport:

      description: "A representation of a Consumption Report."

      type: object

      required:

        – mediaPlayerEntry

        – reportingClientId

        – consumptionReportingUnits

      properties:

        mediaPlayerEntry:

          type: string

        reportingClientId:

          type: string

        consumptionReportingUnits:

          type: array

          items: 

            $ref: ‘#/components/schemas/ConsumptionReportingUnit’

    ConsumptionReportingUnit:

      description: "A Consumption Reporting Unit."

      type: object

      required:

        – mediaConsumed

        – startTime

        – duration

      properties:

        mediaConsumed:

          type: string

        mediaEndpointAddress:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/EndpointAddress’

        startTime:

          $ref: ‘TS29571_CommonData.yaml#/components/schemas/DateTime’

        duration:

          $ref: ‘TS29571_CommonData.yaml#/components/schemas/DurationSec’

        locations:

          type: array

          items:

            $ref: ‘TS26512_CommonData.yaml#/components/schemas/TypedLocation’

          minItems: 1

C.4.3 M5_MetricsReporting API

openapi: 3.0.0

info:

  title: M5_MetricsReporting

  version: 2.0.0

  description: |

    5GMS AF M5 Metrics Reporting API

    © 2022, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).

    All rights reserved.

tags:

  – name: M5_ConsumptionReporting

    description: ‘5G Media Streaming: Media Session Handling (M5) APIs: Metrics Reporting’

externalDocs:

  description: ‘TS 26.512 V17.2.0; 5G Media Streaming (5GMS); Protocols’

  url: ‘https://www.3gpp.org/ftp/Specs/archive/26_series/26.512/’

servers:

  – url: ‘{apiRoot}/3gpp-m5/v2’

    variables:

      apiRoot:

        default: https://example.com

        description: See 3GPP TS 29.512 clause 6.1.

paths:

  /metrics-reporting/{provisioningSessionId}/{metricsReportingConfigurationId}:

    parameters:

      – name: provisioningSessionId

        in: path

        required: true

        schema:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

        description: ‘The resource identifier of an existing Provisioning Session.’

      – name: metricsReportingConfigurationId

        in: path

        required: true

        schema:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

        description: ‘The resource identifier of a Metrics Configuration in the specified Provisioning Session.’

    post:

      operationId: submitMetricsReport

      summary: ‘Submit a Metrics Report’

      requestBody:

        description: ‘A Metrics Report’

        required: true

        content:

          application/3gpdash-qoe-report+xml:

            schema:

              type: string

              format: xml

          application/*:

            schema:

              type: string

      responses:

        ‘204’:

          description: ‘Metrics Report Accepted’

        ‘400’:

          description: ‘Bad Request’

        ‘415’:

          description: ‘Unsupported Media Type’

C.4.4 M5_DynamicPolicies API

openapi: 3.0.0

info:

  title: M5_DynamicPolicies

  version: 2.0.0

  description: |

    5GMS AF M5 Dynamic Policy API

    © 2022, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).

    All rights reserved.

tags:

  – name: M5_DynamicPolicies

    description: ‘5G Media Streaming: Media Session Handling (M5) APIs: Dynamic Policies’

externalDocs:

  description: ‘TS 26.512 V17.2.0; 5G Media Streaming (5GMS); Protocols’

  url: ‘https://www.3gpp.org/ftp/Specs/archive/26_series/26.512/’

servers:

  – url: ‘{apiRoot}/3gpp-m5/v2’

    variables:

      apiRoot:

        default: https://example.com

        description: See 3GPP TS 29.512 clause 6.1.

paths:

  /dynamic-policies:

    post:

      operationId: createDynamicPolicy

      summary: ‘Create (and optionally upload) a new Dynamic Policy resource’

      requestBody:

        description: ‘An optional JSON representation of a Dynamic Policy resource’

        content:

          application/json:

            schema:

              $ref: ‘#/components/schemas/DynamicPolicy’

      responses:

        ‘201’:

          description: ‘Created Dynamic Policy Resource’

          content:

            application/json:

              schema:

                $ref: ‘#/components/schemas/DynamicPolicy’

          headers:

            Location:

              description: ‘The URL of the newly created Dynamic Policy resource’

              required: true

              schema:

                $ref: ‘TS26512_CommonData.yaml#/components/schemas/Url’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

 

  /dynamic-policies/{dynamicPolicyId}:

    parameters:

      – name: dynamicPolicyId

        description: ‘The resource identifier of a Dynamic Policy resource’

        in: path

        required: true

        schema:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

    get:

      operationId: retrieveDynamicPolicy

      summary: ‘Retrieve an existing Dynamic Policy resource’

      responses:

        ‘200’:

          description: ‘Success’

          content:

            application/json:

              schema:

                $ref: ‘#/components/schemas/DynamicPolicy’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not Found’

    put:

      operationId: updateDynamicPolicy

      summary: ‘Update an existing Dynamic Policy resource’

      requestBody:

        description: ‘A replacement JSON representation of a Dynamic Policy resource’

        required: true

        content:

          application/json:

            schema:

              $ref: ‘#/components/schemas/DynamicPolicy’

      responses:

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not found’

    patch:

      operationId: patchDynamicPolicy

      summary: ‘Patch an existing Dynamic Policy resource’

      requestBody:

        description: ‘A JSON patch to a Dynamic Policy resource’

        required: true

        content:

          application/merge-patch+json:

            schema:

              $ref: ‘#/components/schemas/DynamicPolicy’

          application/json-patch+json:

            schema:

              $ref: ‘#/components/schemas/DynamicPolicy’

      responses:

        ‘200’:

          description: ‘Patched Dynamic Policy’

          content:

            application/json:

              schema:

                $ref: ‘#/components/schemas/DynamicPolicy’

        ‘204’:

          description: ‘Patched Dynamic Policy’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not found’

    delete:

      operationId: destroyDynamicPolicy

      summary: ‘Destroy an existing Dynamic Policy resource’

      responses:

        ‘204’:

          description: ‘Destroyed Dynamic Policy’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not Found’

components:

  schemas:

    DynamicPolicy:

      description: "A representation of a Dynamic Policy resource."

      type: object

      required:

        – dynamicPolicyId

        – policyTemplateId

        – serviceDataFlowDescriptions

        – provisioningSessionId

      properties:

        dynamicPolicyId:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

        policyTemplateId:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

        serviceDataFlowDescriptions:

          type: array

          items: 

            $ref: ‘TS26512_CommonData.yaml#/components/schemas/ServiceDataFlowDescription’

        provisioningSessionId:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

        qosSpecification:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/M5QoSSpecification’

        enforcementMethod:

          type: string

        enforcementBitRate:

          type: integer

C.4.5 M5_NetworkAssistance API

openapi: 3.0.0

info:

  title: M5_NetworkAssistance

  version: 2.0.0

  description: |

    5GMS AF M5 Network Assistance API

    © 2022, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).

    All rights reserved.

tags:

  – name: M5_NetworkAssistance

    description: ‘5G Media Streaming: Media Session Handling (M5) APIs: Network Assistance’

externalDocs:

  description: 3GPP TS 26.512 V17.2.0; 5G Media Streaming (5GMS); Protocols.

  url: ‘http://www.3gpp.org/ftp/Specs/archive/29_series/26.512/’

servers:

  – url: ‘{apiRoot}/3gpp-m5/v2’

    variables:

      apiRoot:

        default: https://example.com

        description: apiRoot as defined in subclause 4.4.1 of 3GPP TS 29.501.

paths:

  /network-assistance/:

    post:

      operationId: createNetworkAssistanceSession

      summary: ‘Create a new Network Assistance Session.’

      responses:

        ‘201’:

          description: ‘Created Network Assistance Session’

          content:

            application/json:

              schema:

                $ref: ‘#/components/schemas/NetworkAssistanceSession’

          headers:

            Location:

              description: ‘The URL of the nely created Network Assistance Session resource’

              required: true

              schema:

                $ref: ‘TS26512_CommonData.yaml#/components/schemas/Url’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

  /network-assistance/{naSessionId}:

    parameters:

      – name: naSessionId

        description: ‘The resource identifier of an existing Network Assistance Session resource’

        in: path

        required: true

        schema:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

    get:

      operationId: retrieveNetworkAssistanceSession

      summary: ‘Retrieve an existing Network Assistance Session resource’

      responses:

        ‘200’:

          description: ‘A JSON representation of a Network Assistance Session resource’

          content:

            application/json:

              schema:

                  $ref: ‘#/components/schemas/NetworkAssistanceSession’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not Found’

    put:

      operationId: updateNetworkAssistanceSession

      summary: ‘Update an existing Network Assistance Session resource’

      requestBody:

        description: ‘A replacement JSON representation of a Network Assistance Session resource’

        required: true

        content:

          application/json:

            schema:

              $ref: ‘#/components/schemas/NetworkAssistanceSession’

      responses:

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not found’

    patch:

      operationId: patchNetworkAssistanceSession

      summary: ‘Patch an existing Network Assistance Session resource’

      requestBody:

        description: ‘A JSON patch to a Network Assistance Session resource’

        required: true

        content:

          application/merge-patch+json:

            schema:

              $ref: ‘#/components/schemas/NetworkAssistanceSession’

          application/json-patch+json:

            schema:

              $ref: ‘#/components/schemas/NetworkAssistanceSession’

      responses:

        ‘200’:

          description: ‘Patched Network Assistance Session’

          content:

            application/json:

              schema:

                  $ref: ‘#/components/schemas/NetworkAssistanceSession’

        ‘204’:

          description: ‘Patched Network Assistance Session’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not Found’

    delete:

      operationId: destroyNetworkAssistanceSession

      summary: ‘Destroy an existing Network Assistance Session resource’

      responses:

        ‘204’:

          description: ‘Destroyed Network Assistance Session’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not Found’

  /network-assistance/{naSessionId}/recommendation:

    get:

      operationId: requestBitRateRecommendation

      summary: ‘Obtain a bit rate recommendation for the next recommendation window’

      parameters:

        – name: naSessionId

          description: ‘The resource identifier of an existing Network Assistance Session resource’

          in: path

          required: true

          schema:

            type: string

      responses:

        ‘200’:

          description: ‘Success’

          content:

            application/json:

              schema:

                  $ref: ‘TS26512_CommonData.yaml#/components/schemas/M5QoSSpecification’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not Found’

  /network-assistance/{naSessionId}/boost-request:

    post:

      operationId: requestDeliveryBoost

      summary: ‘Request a delivery boost’

      parameters:

        – name: naSessionId

          description: ‘The resource identifier of an existing Network Assistance Session resource’

          in: path

          required: true

          schema:

            type: string

      responses:

        ‘200’:

          description: ‘Delivery Boost Request Processed’

          content:

            application/json:

              schema:

                  $ref: ‘TS26512_CommonData.yaml#/components/schemas/OperationSuccessResponse’

        ‘400’:

          description: ‘Bad Request’

        ‘401’:

          description: ‘Unauthorized’

        ‘404’:

          description: ‘Not Found’

components:

  schemas:

    NetworkAssistanceSession:

      description: "A representation of a Network Assistance Session resource."

      type: object

      required: 

        – naSessionId

      properties:

        naSessionId:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

        serviceDataFlowDescription:

          type: array

          items: 

            $ref: ‘TS26512_CommonData.yaml#/components/schemas/ServiceDataFlowDescription’

          minItems: 1

        policyTemplateId:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/ResourceId’

        requestedQoS:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/M5QoSSpecification’

        recommendedQoS:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/M5QoSSpecification’

        notficationURL:

          $ref: ‘TS26512_CommonData.yaml#/components/schemas/Url’