openapi: 3.0.0
info:
  version: '1.1.0.alpha-1'
  title: 'NRF NFDiscovery Service'
  description: |
    NRF NFDiscovery Service.
    © 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).
    All rights reserved.
servers:
  - url: '{apiRoot}/nnrf-disc/v1'
    variables:
      apiRoot:
        default: https://example.com
        description: apiRoot as defined in 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: requester-nf-instance-id
          in: query
          description: NfInstanceId of the requester NF
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        - name: service-names
          in: query
          description: Names of the services offered by the NF
          schema:
            type: array
            items:
              $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/ServiceName'
            minItems: 1
            uniqueItems: true
          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 of the target NF
          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: requester-snssais
          in: query
          description: Slice info of the requester NF
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: 'TS29571_CommonData.yaml#/components/schemas/Snssai'
                minItems: 1
        - name: plmn-specific-snssai-list
          in: query
          description: PLMN specific Slice info of the target NF
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/PlmnSnssai'
                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:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/AmfRegionId'
        - name: amf-set-id
          in: query
          description: AMF Set Identity
          schema:
            $ref: 'TS29571_CommonData.yaml#/components/schemas/AmfSetId'
        - name: guami
          in: query
          description: Guami used to search for an appropriate AMF
          content:
            application/json:
              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: pdu-session-types
          in: query
          description: list of PDU Session Type required to be supported by the target NF
          schema:
            type: array
            items:
              $ref: 'TS29571_CommonData.yaml#/components/schemas/PduSessionType'
            minItems: 1
          style: form
          explode: false
        - name: event-id-list
          in: query
          description: Analytics event(s) requested to be supported by the Nnwdaf_AnalyticsInfo service
          schema:
            type: array
            items:
              $ref: 'TS29520_Nnwdaf_AnalyticsInfo.yaml#/components/schemas/EventId'
            minItems: 1
          style: form
          explode: false
        - name: nwdaf-event-list
          in: query
          description: Analytics event(s) requested to be supported by the Nnwdaf_EventsSubscription service.
          schema:
            type: array
            items:
              $ref: 'TS29520_Nnwdaf_EventsSubscription.yaml#/components/schemas/NwdafEvent'
            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: limit
          in: query
          description: Maximum number of NFProfiles to return in the response
          required: false
          schema:
            type: integer
            minimum: 1
        - name: required-features
          in: query
          description: Features required to be supported by the target NF
          schema:
            type: array
            items:
              $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
            minItems: 1
          style: form
          explode: false
        - name: complex-query
          in: query
          description: the complex query condition expression
          content:
            application/json:
              schema:
                $ref: 'TS29571_CommonData.yaml#/components/schemas/ComplexQuery'
        - name: max-payload-size
          in: query
          description: Maximum payload size of the response expressed in kilo octets
          required: false
          schema:
            type: integer
            maximum: 2000
            default: 124
        - name: atsss-capability
          in: query
          description: ATSSS Capability
          content:
            application/json:
              schema:
                $ref: 'TS29571_CommonData.yaml#/components/schemas/AtsssCapability'
        - name: upf-ue-ip-addr-ind
          in: query
          description: UPF supporting allocating UE IP addresses/prefixes
          schema:
            type: boolean
        - 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'
          links:
            search:
              operationId: RetrieveStoredSearch
              parameters:
                searchId: $response.body#/searchId
              description: >
                The 'searchId' parameter returned in the response can be used as the 
                'searchId' parameter in the GET request to '/searches/{searchId}'
            completeSearch:
              operationId: RetrieveCompleteSearch
              parameters:
                searchId: $response.body#/searchId
              description: >
                The 'searchId' parameter returned in the response can be used as the 
                'searchId' parameter in the GET request to '/searches/{searchId}/complete'
          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
          headers:
            Location:
              description: 'The URI pointing to the resource located on the redirect target NRF'
              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'
        '406':
          $ref: 'TS29571_CommonData.yaml#/components/responses/406'
        '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'
        '501':
          $ref: 'TS29571_CommonData.yaml#/components/responses/501'
        '503':
          $ref: 'TS29571_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29571_CommonData.yaml#/components/responses/default'

  /searches/{searchId}:
    get:
      operationId: RetrieveStoredSearch
      tags:
        - Stored Search (Document)
      parameters:
        - $ref: '#/components/parameters/searchId'
      responses:
        '200':
          $ref: '#/components/responses/200'

  /searches/{searchId}/complete:
    get:
      operationId: RetrieveCompleteSearch
      tags:
        - Complete Stored Search (Document)
      parameters:
        - $ref: '#/components/parameters/searchId'
      responses:
        '200':
          $ref: '#/components/responses/200'

components:
  securitySchemes:
    oAuth2ClientCredentials:
      type: oauth2
      flows: 
        clientCredentials: 
          tokenUrl: '/oauth2/token'
          scopes:
            nnrf-disc: Access to the Nnrf_NFDiscovery API
  parameters:
    searchId:
      name: searchId
      in: path
      description: Id of a stored search
      required: true
      schema:
        type: string
  responses:
    '200':
      description: Expected response to a valid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StoredSearchResult'
      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
  schemas:
    SearchResult:
      type: object
      required:
        - nfInstances
      properties:
        validityPeriod:
          type: integer
        nfInstances:
          type: array
          items:
            $ref: '#/components/schemas/NFProfile'
        searchId:
          type: string
        numNfInstComplete:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/Uint32'
        nrfSupportedFeatures:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
    StoredSearchResult:
      type: object
      required:
        - nfInstances
      properties:
        nfInstances:
          type: array
          items:
            $ref: '#/components/schemas/NFProfile'
    NFProfile:
      type: object
      required:
        - nfInstanceId
        - nfType
        - nfStatus
      properties:
        nfInstanceId:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/NfInstanceId'
        nfInstanceName:
          type: string
        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
        perPlmnSnssaiList:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/PlmnSnssai'
          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'
        udrInfoExt:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/UdrInfo'
          minItems: 1
        udmInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/UdmInfo'
        udmInfoExt:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/UdmInfo'
          minItems: 1
        ausfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/AusfInfo'
        ausfInfoExt:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/AusfInfo'
          minItems: 1
        amfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/AmfInfo'
        amfInfoExt:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/AmfInfo'
          minItems: 1
        smfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/SmfInfo'
        smfInfoExt:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/SmfInfo'
          minItems: 1
        upfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/UpfInfo'
        upfInfoExt:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/UpfInfo'
          minItems: 1
        pcfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/PcfInfo'
        pcfInfoExt:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/PcfInfo'
          minItems: 1
        bsfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/BsfInfo'
        bsfInfoExt:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/BsfInfo'
          minItems: 1
        chfInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/ChfInfo'
        chfInfoExt:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/ChfInfo'
          minItems: 1
        nwdafInfo:
          $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/NwdafInfo'
        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
        defaultNotificationSubscriptions:
          type: array
          items:
            $ref: 'TS29510_Nnrf_NFManagement.yaml#/components/schemas/DefaultNotificationSubscription'
    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.3.0; 5G System; Network Function Repository Services; Stage 3
  url: 'http://www.3gpp.org/ftp/Specs/archive/29_series/29.510/'