openapi: 3.0.0

info:
  title: 3gpp-pdtq-policy-negotiation
  version: 1.0.0
  description: |
    API for PDTQ Policy Negotiation.  
    © 2024, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).  
    All rights reserved.

externalDocs:
  description: >
    3GPP TS 29.522 V18.6.0; 5G System; Network Exposure Function Northbound APIs.
  url: 'https://www.3gpp.org/ftp/Specs/archive/29_series/29.522/'

security:
  - {}
  - oAuth2ClientCredentials: []

servers:
  - url: '{apiRoot}/3gpp-pdtq-policy-negotiation/v1'
    variables:
      apiRoot:
        default: https://example.com
        description: apiRoot as defined in clause 5.2.4 of 3GPP TS 29.122.

paths:

  /{afId}/subscriptions:
    parameters:
      - name: afId
        description: Represents the identifier of the AF.
        in: path
        required: true
        schema:
          type: string

    get:
      summary: Retrieve all the active PDTQ Policy Subscriptions managed by the NEF.
      operationId: GetPDTQPolicySubscs
      tags:
        - PDTQ Policy Subscriptions (Collection)
      responses:
        '200':
          description: >
            OK. All the Individual PDTQ Policy Subscription resource(s) managed by the NEF are
            returned.
            If there are no active Individual PDTQ Policy Subscription resources at the NEF, an
            empty array is returned.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Pdtq'
                minItems: 0
        '307':
          $ref: 'TS29122_CommonData.yaml#/components/responses/307'
        '308':
          $ref: 'TS29122_CommonData.yaml#/components/responses/308'
        '400':
          $ref: 'TS29122_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29122_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29122_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29122_CommonData.yaml#/components/responses/404'
        '406':
          $ref: 'TS29122_CommonData.yaml#/components/responses/406'
        '429':
          $ref: 'TS29122_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29122_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29122_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29122_CommonData.yaml#/components/responses/default'

    post:
      summary: Create a new PDTQ Policy Subscription.
      operationId: CreatePDTQPolicySubsc
      tags:
        - PDTQ Policy Subscriptions (Collection)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Pdtq'
      responses:
        '201':
          description: >
            Created. A representation of the created Individual PDTQ Policy Subscription resource is
            returned in the response body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pdtq'
          headers:
            Location:
              description: Contains the URI of the newly created resource.
              required: true
              schema:
                type: string
        '400':
          $ref: 'TS29122_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29122_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29122_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29122_CommonData.yaml#/components/responses/404'
        '411':
          $ref: 'TS29122_CommonData.yaml#/components/responses/411'
        '413':
          $ref: 'TS29122_CommonData.yaml#/components/responses/413'
        '415':
          $ref: 'TS29122_CommonData.yaml#/components/responses/415'
        '429':
          $ref: 'TS29122_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29122_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29122_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29122_CommonData.yaml#/components/responses/default'
      callbacks:
        PDTQWarningNotification:
          '{$request.body#/notifUri}':
            post:
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/PdtqNotification'
              responses:
                '204':
                  description: >
                    No Content. The notification is successfully received and acknowledged.
                '307':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/307'
                '308':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/308'
                '400':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/400'
                '401':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/401'
                '403':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/403'
                '404':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/404'
                '411':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/411'
                '413':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/413'
                '415':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/415'
                '429':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/429'
                '500':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/500'
                '503':
                  $ref: 'TS29122_CommonData.yaml#/components/responses/503'
                default:
                  $ref: 'TS29122_CommonData.yaml#/components/responses/default'

  /{afId}/subscriptions/{subscriptionId}:
    parameters:
      - name: afId
        description: Represents the identifier of the AF.
        in: path
        required: true
        schema:
          type: string
      - name: subscriptionId
        description: >
          Represents the identifier of the Individual PDTQ Policy Subscription resource.
        in: path
        required: true
        schema:
          type: string

    get:
      summary: Retrieve an existing Individual PDTQ Policy Subscription resource at the NEF.
      operationId: GetIndPDTQPolicySubsc
      tags:
        - Individual PDTQ Policy Subscription (Document)
      responses:
        '200':
          description: >
            OK. The requested Individual PDTQ Policy Subscription resource is successfully
            returned in the response body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pdtq'
        '307':
          $ref: 'TS29122_CommonData.yaml#/components/responses/307'
        '308':
          $ref: 'TS29122_CommonData.yaml#/components/responses/308'
        '400':
          $ref: 'TS29122_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29122_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29122_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29122_CommonData.yaml#/components/responses/404'
        '406':
          $ref: 'TS29122_CommonData.yaml#/components/responses/406'
        '429':
          $ref: 'TS29122_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29122_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29122_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29122_CommonData.yaml#/components/responses/default'

    patch:
      summary: Request the modification of an existing Individual PDTQ Policy Subscription resource.
      operationId: ModifyIndPDTQPolicySubsc
      tags:
        - Individual PDTQ Policy Subscription (Document)
      requestBody:
        required: true
        content:
          application/merge-patch+json:
            schema:
              $ref: '#/components/schemas/PdtqPatch'
      responses:
        '200':
          description: >
            OK. The Individual PDTQ Policy Subscription resource is successfully modified and a
            representation of the updated resource is returned in the response body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pdtq'
        '204':
          description: >
            No Content. The Individual PDTQ Policy Subscription resource is successfully updated
            and no content is returned in the response body.
        '307':
          $ref: 'TS29122_CommonData.yaml#/components/responses/307'
        '308':
          $ref: 'TS29122_CommonData.yaml#/components/responses/308'
        '400':
          $ref: 'TS29122_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29122_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29122_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29122_CommonData.yaml#/components/responses/404'
        '411':
          $ref: 'TS29122_CommonData.yaml#/components/responses/411'
        '413':
          $ref: 'TS29122_CommonData.yaml#/components/responses/413'
        '415':
          $ref: 'TS29122_CommonData.yaml#/components/responses/415'
        '429':
          $ref: 'TS29122_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29122_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29122_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29122_CommonData.yaml#/components/responses/default'

    delete:
      summary: Request the deletion of an existing Individual PDTQ Policy Subscription resource.
      operationId: DeleteIndPDTQPolicy
      tags:
        - Individual PDTQ Policy Subscription (Document)
      responses:
        '204':
          description: >
            No Content. The Individual PDTQ Policy Subscription resource is successfully deleted.
        '307':
          $ref: 'TS29122_CommonData.yaml#/components/responses/307'
        '308':
          $ref: 'TS29122_CommonData.yaml#/components/responses/308'
        '400':
          $ref: 'TS29122_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29122_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29122_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29122_CommonData.yaml#/components/responses/404'
        '429':
          $ref: 'TS29122_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29122_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29122_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29122_CommonData.yaml#/components/responses/default'

components:

  securitySchemes:
    oAuth2ClientCredentials:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: '{tokenUrl}'
          scopes: {}

  schemas:

    Pdtq:
      description: Represents a PDTQ Policy Subscription.
      type: object
      properties:
        altQosParamSets:
          type: array
          items:
            $ref: 'TS29543_Npcf_PDTQPolicyControl.yaml#/components/schemas/AltQosParamSet'
          minItems: 1
          description: >
            Contains the alternative QoS requirements as a list of individual QoS parameters
            sets in a prioritized order.
        altQosRefs:
          type: array
          items:
            type: string
          minItems: 1
          description: >
            Contains the alternative QoS requirements as a list of QoS References in a
            prioritized order.
        appId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/ApplicationId'
        aspId:
          description: Contains the identifier of the application service provider.
          type: string
        desTimeInts:
          type: array
          items:
            $ref: 'TS29122_CommonData.yaml#/components/schemas/TimeWindow'
          minItems: 1
          description: Contains the time interval(s).
        locationArea5G:
          $ref: 'TS29122_CommonData.yaml#/components/schemas/LocationArea5G'
        notifUri:
          $ref: 'TS29122_CommonData.yaml#/components/schemas/Uri'
        numberOfUEs:
          type: integer
          description: Contains the number of UEs.
        pdtqPolicies:
          type: array
          items:
            $ref: 'TS29543_Npcf_PDTQPolicyControl.yaml#/components/schemas/PdtqPolicy'
          minItems: 1
          description: Contains the PDTQ policies.
        qosParamSet:
          $ref: 'TS29543_Npcf_PDTQPolicyControl.yaml#/components/schemas/QosParameterSet'
        qosReference:
          type: string
          description: >
            Contains the requested QoS requirements expressed as a QoS Reference.
        referenceId:
          $ref: 'TS29543_Npcf_PDTQPolicyControl.yaml#/components/schemas/PdtqReferenceId'
        selectedPolicy:
          type: integer
          description: >
            Contains the identifier of the selected PDTQ policy.
            This attribute shall not be present during resource creation, it may be provided only in
            a subsequent resource update.
        warnNotifEnabled:
          type: boolean
          description: >
            Indicates whether the PDTQ warning notification is enabled (true) or not (false).
            Default value is false when this attribute is omitted.
        suppFeat:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
      required:
        - aspId
        - desTimeInts
        - numberOfUEs
      oneOf:
        - required: [qosReference]
        - required: [qosParamSet]

    PdtqPatch:
      description: Represents the requested modification to a PDTQ Policy Subscription.
      type: object
      properties:
        selectedPolicy:
          type: integer
          description: Contains the Identifier of the selected PDTQ policy.
        warnNotifEnabled:
          type: boolean
          description: >
            Indicates whether the PDTQ warning notification is enabled (true) or not (false).
        notifUri:
          $ref: 'TS29122_CommonData.yaml#/components/schemas/Uri'

    PdtqNotification:
      description: Represents a PDTQ Warning Notification.
      type: object
      properties:
        pdtqRefId:
          $ref: 'TS29543_Npcf_PDTQPolicyControl.yaml#/components/schemas/PdtqReferenceId'
        candPolicies:
          type: array
          items:
            $ref: 'TS29543_Npcf_PDTQPolicyControl.yaml#/components/schemas/PdtqPolicy'
          minItems: 1
          description: >
            Contains a list of the candidate PDTQ policies from which the AF may select
            a new PDTQ policy due to network performance or DN performance degradation.
      required:
        - pdtqRefId
        - candPolicies
