openapi: 3.0.0
info:
  description: Spending Limit Control Service API
  version: "1.0.0"
  title: Nchf_SpendingLimitControl
externalDocs:
  description: 3GPP TS 29.594 V15.2.0; 5G System; Spending Limit Control Service.
  url: 'http://www.3gpp.org/ftp/Specs/archive/29_series/29.594/'
servers:
  - url: '{apiRoot}/nchf-spendinglimitcontrol/v1'
    variables:
      apiRoot:
        default: https://example.com
        description: apiRoot as defined in subclause subclause 4.4 of 3GPP TS 29.501
security:
  - {}
  - oAuth2ClientCredentials:
    - nchf-spendinglimitcontrol
paths:
  /subscriptions:
    post:
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SpendingLimitContext'
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpendingLimitStatus'
          headers:
            Location:
              description: 'Contains the URI of the created individual spending limit resource, according to the structure: {apiRoot}/nchf-spendinglimitcontrol/v1/subscriptions/{subscriptionId}'
              required: true
              schema:
                type: string
        '400':
          $ref: 'TS29571_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29571_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29571_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29571_CommonData.yaml#/components/responses/404'
        '411':
          $ref: 'TS29571_CommonData.yaml#/components/responses/411'
        '413':
          $ref: 'TS29571_CommonData.yaml#/components/responses/413'
        '415':
          $ref: 'TS29571_CommonData.yaml#/components/responses/415'
        '429':
          $ref: 'TS29571_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29571_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29571_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29571_CommonData.yaml#/components/responses/default'
      callbacks:
        statusNotification:
          '{$request.body#/notifUri}/notify': 
            post:
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/SpendingLimitStatus'
              responses:
                '204':
                  description: No Content, Notification was succesfull
                '400':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/400'
                '401':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/401'
                '403':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/403'
                '404':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/404'
                '411':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/411'
                '413':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/413'
                '415':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/415'
                '429':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/429'
                '500':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/500'
                '503':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/503'
                default:
                  $ref: 'TS29571_CommonData.yaml#/components/responses/default'
        subscriptionTermination:
          '{$request.body#/notifUri}/terminate': 
            post:
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/SubscriptionTerminationInfo'
              responses:
                '204':
                  description: No Content, Notification was succesfull
                '400':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/400'
                '401':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/401'
                '403':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/403'
                '404':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/404'
                '411':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/411'
                '413':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/413'
                '415':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/415'
                '429':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/429'
                '500':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/500'
                '503':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/503'
                default:
                  $ref: 'TS29571_CommonData.yaml#/components/responses/default'
  /subscriptions/{subscriptionId}:
    parameters:
      - in: path
        name: subscriptionId
        description: Identifies an individual spending limit retrieval subscription.
        required: true
        schema:
          type: string
    put:
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SpendingLimitContext'
      responses:
        '200':
          description: OK. Resource was succesfully modified and representation is returned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpendingLimitStatus'
        '400':
          $ref: 'TS29571_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29571_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29571_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29571_CommonData.yaml#/components/responses/404'
        '411':
          $ref: 'TS29571_CommonData.yaml#/components/responses/411'
        '413':
          $ref: 'TS29571_CommonData.yaml#/components/responses/413'
        '415':
          $ref: 'TS29571_CommonData.yaml#/components/responses/415'
        '429':
          $ref: 'TS29571_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29571_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29571_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29571_CommonData.yaml#/components/responses/default'
    delete:
      responses:
        '204':
          description: No Content. Resource was succesfully deleted
        '400':
          $ref: 'TS29571_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29571_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29571_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29571_CommonData.yaml#/components/responses/404'
        '429':
          $ref: 'TS29571_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29571_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29571_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29571_CommonData.yaml#/components/responses/default'
components:
  securitySchemes:
    oAuth2ClientCredentials:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: '{nrfApiRoot}/oauth2/token'
          scopes:
            nchf-spendinglimitcontrol: Access to the Nchf_SpendingLimitControl API
  schemas:
    SpendingLimitContext:
      type: object
      properties:
        supi:
          description: The Subscription Permanent Identifier (Supi) shall be present within the initial spending limit retrieval procedure (creation of a new individual subscription).
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Supi'
        gpsi:
          description: The Generic Public Subscription Identifier (Gpsi) may be present within the initial spending limit retrieval procedure (creation of a new individual subscription).
          items:
            $ref: 'TS29.571_CommonData.yaml#/components/schemas/Gpsi'
        policyCounterIds:
          type: array
          items:
            $ref: '#/components/schemas/PolicyCounterId'
          minItems: 1
          description: This is a list of policy counter identifier(s), which identifies policy counters maintained per subscriber within the CHF.
        notifUri:
          description: This attribute identifies the recipient of spending limit notifications sent to the NF service consumer by the CHF. The notifUri shall be present within the initial spending limit retrieval procedure (creation of a new individual subscription). It may be present within the intermediate spending limit retrieval procedure (modification of an existing subscription).
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Uri'
        supportedFeatures:
          description: The list of supported features as described in subclause 5.8 shall be supplied by the NF service consumer in the POST request that request the creation of a spending limit report resource.
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
    SpendingLimitStatus:
      type: object
      properties:
        supi:
          description: The Subscription Permanent Identifier (Supi) shall be present within the callback notify service operation (notification of the status of subscribed policy counters).
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Supi'
        statusInfos:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/PolicyCounterInfo'
          minProperties: 1
          description: Status of the requested policy counters. The key of the map is the attribute "policyCounterId".
        supportedFeatures:
          description: If the supportedFeatures is included in the request by the NF service consumer, it shall be supplied in the reply of the corresponding request by the CHF.
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures' 
      required:
        - statusInfos
    PolicyCounterInfo:
      type: object
      properties:
        policyCounterId:
          items:
            $ref: '#/components/schemas/PolicyCounterId'
        currentStatus:
          type: string
          description: Identifies the policy counter status applicable for a specific policy counter identified by the policyCounterId. The values (e.g. valid, invalid or any other status) are not specified. The interpretation and actions related to the defined values are out of scope of 3GPP.
        penPolCounterStatuses:
          type: array
          items:
            $ref: '#/components/schemas/PendingPolicyCounterStatus'
          minItems: 1
          description: Provides the pending policy counter status.
      required:
        - policyCounterId
        - currentStatus
    PendingPolicyCounterStatus:
      type: object
      properties:
        policyCounterStatus:
          type: string
          description: Identifies the policy counter status applicable for a specific policy counter identified by the policyCounterId. The values (e.g. valid, invalid or any other status) are not specified. The interpretation and actions related to the defined values are out of scope of 3GPP.
        activationTime:
          description: Indicates the activation times per required policy counter.
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/DateTime'
      required:
        - policyCounterStatus
        - activationTime
    PolicyCounterId:
      type: string
      description: Identifies a policy counter.
    SubscriptionTerminationInfo:
      type: object
      properties:
        supi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Supi'
        termCause:
          $ref: '#/components/schemas/TerminationCause'
      required:
        - supi
    TerminationCause:
      anyOf:
      - type: string
        enum:
          - REMOVED_SUBSCRIBER
      - type: string