openapi: 3.0.0
info:
  title: CAPIF_API_Provider_Management_API
  description: |
    API for API provider domain functions management.  
    © 2022, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC).  
    All rights reserved.
  version: "1.1.0"
externalDocs:
  description: 3GPP TS 29.222 V17.5.0 Common API Framework for 3GPP Northbound APIs
  url: https://www.3gpp.org/ftp/Specs/archive/29_series/29.222/
servers:
  - url: '{apiRoot}/api-provider-management/v1'
    variables:
      apiRoot:
        default: https://example.com
        description: apiRoot as defined in clause 7.5 of 3GPP TS 29.222

paths:
  /registrations:
    post:
      description: Registers a new API Provider domain with API provider domain functions profiles.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/APIProviderEnrolmentDetails'
      responses:
        '201':
          description: API provider domain registered successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIProviderEnrolmentDetails'
          headers:
            Location:
              description: >
                Contains the URI of the newly created resource, according to the structure
                {apiRoot}/api-provider-management/v1/registrations/{registrationId}
              required: true
              schema:
                type: string
        '400':
          $ref: 'TS29122_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29122_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29122_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29122_CommonData.yaml#/components/responses/404'
        '411':
          $ref: 'TS29122_CommonData.yaml#/components/responses/411'
        '413':
          $ref: 'TS29122_CommonData.yaml#/components/responses/413'
        '415':
          $ref: 'TS29122_CommonData.yaml#/components/responses/415'
        '429':
          $ref: 'TS29122_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29122_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29122_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29122_CommonData.yaml#/components/responses/default'
          
  /registrations/{registrationId}:
    delete:
      description: Deregisters API provider domain by deleting API provider domain and functions.
      parameters:
        - name: registrationId
          in: path
          description: String identifying an registered API provider domain resource.
          required: true
          schema:
            type: string
      responses:
        '204':
          description: The API provider domain matching registrationId is deleted.
        '307':
          $ref: 'TS29122_CommonData.yaml#/components/responses/307'
        '308':
          $ref: 'TS29122_CommonData.yaml#/components/responses/308'
        '400':
          $ref: 'TS29122_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29122_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29122_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29122_CommonData.yaml#/components/responses/404'
        '429':
          $ref: 'TS29122_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29122_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29122_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29122_CommonData.yaml#/components/responses/default'
    put:
      description: Updates an API provider domain's registration details.
      parameters:
        - name: registrationId
          in: path
          description: String identifying an registered API provider domain resource.
          required: true
          schema:
            type: string
      requestBody:
        description: >
          Representation of the API provider domain registration details to be updated
          in CAPIF core function.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/APIProviderEnrolmentDetails'
      responses:
        '200':
          description: API provider domain registration details updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIProviderEnrolmentDetails'
        '204':
          description: No Content
        '307':
          $ref: 'TS29122_CommonData.yaml#/components/responses/307'
        '308':
          $ref: 'TS29122_CommonData.yaml#/components/responses/308'
        '400':
          $ref: 'TS29122_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29122_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29122_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29122_CommonData.yaml#/components/responses/404'
        '411':
          $ref: 'TS29122_CommonData.yaml#/components/responses/411'
        '413':
          $ref: 'TS29122_CommonData.yaml#/components/responses/413'
        '415':
          $ref: 'TS29122_CommonData.yaml#/components/responses/415'
        '429':
          $ref: 'TS29122_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29122_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29122_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29122_CommonData.yaml#/components/responses/default'
    patch:
      description: Modify an individual API provider details.
      operationId: ModifyIndApiProviderEnrolment
      tags:
        - Individual API Provider enrolment details 
      parameters:
        - name: registrationId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/merge-patch+json:
            schema:
              $ref: '#/components/schemas/APIProviderEnrolmentDetailsPatch'
      responses:
        '200':
          description: >
            The definition of the service API is modified successfully and a
            representation of the updated service API is returned in the request body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIProviderEnrolmentDetails'
        '204':
          description: No Content. The definition of the service API is modified successfully.
        '307':
          $ref: 'TS29122_CommonData.yaml#/components/responses/307'
        '308':
          $ref: 'TS29122_CommonData.yaml#/components/responses/308'
        '400':
          $ref: 'TS29122_CommonData.yaml#/components/responses/400'
        '401':
          $ref: 'TS29122_CommonData.yaml#/components/responses/401'
        '403':
          $ref: 'TS29122_CommonData.yaml#/components/responses/403'
        '404':
          $ref: 'TS29122_CommonData.yaml#/components/responses/404'
        '411':
          $ref: 'TS29122_CommonData.yaml#/components/responses/411'
        '413':
          $ref: 'TS29122_CommonData.yaml#/components/responses/413'
        '415':
          $ref: 'TS29122_CommonData.yaml#/components/responses/415'
        '429':
          $ref: 'TS29122_CommonData.yaml#/components/responses/429'
        '500':
          $ref: 'TS29122_CommonData.yaml#/components/responses/500'
        '503':
          $ref: 'TS29122_CommonData.yaml#/components/responses/503'
        default:
          $ref: 'TS29122_CommonData.yaml#/components/responses/default'
components:
  schemas:
    APIProviderEnrolmentDetails:
      type: object
      description: Represents an API provider domain's enrolment details.
      properties:
        apiProvDomId:
          type: string
          description: >
            API provider domain ID assigned by the CAPIF core function to the API management
            function while registering the API provider domain. Shall not be present in the
            HTTP POST request from the API Management function to the CAPIF core function,
            to on-board itself. Shall be present in all other HTTP requests and responses.
          readOnly: true
        regSec:
          type: string
          description: >
            Security information necessary for the CAPIF core function to validate the
            registration of the API provider domain. Shall be present in HTTP POST request
            from API management function to CAPIF core function for API provider domain
            registration.
        apiProvFuncs:
          type: array
          items:
            $ref: '#/components/schemas/APIProviderFunctionDetails'
          minItems: 1
          description: >
            A list of individual API provider domain functions details. When included by
            the API management function in the HTTP request message, it lists the API
            provider domain functions that the API management function intends to
            register/update in registration or update registration procedure. When
            included by the CAPIF core function in the HTTP response message, it lists
            the API domain functions details that are registered or updated successfully.
        apiProvDomInfo:
          type: string
          description: >
            Generic information related to the API provider domain such as details
            of the API provider applications.
        suppFeat:
          $ref: 'TS29571_CommonData.yaml#/components/schemas/SupportedFeatures'
        failReason:
          type: string
          description: >
            Registration or update specific failure information of failed API provider
            domain function registrations.Shall be present in the HTTP response
            body if atleast one of the API provider domain function registration or update
            registration fails.
      required:
        - regSec

    APIProviderFunctionDetails:
      type: object
      description: Represents API provider domain function's details.
      properties:
        apiProvFuncId:
          type: string
          description: >
            API provider domain functionID assigned by the CAPIF core function to the
            API provider domain function while registering/updating the API provider domain.
            Shall not be present in the HTTP POST request from the API management function to
            the CAPIF core function, to register itself. Shall be present in all other HTTP
            requests and responses.
        regInfo:
          $ref: '#/components/schemas/RegistrationInformation'
        apiProvFuncRole:
          $ref: '#/components/schemas/ApiProviderFuncRole'
        apiProvFuncInfo:
          type: string
          description: >
            Generic information related to the API provider domain function such as details
            of the API provider applications.
      required:
        - regInfo
        - apiProvFuncRole

    RegistrationInformation:
      type: object
      description: >
        Represents registration information of an individual API provider domain function.
      properties:
        apiProvPubKey:
          type: string
          description: Public Key of API Provider domain function.
        apiProvCert:
          type: string
          description: API provider domain function's client certificate
      required:
        - apiProvPubKey

    ApiProviderFuncRole:
      anyOf:
      - type: string
        enum:
          - AEF
          - APF
          - AMF
      - type: string
        description: >
          This string provides forward-compatiblity 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:
        - AEF: API provider function is API Exposing Function.
        - APF: API provider function is API Publishing Function.
        - AMF: API Provider function is API Management Function.

    APIProviderEnrolmentDetailsPatch:
      type: object
      description: Represents an API provider domain's enrolment details.
      properties:
        apiProvFuncs:
          type: array
          items:
            $ref: '#/components/schemas/APIProviderFunctionDetails'
          minItems: 1
          description: >
            A list of individual API provider domain functions details. When included by
            the API management function in the HTTP request message, it lists the API
            provider domain functions that the API management function intends to
            register/update in registration or update registration procedure. 
        apiProvDomInfo:
          type: string
          description: >
            Generic information related to the API provider domain such as details
            of the API provider applications.
