openapi: 3.0.0
info:
  version: 1.0.1
  title: Namf_Location
  description: AMF Location Service
security:
  - {}
  - oAuth2ClientCredentials:
      - namf-loc
externalDocs:
  description: 3GPP TS 29.518 V15.3.0; 5G System; Access and Mobility Management Services
  url: 'http://www.3gpp.org/ftp/Specs/archive/29_series/29.518/'
servers:
  - url: '{apiRoot}/namf-loc/v1'
    variables:
      apiRoot:
        default: https://example.com
        description: apiRoot as defined in subclause subclause 4.4 of 3GPP TS 29.501
paths:
  /{ueContextId}/provide-pos-info:
    post:
      summary: Namf_Location ProvidePositioningInfo service Operation
      tags:
        - Individual UE context (Document)
      operationId: ProvidePositioningInfo
      parameters:
        - name: ueContextId
          in: path
          description: UE Context Identifier
          required: true
          schema:
            type: string
            pattern: '^(imsi-[0-9]{5,15}|nai-.+|imei-[0-9]{15}|imeisv-[0-9]{16}|.+)$'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestPosInfo'
        required: true
      responses:
        '200':
          description: Expected response to a valid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProvidePosInfo'
        '400':
          $ref: 'TS29571_CommonData.yaml#/components/responses/400'
        '403':
          $ref: 'TS29571_CommonData.yaml#/components/responses/403'
        '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'
        '504':
          $ref: 'TS29571_CommonData.yaml#/components/responses/504'
        default:
          description: Unexpected error
      callbacks:
        onUELocationNotification:
          '{$request.body#/locationNotificationUri}':
            post:
              requestBody:
                description: UE Location Event Notification
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/NotifiedPosInfo'
              responses:
                '204':
                  description: Expected response to a successful callback processing
                '400':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/400'
                '403':
                  $ref: 'TS29571_CommonData.yaml#/components/responses/403'
                '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'
  /{ueContextId}/provide-loc-info:
    post:
      summary: Namf_Location ProvideLocationInfo service Operation
      tags:
        - Individual UE context (Document)
      operationId: ProvideLocationInfo
      parameters:
        - name: ueContextId
          in: path
          description: UE Context Identifier
          required: true
          schema:
            type: string
            pattern: '^(imsi-[0-9]{5,15}|nai-.+|imei-[0-9]{15}|imeisv-[0-9]{16}|.+)$'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestLocInfo'
        required: true
      responses:
        '200':
          description: Expected response to a valid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProvideLocInfo'
        '400':
          $ref: 'TS29571_CommonData.yaml#/components/responses/400'
        '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:
          description: Unexpected error
components:
  securitySchemes:
    oAuth2ClientCredentials:
      type: oauth2
      flows: 
        clientCredentials: 
          tokenUrl: '{nrfApiRoot}/oauth2/token'
          scopes:
            namf-loc: Access to the Namf_Location API
  schemas:
    RequestPosInfo:
      type: object
      properties:
        lcsClientType:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/ExternalClientType'
        lcsLocation:
          $ref: '#/components/schemas/LocationType'
        supi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Supi'
        gpsi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Gpsi'
        priority:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/LcsPriority'
        lcsQoS:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/LocationQoS'
        velocityRequested:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/VelocityRequested'
        lcsSupportedGADShapes:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/SupportedGADShapes'
        locationNotificationUri:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Uri'
        supportedFeatures:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
      required:
        - lcsClientType
        - lcsLocation
    ProvidePosInfo:
      type: object
      properties:
        locationEstimate:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/GeographicArea'
        accuracyFulfilmentIndicator:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/AccuracyFulfilmentIndicator'
        ageOfLocationEstimate:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/AgeOfLocationEstimate'
        velocityEstimate:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/VelocityEstimate'
        positioningDataList:
          type: array
          items:
            $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/PositioningMethodAndUsage'
          minItems: 0
          maxItems: 9
        gnssPositioningDataList:
          type: array
          items:
            $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/GnssPositioningMethodAndUsage'
          minItems: 0
          maxItems: 9
        ecgi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ecgi'
        ncgi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ncgi'
        targetServingNode:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        civicAddress:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/CivicAddress'
        barometricPressure:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/BarometricPressure'
        altitude:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/Altitude'
        supportedFeatures:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
    NotifiedPosInfo:
      type: object
      properties:
        locationEvent:
          $ref: '#/components/schemas/LocationEvent'
        supi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Supi'
        gpsi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Gpsi'
        pei:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Pei'
        locationEstimate:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/GeographicArea'
        ageOfLocationEstimate:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/AgeOfLocationEstimate'
        velocityEstimate:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/VelocityEstimate'
        positioningDataList:
          type: array
          items:
            $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/PositioningMethodAndUsage'
          minItems: 0
          maxItems: 9
        gnssPositioningDataList:
          type: array
          items:
            $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/GnssPositioningMethodAndUsage'
          minItems: 0
          maxItems: 9
        ecgi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ecgi'
        ncgi:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Ncgi'
        servingNode:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        civicAddress:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/CivicAddress'
        barometricPressure:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/BarometricPressure'
        altitude:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/Altitude'
      required:
        - locationEvent
    RequestLocInfo:
      type: object
      properties:
        req5gsLoc:
          type: boolean
          default: false
        reqCurrentLoc:
          type: boolean
          default: false
        reqRatType:
          type: boolean
          default: false
        reqTimeZone:
          type: boolean
          default: false
        supportedFeatures:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
    ProvideLocInfo:
      type: object
      properties:
        currentLoc:
          type: boolean
        location:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/UserLocation'
        geoInfo:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/GeographicArea'
        locatoinAge:
          $ref: 'TS29572_Nlmf_Location.yaml#/components/schemas/AgeOfLocationEstimate'
        ratType:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/RatType'
        timezone:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/TimeZone'
        supportedFeatures:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
    LocationType:
      anyOf:
      - type: string
        enum:
          - CURRENT_LOCATION
          - CURRENT_OR_LAST_KNOWN_LOCATION
          - INITIAL_LOCATION
      - type: string
    LocationEvent:
      anyOf:
      - type: string
        enum:
          - EMERGENCY_CALL_ORIGINATION
          - EMERGENCY_CALL_RELEASE
          - EMERGENCY_CALL_HANDOVER
      - type: string
