openapi: 3.0.0
info:
  version: '1.0.0'
  title: 'NRF NFDiscovery Service'
  description: 'NRF NFDiscovery  Service'
servers:
  - url: '{apiRoot}/nnrf-disc/v1'
    variables:
      apiRoot:
        default: https://example.com
        description: apiRoot as defined in subclause subclause 4.4 of 3GPP TS 29.501
security:
  - {}
  - oAuth2ClientCredentials:
      - nnrf-disc
paths:
  /nf-instances:
    get:
      summary: Search a collection of NF Instances
      operationId: SearchNFInstances
      tags:
        - NF Instances (Store)
      parameters:
        - name: target-nf-type
          in: query
          description: Type of the target NF
          required: true
          schema:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NFType'
        - name: requester-nf-type
          in: query
          description: Type of the requester NF
          required: true
          schema:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NFType'
        - name: service-names
          in: query
          description: Name of the service offered by the NF
          schema:
            type: array
            items:
              type: string
            minItems: 1
          style: form
          explode: false
        - name: requester-nf-instance-fqdn
          in: query
          description: FQDN of the requester NF
          schema:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/Fqdn'
        - name: target-plmn-list
          in: query
          description: Id of the PLMN where the target NF is located
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: 'TS29571_CommonData.yaml#/components/schemas/PlmnId'
                minItems: 1
        - name: requester-plmn-list
          in: query
          description: Id of the PLMN where the NF issuing the Discovery request is located
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: 'TS29571_CommonData.yaml#/components/schemas/PlmnId'
                minItems: 1
        - name: target-nf-instance-id
          in: query
          description: Identity of the NF instance being discovered
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        - name: target-nf-fqdn
          in: query
          description: FQDN of the NF instance being discovered
          schema:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/Fqdn'
        - name: hnrf-uri
          in: query
          description: Uri of the home NRF
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Uri'
        - name: snssais
          in: query
          description: Slice info of the target NF
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: 'TS29571_CommonData.yaml#/components/schemas/Snssai'
                minItems: 1
        - name: dnn
          in: query
          description: Dnn supported by the BSF, SMF or UPF
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Dnn'
        - name: nsi-list
          in: query
          description: NSI IDs that are served by the services being discovered
          schema:
            type: array
            items:
              type: string
            minItems: 1
          style: form
          explode: false
        - name: smf-serving-area
          in: query
          schema:
            type: string
        - name: tai
          in: query
          description: Tracking Area Identity
          content:
            application/json:
              schema:
                $ref: 'TS29571_CommonData.yaml#/components/schemas/Tai'
        - name: amf-region-id
          in: query
          description: AMF Region Identity
          schema:
            type: string
        - name: amf-set-id
          in: query
          description: AMF Set Identity
          schema:
            type: string
        - name: guami
          in: query
          description: Guami used to search for an appropriate AMF
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Guami'
        - name: supi
          in: query
          description: SUPI of the user
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Supi'
        - name: ue-ipv4-address
          in: query
          description: IPv4 address of the UE
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv4Addr'
        - name: ip-domain
          in: query
          description: IP domain of the UE, which supported by BSF
          schema:
            type: string
        - name: ue-ipv6-prefix
          in: query
          description: IPv6 prefix of the UE
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv6Prefix'
        - name: pgw-ind
          in: query
          description: Combined PGW-C and SMF or a standalone SMF
          schema:
            type: boolean
        - name: pgw
          in: query
          description: PGW FQDN of a combined PGW-C and SMF
          schema:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/Fqdn'
        - name: gpsi
          in: query
          description: GPSI of the user
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Gpsi'
        - name: external-group-identity
          in: query
          description: external group identifier of the user
          schema:
            type: string
        - name: data-set
          in: query
          description: data set supported by the NF
          schema:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/DataSetId'
        - name: routing-indicator
          in: query
          description: routing indicator in SUCI
          schema:
            type: string
            pattern: '^[0-9]{1,4}$'
        - name: group-id-list
          in: query
          description: Group IDs of the NFs being discovered
          schema:
            type: array
            items:
              $ref: 'TS29571_CommonData.yaml#/components/schemas/NfGroupId'
            minItems: 1
          style: form
          explode: false
        - name: dnai-list
          in: query
          description: Data network access identifiers of the NFs being discovered
          schema:
            type: array
            items:
              $ref: 'TS29571_CommonData.yaml#/components/schemas/Dnai'
            minItems: 1
          style: form
          explode: false
        - name: supported-features
          in: query
          description: Features required to be supported by the target NF
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
        - name: upf-iwk-eps-ind
          in: query	
          description: UPF supporting interworking with EPS or not
          schema:	
            type: boolean
        - name: chf-supported-plmn
          in: query
          description: PLMN ID supported by a CHF
          content:
            application/json:
              schema:
                $ref: 'TS29571_CommonData.yaml#/components/schemas/PlmnId'
        - name: preferred-locality
          in: query
          description: preferred target NF location
          schema:
            type: string
        - name: access-type
          in: query
          description: AccessType supported by the target NF
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/AccessType'
        - name: If-None-Match
          in: header
          description: Validator for conditional requests, as described in IETF RFC 7232, 3.2 
          schema:
            type: string
      responses:
        '200':
          description: Expected response to a valid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResult'
          headers:
            Cache-Control:
              description: Cache-Control containing max-age, described in IETF RFC 7234, 5.2
              schema:
                type: string
            ETag:
              description: Entity Tag containing a strong validator, described in IETF RFC 7232, 2.3 
              schema:
                type: string
        '307':
          description: Temporary Redirect
        '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'
        '500':
          $ref: 'TS29571_CommonData.yaml#/components/responses/500'
        '501':
          $ref: 'TS29571_CommonData.yaml#/components/responses/501'
        '503':
          $ref: 'TS29571_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29571_CommonData.yaml#/components/responses/default'
components:
  securitySchemes:
    oAuth2ClientCredentials:
      type: oauth2
      flows: 
        clientCredentials: 
          tokenUrl: '/oauth2/token'
          scopes:
            nnrf-disc: Access to the Nnrf_NFDiscovery API
  schemas:
    SearchResult:
      type: object
      required:
        - nfInstances
      properties:
        validityPeriod:
          type: integer
        nfInstances:
          type: array
          items:
            $ref: '#/components/schemas/NFProfile'
    NFProfile:
      type: object
      required:
        - nfInstanceId
        - nfType
        - nfStatus
      properties:
        nfInstanceId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        nfType:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NFType'
        nfStatus:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NFStatus'
        plmnList:
          type: array
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/PlmnId'
          minItems: 1
        sNssais:
          type: array
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Snssai'
          minItems: 1
        nsiList:
          type: array
          items:
            type: string
          minItems: 1
        fqdn:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/Fqdn'
        ipv4Addresses:
          type: array
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv4Addr'
          minItems: 1
        ipv6Addresses:
          type: array
          items:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/Ipv6Addr'
          minItems: 1
        capacity:
          type: integer
          minimum: 0
          maximum: 65535
        load:
          type: integer
          minimum: 0
          maximum: 100
        locality:
          type: string
        priority:
          type: integer
          minimum: 0
          maximum: 65535
        udrInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/UdrInfo'
        udmInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/UdmInfo'
        ausfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/AusfInfo'
        amfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/AmfInfo'
        smfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/SmfInfo'
        upfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/UpfInfo'
        pcfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/PcfInfo'
        bsfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/BsfInfo'
        chfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/ChfInfo'
        customInfo:
          type: object
        recoveryTime:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/DateTime'
        nfServicePersistence:
          type: boolean
          default: false
        nfServices:
          type: array
          items:
            $ref: '#/components/schemas/NFService'
          minItems: 1
    NFService:
      type: object
      required:
        - serviceInstanceId
        - serviceName
        - versions
        - scheme
        - nfServiceStatus
      properties:
        serviceInstanceId:
          type: string
        serviceName:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/ServiceName'
        versions:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NFServiceVersion'
          minItems: 1
        scheme:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/UriScheme'
        nfServiceStatus:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NFServiceStatus'
        fqdn:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/Fqdn'
        ipEndPoints:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/IpEndPoint'
          minItems: 1
        apiPrefix:
          type: string
        defaultNotificationSubscriptions:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/DefaultNotificationSubscription'
          minItems: 1
        capacity:
          type: integer
          minimum: 0
          maximum: 65535
        load:
          type: integer
          minimum: 0
          maximum: 100
        priority:
          type: integer
          minimum: 0
          maximum: 65535
        recoveryTime:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/DateTime'
        chfServiceInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/ChfServiceInfo'
        supportedFeatures:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
externalDocs:
  description: 3GPP TS 29.510 V15.2.0; 5G System; Network Function Repository Services; Stage 3
  url: 'http://www.3gpp.org/ftp/Specs/archive/29_series/29.510/'