#  ============LICENSE_START=======================================================
#  Copyright (C) 2020-2023 Nordix Foundation. All rights reserved.
#  Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved.
#  ================================================================================
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#        http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
#  SPDX-License-Identifier: Apache-2.0
#  ============LICENSE_END=========================================================

openapi: 3.0.3
info:
  contact:
    email: discuss-list@onap.com
    url: https://www.onap.org/
  description: "<h2>General</h2><p>The ONAP CCSDK A1 Policy Management Service provides\
    \ a REST API for managing A1 policies. <br/>This document describes the latest\
    \ API set  to perform tasks for: </p><ul><li>A1 Policy creation, modification\
    \ and deletion.</li><li>Monitoring and maintaining consistency of the SMO view\
    \ of A1 Policies and the Near-RT RICs</li><li>Maintaining a view of each Near-RT\
    \ RIC's supported A1 Policy Types</li><li>Supervision of registered services (rApps).\
    \ When a registered service is unavailable, its policies are removed.</li></ul><h2>APIs\
    \ provided or defined by the service</h2> <p>Note: parts of this API are strongly\
    \ based on extracts of the O-RAN Alliance R1 Interface specification for A1 Policy\
    \ Management, and those parts should be considered '© O-RAN ALLIANCE - All rights\
    \ reserved.'</p> <h3>A1 Policy Management</h3> <p>This is the latest API for managing\
    \ A1 Policies. This API is partially compliant with O-RAN Alliance R1 Interface\
    \ specifications for A1 Policy Management:</p><ul><li>A1 Policy retrieval, creation,\
    \ modification and deletion.</li><li>Retrieval of supported A1 Policy Types for\
    \ a Near-RT RIC</li><li>Retrieval of status for existing A1 policies</li></ul><h3>Management\
    \ of configuration</h3><p>API for updating and retrieval of the component configuration.\
    \ Note that there other ways to maintain the configuration.</p><h3>Service Callbacks</h3><p>These\
    \ are endpoints that are invoked by this service. The callbacks are registered\
    \ in this service at service registration.</p><h3>NearRT-RIC Repository  (Older\
    \ version)</h3> <p>This is an API that provides support for looking up a NearRT-RIC.\
    \ Each A1 policy is targeted towards one Near-RT RIC.</p><h3>Health Check</h3><p>API\
    \ used for supervision of the A1 Policy Management Service.</p><h3>Service Registry\
    \ and Supervision</h3> <p>API used for registering services/clients/rApps. Each\
    \ A1 Policy can be tagged with an owner. If the owner service is registered, then\
    \ the service can be optionally monitored by a heart-beat supervision mechanism,\
    \ and if the registered service becomes unavailable, then it is removed and all\
    \ its A1 Policies are  deleted. Note that services do not need to be registered\
    \ to create A1 Policies, but unregistered    services are not supervised. This\
    \ is a feature that is optional to use.</p>"
  license:
    name: Copyright (C) 2024 - 2025 OpenInfra Foundation Europe. Licensed under the
      Apache 2 License.
    url: http://www.apache.org/licenses/LICENSE-2.0
  title: ONAP CCSDK - A1 Policy Management API
  version: 1.0.0
  x-api-id: e9776a07-0813-4fca-9801-6f892f0a7c13
  x-audience: external-public
externalDocs:
  description: "Based on parts of O-RAN ALLIANCE specification: O-RAN.WG2.R1AP-v07.00"
  url: https://www.o-ran.org/specifications
servers:
- url: "{apiRoot}/a1-policy-management/v1"
  variables:
    apiRoot:
      default: https://example.com
      description: "This is the Host:Port or Address where the A1-Policy Management\
        \ Service can be accessed. Note: This URL path format aligns with the O-RAN\
        \ Alliance R1-AP specifications for A1 Policy Management"
tags:
- description: |
    API used to get, create, update and delete A1 Policy Instances. Also used to query A1 Policy Types.
  name: A1 Policy Management
- description: |
    API used to get information about registered Near-RT RICs.
  name: NearRT-RIC Repository
- description: |
    API used to manage registered services, and control their keep-alive status via heart-beat messages.
  name: Service Registry and Supervision
- description: |
    API used to get the health status and statistics of this service.
  name: Health Check
- description: |
    API used to create or fetch the application configuration.
  name: Configuration
paths:
  /status:
    get:
      description: Returns status and statistics of this service
      operationId: getStatus
      responses:
        "200":
          content:
            application/json:
              examples:
                status_info:
                  $ref: '#/components/examples/StatusInfo'
              schema:
                $ref: '#/components/schemas/StatusInfo'
          description: OK- Service is living Ok
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
      summary: Get Status (getStatus)
      tags:
      - Health Check
  /rics/{ricId}:
    get:
      description: Get information about a Near-RT RIC
      operationId: getRic
      parameters:
      - description: The identity of a Near-RT RIC to get information for.
        explode: true
        in: path
        name: ricId
        required: true
        schema:
          nullable: false
          type: string
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                ric_info:
                  $ref: '#/components/examples/RicInfo'
              schema:
                $ref: '#/components/schemas/RicInfo'
          description: OK - Near-RT RIC is found OK
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
      summary: Get a Near-RT RIC (getRic)
      tags:
      - NearRT-RIC Repository
  /rics:
    get:
      description: Get all Near-RT RICs that supports a given A1 Policy Type ID
      operationId: getRics
      parameters:
      - description: |
          The identity of an A1 Policy Type. If given, all Near-RT RICs supporting the A1 Policy Type are returned.
        explode: true
        in: query
        name: policyTypeId
        required: false
        schema:
          type: string
        style: form
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                ric_info_list:
                  $ref: '#/components/examples/RicInfoList'
              schema:
                $ref: '#/components/schemas/RicInfoList'
          description: OK
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
      summary: Get Near-RT RICs for A1 Policy Type (getRics)
      tags:
      - NearRT-RIC Repository
  /policy-types:
    get:
      description: Query A1 Policy Type identities using query parameters
      operationId: getPolicyTypes
      parameters:
      - description: Select types for the given Near-RT RIC identity.
        explode: true
        in: query
        name: nearRtRicId
        required: false
        schema:
          type: string
        style: form
      - description: Select types compatible with the given type name (type identity
          has the format 'typename_version')
        explode: true
        in: query
        name: typeName
        required: false
        schema:
          type: string
        style: form
      - description: |
          Select types that are compatible with the given version. This parameter is only applicable in conjunction with typeName. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching types will be returned sorted in ascending order.
        explode: true
        in: query
        name: compatibleWithVersion
        required: false
        schema:
          type: string
        style: form
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                PolicyTypeInformation:
                  $ref: '#/components/examples/PolicyTypeInformation'
              schema:
                items:
                  $ref: '#/components/schemas/PolicyTypeInformation'
                type: array
          description: OK - Policy Type IDs found Ok
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "406":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Acceptable
        "429":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Too Many Requests
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "502":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Gateway
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
      summary: Get A1 Policy Types (getPolicyTypes)
      tags:
      - A1 Policy Management
  /policy-types/{policyTypeId}:
    get:
      description: Get an A1 Policy Type definition using its policy type ID
      operationId: getPolicyTypeDefinition
      parameters:
      - explode: false
        in: path
        name: policyTypeId
        required: true
        schema:
          type: string
        style: simple
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                PolicyTypeObject:
                  $ref: '#/components/examples/PolicyTypeObject'
              schema:
                $ref: '#/components/schemas/PolicyTypeObject'
          description: OK - details and schema of the requested A1 Policy Type
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "406":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Acceptable
        "429":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Too Many Requests
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "502":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Gateway
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
      summary: Get an A1 Policy Type definition (getPolicyTypeDefinition)
      tags:
      - A1 Policy Management
  /policies/{policyId}:
    delete:
      description: Delete an existing A1 Policy instance using its policy ID.
      operationId: deletePolicy
      parameters:
      - explode: false
        in: path
        name: policyId
        required: true
        schema:
          type: string
        style: simple
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "204":
          description: No Content
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "405":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Method Not Allowed
        "406":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Acceptable
        "423":
          content:
            application/problem+json:
              example:
                status: 423
                title: Locked
                detail: State is Locked in the provided request.
              schema:
                $ref: '#/components/schemas/ErrorInformation'
          description: Locked - HTTP Status code which can be used when the state
            is Locked
        "429":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Too Many Requests
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "502":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Gateway
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
      summary: Delete an A1 Policy instance (deletePolicy)
      tags:
      - A1 Policy Management
    get:
      description: Get an A1 Policy instance's policy data using its policy ID
      operationId: getPolicy
      parameters:
      - explode: false
        in: path
        name: policyId
        required: true
        schema:
          type: string
        style: simple
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                policyObject:
                  $ref: '#/components/examples/PolicyObject'
              schema:
                $ref: '#/components/schemas/PolicyObject'
          description: OK - Policy found
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "406":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Acceptable
        "429":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Too Many Requests
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "502":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Gateway
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
      summary: Get an A1 Policy's policy data (getPolicy)
      tags:
      - A1 Policy Management
    put:
      description: Update an existing A1 Policy instance's policy data using its policy
        ID.
      operationId: updatePolicy
      parameters:
      - in: path
        name: policyId
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            examples:
              policyObject:
                $ref: '#/components/examples/PolicyObject'
            schema:
              $ref: '#/components/schemas/PolicyObject'
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PolicyObject'
          description: OK - Policy updated
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "406":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Acceptable
        "411":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Length Required
        "413":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Payload Too Large
        "415":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unsupported Media Type
        "423":
          content:
            application/problem+json:
              example:
                status: 423
                title: Locked
                detail: State is Locked in the provided request.
              schema:
                $ref: '#/components/schemas/ErrorInformation'
          description: Locked - HTTP Status code which can be used when the state
            is Locked
        "429":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Too Many Requests
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "502":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Gateway
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
      summary: Update an A1 Policy's policy data (updatePolicy)
      tags:
      - A1 Policy Management
  /policies/{policyId}/status:
    get:
      description: Retrieve the status information for an A1 Policy Instance using
        its policy ID.
      operationId: getPolicyStatus
      parameters:
      - explode: false
        in: path
        name: policyId
        required: true
        schema:
          type: string
        style: simple
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PolicyStatusObject'
          description: OK
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "406":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Acceptable
        "429":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Too Many Requests
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "502":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Gateway
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
      summary: Get an A1 Policy Instance's status (getPolicyStatus)
      tags:
      - A1 Policy Management
  /policies:
    get:
      description: |
        Returns a collection of A1 Policy Instance IDs for policies that match given search criteria.  If several query parameters are defined, the policies matching all conditions are returned.
      operationId: getPolicyIds
      parameters:
      - description: Select policies with a given A1 Policy Type ID.
        explode: true
        in: query
        name: policyTypeId
        required: false
        schema:
          type: string
        style: form
      - description: Select policies for a given Near-RT RIC identity.
        explode: true
        in: query
        name: nearRtRicId
        required: false
        schema:
          type: string
        style: form
      - description: Select policies owned by a given service (registered or unregistered).
        explode: true
        in: query
        name: serviceId
        required: false
        schema:
          type: string
        style: form
      - description: Select policies of a given A1 Policy Type name (type identity
          has the format 'typename_version').
        explode: true
        in: query
        name: typeName
        required: false
        schema:
          type: string
        style: form
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/PolicyInformation'
                type: array
          description: OK - Policy identities
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "406":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Acceptable
        "429":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Too Many Requests
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "502":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Gateway
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
      summary: Query for A1 Policy instances (getPolicyIds)
      tags:
      - A1 Policy Management
    post:
      description: Create an A1 Policy Instance
      operationId: createPolicy
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PolicyObjectInformation'
        required: true
      responses:
        "201":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PolicyObjectInformation'
          description: Created
          headers:
            Location:
              description: |
                Contains the URI of the newly created A1 Policy Instances. This URI includes the A1 Policy Instance ID for the newly  created policy instance.
              required: true
              schema:
                type: string
            Content-Type:
              description: Media Type of the response
              schema:
                example: application/json
                type: string
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        "401":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unauthorized
        "403":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        "405":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Method Not Allowed
        "406":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Acceptable
        "409":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Conflict
        "413":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Payload Too Large
        "415":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Unsupported Media Type
        "423":
          content:
            application/problem+json:
              example:
                status: 423
                title: Locked
                detail: State is Locked in the provided request.
              schema:
                $ref: '#/components/schemas/ErrorInformation'
          description: Locked - HTTP Status code which can be used when the state
            is Locked
        "429":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Too Many Requests
        "500":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Internal Server Error
        "502":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Gateway
        "503":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Service Unavailable
      summary: Create an A1 Policy Instance (createPolicy)
      tags:
      - A1 Policy Management
  /configuration:
    get:
      description: Returns the entire contents of the Application Configuration.
      operationId: getConfiguration
      responses:
        "200":
          content:
            application/json:
              schema:
                type: string
          description: OK - Application configuration received
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
      summary: Get the Application Configuration (getConfiguration)
      tags:
      - Configuration
    put:
      description: |
        Replace the current Application Configuration with a new configuration. The new configuration, if accepted, will take effect after a short delay.  The new configuration must comply with the Application Configuration schema,  which can be found from the the Application Documentation (Developer Guide)
      operationId: putConfiguration
      requestBody:
        content:
          application/json:
            schema:
              type: object
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/void'
          description: OK - Configuration updated
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
      summary: Set/Replace the Application Configuration (putConfiguration)
      tags:
      - Configuration
  /services/{serviceId}/keepalive:
    put:
      description: "A registered service should invoke this operation regularly to\
        \ indicate that it is still alive. If a registered service fails to invoke\
        \ some operation, or this operation, before the end of a timeout period the\
        \ service will be deregistered and all its A1 policies wil be removed and\
        \ the service is deleted. This operation is only intended for registered services.\
        \ (This timeout can be set or disabled when each service is initially registered).\
        \ Unregistered services do not need to invoke this operation, since the optional\
        \ keep-alive monitoring feature can only be enabled for registered services."
      operationId: keepAliveService
      parameters:
      - explode: false
        in: path
        name: serviceId
        required: true
        schema:
          type: string
        style: simple
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "200":
          content:
            application/json:
              schema:
                type: object
          description: "OK - Service supervision timer refreshed, OK"
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
      summary: Heartbeat message from a service (keepAliveService)
      tags:
      - Service Registry and Supervision
  /services:
    get:
      description: |
        Get information about all registered services, or a single registered service.  If the service ID of a registered service is included in the query, information about that  service is returned. Otherwise Information about all registered is returned. This operation does not retrieve information about unregistered services.
      operationId: getServices
      parameters:
      - description: The identity of the registered service
        explode: true
        in: query
        name: serviceId
        required: false
        schema:
          type: string
        style: form
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "200":
          content:
            application/json:
              examples:
                service_status_list:
                  $ref: '#/components/examples/ServiceStatusList'
              schema:
                $ref: '#/components/schemas/ServiceStatusList'
          description: OK
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
      summary: Get Services (getServices)
      tags:
      - Service Registry and Supervision
    put:
      callbacks:
        RICStatus:
          '{$request.body#/callback_url}':
            post:
              description: "Callouts to indicate Near-RT RIC status changes relevant\
                \ for Services. \nThe URL invoked by this callback is provided at\
                \ Service registration.\n"
              operationId: serviceCallback
              requestBody:
                content:
                  application/json:
                    schema:
                      $ref: '#/components/schemas/ServiceCallbackInfo'
                required: true
              responses:
                "200":
                  content:
                    application/json:
                      schema:
                        $ref: '#/components/schemas/void'
                  description: OK
                "404":
                  content:
                    application/problem+json:
                      schema:
                        $ref: '#/components/schemas/ProblemDetails'
                  description: Not Found
              summary: Callback for Near-RT RIC status (serviceCallback)
              tags:
              - Service Registry and Supervision
              x-callback-request: true
      description: |
        Register a single service, or update a previous registration.  Service registration is required to get callbacks about available NearRT RICs  and to enable supervision of the service's active status. If a registered service becomes inactive, its policies can be automatically deleted. A1 Policy instances can also be created for unregistered services.  If an unregistered service is later registered, the service's policies are  retained when the service becomes registered. This feature is optional to use.
      operationId: putService
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ServiceRegistrationInfo'
        required: true
      responses:
        "200":
          content:
            application/json:
              schema:
                type: object
          description: OK - Service updated
        "201":
          content:
            application/json:
              schema:
                type: object
          description: Created - Service created
        "400":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
      summary: Register or update a Service (putService)
      tags:
      - Service Registry and Supervision
  /services/{serviceId}:
    delete:
      description: |
        Unregister a registered Service using its service ID.  Only registered services can be unregistered. All A1 Policy Instances  for the previously registered service will be removed.
      operationId: deleteService
      parameters:
      - explode: false
        in: path
        name: serviceId
        required: true
        schema:
          type: string
        style: simple
      - description: Specifies the content type that the client expects to receive
          in response to the request. Only application/json is allowed.
        in: header
        name: Accept
        schema:
          example: application/json
          type: string
      responses:
        "204":
          content:
            application/json:
              schema:
                type: object
          description: No Content - Service unregistered
        "404":
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
      summary: Unregister a Service (deleteService)
      tags:
      - Service Registry and Supervision
components:
  examples:
    StatusInfo:
      value:
        status: success
    RicInfo:
      value:
        ricId: ricId1
        managedElementIds:
        - "Note #1"
        - Athlone small cells
        - Some optional string
        state: UNAVAILABLE
        policyTypeIds:
        - policyTypeId1
        - policyTypeId2
    RicInfoList:
      value:
        rics:
        - ricId: ricId1
          managedElementIds:
          - "Note #1"
          - Athlone small cells
          - Fake Cells
          state: UNAVAILABLE
          policyTypeIds:
          - policyTypeId1
          - policyTypeId2
        - ricId: ricId2
          managedElementIds:
          - My test element
          - Another test element
          state: UNAVAILABLE
          policyTypeIds:
          - policyTypeId3
          - policyTypeId4
    PolicyTypeInformation:
      value:
      - policyTypeId: STD_QOS2_0.1.0
        nearRtRicId: ric_g3_2
      - policyTypeId: STD_QOS_0_2_0
        nearRtRicId: ric_g3_2
      - policyTypeId: STD_QOS2_0.1.0
        nearRtRicId: ric_g3_1
      - policyTypeId: STD_QOS_0_2_0
        nearRtRicId: ric_g3_1
    PolicyTypeObject:
      value:
        policySchema:
          $schema: http://json-schema.org/draft-07/schema#
          title: STD_QOS_0_2_0
          description: STD QOS2 policy type
          type: object
          properties:
            scope:
              type: object
              properties:
                ueId:
                  type: string
                qosId:
                  type: string
              additionalProperties: false
              required:
              - ueId
              - qosId
            qosObjectives:
              type: object
              properties:
                priorityLevel:
                  type: number
              additionalProperties: false
              required:
              - priorityLevel
    PolicyObject:
      value:
        scope:
          ueId:
            guRanUeId:
              globalGnbId:
                plmnId:
                  mcc: "123"
                  mnc: "45"
                gnbId:
                  gnbIdLength: 24
                  gnbIdValue: 12345678
              RanUeId: a31c510b20e64a74
          groupId:
            spId: 123
          qosId:
            "5qI": 1
          cellId:
            plmnId:
              mcc: "123"
              mnc: "45"
            cId:
              ncI: 123
        qosObjectives:
          gfbr: 100
          mfbr: 200
          priorityLevel: 3
          pdb: 50
    ServiceStatusList:
      description: List of service information
      value:
        serviceList:
        - callbackUrl: http://callback.url
          serviceId: serviceId1
          keepAliveIntervalSeconds: 0
          timeSinceLastActivitySeconds: 6
        - callbackUrl: http://callback.url
          serviceId: serviceId2
          keepAliveIntervalSeconds: 500
          timeSinceLastActivitySeconds: 401
  responses:
    "404":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Not Found
    "400":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Bad Request
    "401":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Unauthorized
    "403":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Forbidden
    "406":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Not Acceptable
    "429":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Too Many Requests
    "500":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Internal Server Error
    "502":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Bad Gateway
    "503":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Service Unavailable
    "411":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Length Required
    "413":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Payload Too Large
    "415":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Unsupported Media Type
    Locked:
      content:
        application/problem+json:
          example:
            status: 423
            title: Locked
            detail: State is Locked in the provided request.
          schema:
            $ref: '#/components/schemas/ErrorInformation'
      description: Locked - HTTP Status code which can be used when the state is Locked
    "405":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Method Not Allowed
    "409":
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
      description: Conflict
  schemas:
    StatusInfo:
      example:
        status: status
      properties:
        status:
          description: Status text
          type: string
      type: object
    ProblemDetails:
      description: Object to carry details about a problem in an HTTP response according
        to IETF RFC 7807
      properties:
        type:
          description: URI reference according to IETF RFC 3986 that identifies the
            problem type
          type: string
        title:
          description: Human-readable summary of the problem type
          type: string
        status:
          description: HTTP status code
          type: number
        detail:
          description: Human-readable explanation
          type: string
        instance:
          description: URI reference that identifies the specific occurrence of the
            problem
          type: string
      type: object
    RicInfo:
      description: Information for a Near-RT RIC
      example:
        ricId: ricId
        policyTypeIds:
        - policyTypeIds
        - policyTypeIds
        managedElementIds:
        - managedElementIds
        - managedElementIds
        state: UNAVAILABLE
      properties:
        ricId:
          description: Identity of the Near-RT RIC
          type: string
        managedElementIds:
          description: Identities for managed entities
          items:
            description: Identity for a managed entity
            type: string
          type: array
        state:
          description: Represents the state of a Near-RT RIC
          enum:
          - UNAVAILABLE
          - AVAILABLE
          - SYNCHRONIZING
          - CONSISTENCY_CHECK
          type: string
        policyTypeIds:
          description: Supported A1 Policy Types
          items:
            description: Supported A1 Policy Type ID
            type: string
          type: array
      type: object
    RicInfoList:
      description: Collection of Near-RT RIC information objects
      example:
        rics:
        - ricId: ricId
          policyTypeIds:
          - policyTypeIds
          - policyTypeIds
          managedElementIds:
          - managedElementIds
          - managedElementIds
          state: UNAVAILABLE
        - ricId: ricId
          policyTypeIds:
          - policyTypeIds
          - policyTypeIds
          managedElementIds:
          - managedElementIds
          - managedElementIds
          state: UNAVAILABLE
      properties:
        rics:
          description: List of Near-RT RIC information objects
          items:
            $ref: '#/components/schemas/RicInfo'
          type: array
      type: object
    PolicyTypeInformation:
      description: A data tuple to indicate that an identified A1 Policy Type is supported
        at an identified Near-RT RIC.
      example:
        policyTypeId: STD_QOS2_0.1.0
        nearRtRicId: ric_g3_2
      properties:
        policyTypeId:
          description: A1 Policy Type identifier
          type: string
        nearRtRicId:
          description: Identity of the Near-RT RIC
          type: string
      required:
      - nearRtRicId
      - policyTypeId
      type: object
    NearRtRicId:
      description: Identity of the Near-RT RIC
      type: string
    PolicyTypeObject:
      description: "An A1 Policy Type, as defined in O-RAN Alliance A1TD"
      example:
        policySchema:
          $schema: http://json-schema.org/draft-07/schema#
          title: STD_QOS_0_2_0
          description: Policy data schema for STD_QOS_0.2.0 A1 Policy Instances.
          type: object
          properties:
            scope:
              type: object
              properties:
                ueId:
                  type: string
                qosId:
                  type: string
              additionalProperties: false
              required:
              - ueId
              - qosId
            qosObjectives:
              type: object
              properties:
                priorityLevel:
                  type: number
              additionalProperties: false
              required:
              - priorityLevel
        statusSchema:
          $schema: http://json-schema.org/draft-07/schema#
          title: STD_QOS_0.2.0
          description: Status schema for STD_QOS_0.2.0 A1 Policy Instances.
          type: object
          properties:
            enforceStatus:
              type: string
            enforceReason:
              type: string
            additionalProperties: false
            required:
            - enforceStatus
      properties:
        policySchema:
          description: |
            A schema to define the policy data contents of A1 Policy Instances.  Policy data schemas are Policy Type specific.  All A1 Policy Instances of an A1 Policy Type should comply with the type's policy data schema.
          type: object
        statusSchema:
          description: |
            A schema to define the contents of the status information for A1 Policy Instances.  Status schemas are Policy Type specific.  All status information for all A1 Policy Instances of an A1 Policy Type should comply  with the type's status schema.
          type: object
      required:
      - policySchema
      type: object
    PolicySchema:
      description: |
        A schema to define the policy data contents of A1 Policy Instances.  Policy data schemas are Policy Type specific.  All A1 Policy Instances of an A1 Policy Type should comply with the type's policy data schema.
      type: object
    StatusSchema:
      description: |
        A schema to define the contents of the status information for A1 Policy Instances.  Status schemas are Policy Type specific.  All status information for all A1 Policy Instances of an A1 Policy Type should comply  with the type's status schema.
      type: object
    PolicyObject:
      description: |
        Policy Object is a JSON representation policy data for an A1 Policy Instance. The schema for this policy data is defined in the corresponding A1 Policy Type.
      type: object
    ErrorInformation:
      description: Problem as defined in https://tools.ietf.org/html/rfc7807
      properties:
        detail:
          description: A human-readable explanation specific to this occurrence of
            the problem.
          example: Policy type not found
          type: string
        title:
          description: A specific error name
          example: Not Found
          type: string
        status:
          description: |
            The HTTP status code generated by the origin server for this occurrence of the problem.
          example: 404
          format: int32
          type: integer
      type: object
    PolicyStatusObject:
      description: |
        A generic policy status object that can be used to transport any policy status.  Additionally, a schema for policy status can be defined in the corresponding A1 Policy Type.
      type: object
    PolicyInformation:
      description: |
        Information tuple for a single A1 Policy Instance.  Contains the A1 Policy Instance ID, and the ID of the Near-RT RIC where the policy is created.
      example:
        policyId: policyId
        nearRtRicId: nearRtRicId
      properties:
        policyId:
          description: Identity of the A1 Policy Instance
          type: string
        nearRtRicId:
          description: Identity of the Near-RT RIC
          type: string
      required:
      - nearRtRicId
      - policyId
      type: object
    PolicyObjectInformation:
      description: Information to create an A1 Policy Instance
      example:
        policyId: POLICY-ID1
        nearRtRicId: Near-RT-Ric-ID1
        transient: false
        policyObject: "{}"
        serviceId: rApp 1
        policyTypeId: ORAN_QOS_1.0.0 '(typeName_SemVersion)'
      properties:
        nearRtRicId:
          description: Identity of the target Near-RT RIC
          example: Near-RT-Ric-ID1
          type: string
        transient:
          default: false
          description: |
            If true, the policy is automatically deleted if the targeted Near-RT RIC restarts  or recovers. If false, the A1 Policy Instance remains, and is re-pushed to the targeted  Near-RT RIC after a restart or recovery. If false, the A1 Policy Instance is maintained and  must be deleted separately in the event of Near-RT RIC restart or recovery. Default is false.
          nullable: false
          type: boolean
        policyId:
          description: |
            An optional identity to be used for the new A1 Policy Instance.  If this value is present, it must be unique. If not present the new A1  Policy Instance will be assigned a newly generated unique ID, and the  new ID can be extracted from the 'Location' header in the response.
          example: POLICY-ID1
          type: string
        serviceId:
          default: ""
          description: "the identity of the service owning the policy. This can be\
            \ used to group the policies (it is possible to get all policies associated\
            \ to a service). Note that the service does not need to be registered.\
            \ If the service is registered, the newly created A1 Policy Instance will\
            \ be subject to the same supervision rules as the the service's other\
            \ policies."
          example: rApp 1
          type: string
        policyObject:
          description: |
            Policy Object is a JSON representation policy data for an A1 Policy Instance. The schema for this policy data is defined in the corresponding A1 Policy Type.
          type: object
        policyTypeId:
          description: A1 Policy Type identity
          example: ORAN_QOS_1.0.0 '(typeName_SemVersion)'
          type: string
      required:
      - nearRtRicId
      - policyObject
      - policyTypeId
      type: object
    void:
      description: Void/empty
      type: object
    ServiceStatusList:
      example:
        serviceList:
        - keepAliveIntervalSeconds: 0
          callbackUrl: callbackUrl
          timeSinceLastActivitySeconds: 6
          serviceId: serviceId
        - keepAliveIntervalSeconds: 0
          callbackUrl: callbackUrl
          timeSinceLastActivitySeconds: 6
          serviceId: serviceId
      properties:
        serviceList:
          description: "List of Service Status objects, describing a collection of\
            \ registered services."
          items:
            $ref: '#/components/schemas/ServiceStatus'
          type: array
      type: object
    ServiceStatus:
      description: Information about a previously registered service
      example:
        keepAliveIntervalSeconds: 0
        callbackUrl: callbackUrl
        timeSinceLastActivitySeconds: 6
        serviceId: serviceId
      properties:
        callbackUrl:
          description: Callback URL for notifying of Near-RT RIC state changes
          type: string
        serviceId:
          description: Identity of the service
          type: string
        keepAliveIntervalSeconds:
          description: |
            Keep alive interval (seconds) for the service. This is used to enable optional heartbeat supervision of the service. If set (> 0) the registered service should regularly invoke a 'keepalive' REST call. When a service fails to invoke this 'keepalive' call within the configured time, the service is considered unavailable. An unavailable service will be automatically deregistered and its policies will be deleted. Value 0 means timeout supervision is disabled.
          format: int64
          type: integer
        timeSinceLastActivitySeconds:
          description: Time (seconds) since last recorded operation by the service
          format: int64
          type: integer
      type: object
    ServiceRegistrationInfo:
      description: Information for a service to be registered
      example:
        keepAliveIntervalSeconds: 0
        callbackUrl: callbackUrl
        serviceId: serviceId
      properties:
        callbackUrl:
          description: Callback URL for notifying of Near-RT RIC state changes
          type: string
        serviceId:
          description: Identity of the service
          type: string
        keepAliveIntervalSeconds:
          description: |
            Keep alive interval for the service. This is used to enable optional heartbeat supervision of the service. If set (> 0) the registered service should regularly invoke a 'keepalive' REST call. When a service fails to invoke this 'keepalive' call within the configured time, the service is considered unavailable. An unavailable service will be automatically deregistered and its policies will be deleted. Value 0 means timeout supervision is disabled.
          format: int64
          type: integer
      required:
      - serviceId
      type: object
    ServiceCallbackInfo:
      description: "Information transferred in Service callbacks, \nif a callback\
        \ URL was provided for a registered service\n"
      example:
        ricId: ricId
        eventType: AVAILABLE
      properties:
        ricId:
          description: Identity of a Near-RT RIC
          type: string
        eventType:
          description: "values: \n  AVAILABLE: the  Near-RT RIC has become available\
            \ for A1 Policy management\n"
          enum:
          - AVAILABLE
          type: string
      required:
      - eventType
      - ricId
      type: object
