openapi: 3.0.0
info:
  version: 1.1.0.alpha-3
  title: Nsmf_EventExposure
  description: |
    Session Management Event Exposure Service.
    © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).
    All rights reserved.
externalDocs:
  description: 3GPP TS 29.508 V16.2.0; 5G System; Session Management Event Exposure Service.
  url: http://www.3gpp.org/ftp/Specs/archive/29_series/29.508/
servers:
  - url: '{apiRoot}/nsmf_event-exposure/v1'
    variables:
      apiRoot:
        default: https://example.com
        description: apiRoot as defined in subclause 4.4 of 3GPP TS 29.501
security:
  - {}
  - oAuth2ClientCredentials:
    - nsmf-event-exposure
paths:
  /subscriptions:
    post:
      operationId: CreateIndividualSubcription
      summary: Create an individual subscription for event notifications from the SMF
      tags:
        - Subscriptions (Collection)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NsmfEventExposure'
      responses:
        '201':
          description: Success
          headers:
            Location:
              description: 'Contains the URI of the newly created resource, according to the structure: {apiRoot}/nsmf-event-exposure/v1/subscriptions/{subId}'
              required: true
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NsmfEventExposure'
        '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:
        myNotification:
          '{$request.body#/notifUri}': 
            post:
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/NsmfEventExposureNotification'
              responses:
                '204':
                  description: No Content, Notification was succesfull
                '307':
                  description: temporary redirect
                '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:
                afAcknowledgement:
                  '{request.body#/ackUri}':
                    post:
                      requestBody:  # contents of the callback message
                        required: true
                        content:
                          application/json:
                            schema:
                              $ref: '#/components/schemas/AckOfNotify'
                      responses:
                        '204':
                          description: No Content (successful acknowledgement)
                        '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/{subId}:
    get:
      operationId: GetIndividualSubcription
      summary: Read an individual subscription for event notifications from the SMF
      tags:
        - IndividualSubscription (Document)
      parameters:
        - name: subId
          in: path
          description: Event Subscription ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK. Resource representation is returned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NsmfEventExposure'
        '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'
        '406':
          $ref: 'TS29571_CommonData.yaml#/components/responses/406'
        '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'
    put:
      operationId: ReplaceIndividualSubcription
      summary: Replace an individual subscription for event notifications from the SMF
      tags:
        - IndividualSubscription (Document)
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NsmfEventExposure'
      parameters:
        - name: subId
          in: path
          description: Event Subscription ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK. Resource was succesfully modified and representation is returned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NsmfEventExposure'
        '204':
          description: No Content. Resource was succesfully modified
        '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:
      operationId: DeleteIndividualSubcription
      summary: Delete an individual subscription for event notifications from the SMF
      tags:
        - IndividualSubscription (Document)
      parameters:
        - name: subId
          in: path
          description: Event Subscription ID
          required: true
          schema:
            type: string
      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:
            nsmf-event-exposure: Access to the Nsmf_EventExposure API
  schemas:
    NsmfEventExposure:
      description: Represents an Individual SMF Notification Subscription resource. The serviveName property corresponds to the serviceName in the main body of the specification.
      type: object
      properties:
        supi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Supi'
        gpsi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Gpsi'
        anyUeInd:
          type: boolean
          description: Any UE indication. This IE shall be present if the event subscription is applicable to any UE. Default value "FALSE" is used, if not present.
        groupId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/GroupId'
        pduSeId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/PduSessionId'
        subId:
          $ref: '#/components/schemas/SubId'
        notifId:
          type: string
          description: Notification Correlation ID assigned by the NF service consumer.
        notifUri:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Uri'
        altNotifIpv4Addrs:
          type: array
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv4Addr'
          description: Alternate or backup IPv4 Addess(es) where to send Notifications.
          minItems: 1
        altNotifIpv6Addrs:
          type: array
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv6Addr'
          description: Alternate or backup IPv6 Addess(es) where to send Notifications.
          minItems: 1
        eventSubs:
          type: array
          items:
            $ref: '#/components/schemas/EventSubscription'
          minItems: 1
          description: Subscribed events
        ImmeRep:
          type: boolean
        notifMethod:
          $ref: '#/components/schemas/NotificationMethod'
        maxReportNbr:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Uinteger'
        expiry:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/DateTime'
        repPeriod:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/DurationSec'
        guami:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Guami'
        serviveName:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/ServiceName'
        supportedFeatures:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
        sampRatio:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SamplingRatio'
        grpRepTime:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/DurationSec'
      required:
        - notifId
        - notifUri
        - eventSubs
    NsmfEventExposureNotification:
      type: object
      properties:
        notifId:
          type: string
          description: Notification correlation ID
        eventNotifs:
          type: array
          items:
            $ref: '#/components/schemas/EventNotification'
          minItems: 1
          description: Notifications about Individual Events
        ackUri:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Uri'
      required:
        - notifId
        - eventNotifs
    EventSubscription:
      type: object
      properties:
        event:
          $ref: '#/components/schemas/SmfEvent'
        dnaiChgType:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/DnaiChangeType'
        dddTraDes:
          $ref: '#/components/schemas/DddTrafficDescriptor'
        dddStati:
          type: array
          items:
            $ref: '#/components/schemas/DddStatus'
          minItems: 1
      required:
        - event
    EventNotification:
      type: object
      properties:
        event:
          $ref: '#/components/schemas/SmfEvent'
        timeStamp:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/DateTime'
        supi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Supi'
        gpsi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Gpsi'
        sourceDnai:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Dnai'
        targetDnai:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Dnai'
        dnaiChgType:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/DnaiChangeType'
        sourceUeIpv4Addr:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv4Addr'
        sourceUeIpv6Prefix:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv6Prefix'
        targetUeIpv4Addr:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv4Addr'
        targetUeIpv6Prefix:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv6Prefix'
        sourceTraRouting:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/RouteToLocation'
        targetTraRouting:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/RouteToLocation'
        ueMac:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/MacAddr48'
        adIpv4Addr:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv4Addr'
        adIpv6Prefix:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv6Prefix'
        reIpv4Addr:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv4Addr'
        reIpv6Prefix:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv6Prefix'
        plmnId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/PlmnId'
        accType:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/AccessType'
        pduSeId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/PduSessionId'
        dddStatus:
          $ref: '#/components/schemas/DddStatus'
        maxWaitTime:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/DateTime'
        commFailure:
          $ref: 'TS29518_Namf_EventExposure.yaml#/components/schemas/CommunicationFailure'
      required:
        - event
        - timeStamp
    DddTrafficDescriptor:
      type: object
      properties:
        ipv4Addr:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv4Addr'
        ipv6Addr:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv6Addr'
        port:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Uinteger'
        macAddr:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/MacAddr48'
    SubId:
      type: string
      format: SubId
      description: Identifies an Individual SMF Notification Subscription. To enable that the value is used as part of a URI, the string shall only contain characters allowed according to the "lower-with-hyphen" naming convention defined in 3GPP TS 29.501 [2]. In an OpenAPI [10] schema, the format shall be designated as "SubId".
    AckOfNotify:
      type: object
      properties:
        notifId:
          type: string
        ackResult:
          $ref: 'TS29522_TrafficInfluence.yaml#/components/schemas/AfResultInfo'
        supi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Supi'
        gpsi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Gpsi'
      required:
        - notifId
        - ackResult
    SmfEvent:
      anyOf:
      - type: string
        enum:
          - AC_TY_CH
          - UP_PATH_CH
          - PDU_SES_REL
          - PLMN_CH
          - UE_IP_CH
          - DDDS
          - COMM_FAIL
      - type: string
        description: >
          This string provides forward-compatibility with future
          extensions to the enumeration but is not used to encode
          content defined in the present version of this API.
      description: >
        Possible values are
        - AC_TY_CH: Access Type Change
        - UP_PATH_CH: UP Path Change
        - PDU_SES_REL: PDU Session Release
        - PLMN_CH: PLMN Change
        - UE_IP_CH: UE IP address change
        - DDDS: Downlink data delivery status
        - COMM_FAIL: Communication Failure
    NotificationMethod:
      anyOf:
      - type: string
        enum:
          - PERIODIC
          - ONE_TIME
          - ON_EVENT_DETECTION
      - type: string
        description: >
          This string provides forward-compatibility with future
          extensions to the enumeration but is not used to encode
          content defined in the present version of this API.
      description: >
        Possible values are
        - PERIODIC
        - ONE_TIME
        - ON_EVENT_DETECTION
    DddStatus:
      anyOf:
      - type: string
        enum:
          - BUFFERED
          - TRANSMITTED
          - DISCARDED
      - type: string
        description: >
          This string provides forward-compatibility with future
          extensions to the enumeration but is not used to encode
          content defined in the present version of this API.
      description: >
        Possible values are
        - BUFFERED: The first downlink data is buffered with extended buffering matching the source of the downlink traffic.
        - TRANSMITTED: The first downlink data matching the source of the downlink traffic is transmitted after previous buffering or discarding of corresponding packet(s) because the UE of the PDU Session becomes ACTIVE, and buffered data can be delivered to UE.
        - DISCARDED: The first downlink data matching the source of the downlink traffic is discarded because the Extended Buffering time, as determined by the SMF, expires or the amount of downlink data to be buffered is exceeded.