.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0


Offered APIs
============

.. contents:: 
    :depth: 2

The Policy subsystem of ONAP maintains, distributes, and operates on the set of rules that underlie ONAP’s control, orchestration, and management functions. Policy provides a centralized environment for the creation and management of easily-updatable conditional rules. It enables users to validate policies and rules, identify and resolve overlaps and conflicts, and derive additional policies where needed.  The following operations are supported by the policy API:

* Create policies on the PAP 
* Update policies on the PAP
* Delete policies on the PAP or PDP
* Push policies from the PAP to the PDP
* List policies on the PDP
* Get config data of policies on the PDP
* Create Dictionary Items
* Update Dictionary Items
* Retrieve Dictionary Items
* Import Micro Services Models
* Retrieve Metrics for policy counts from PDP and PAP


POLICY Engine Services
^^^^^^^^^^^^^^^^^^^^^^

.. image:: PolicyEngineApiList.png

POLICY API Details
^^^^^^^^^^^^^^^^^^

.. swaggerv2doc:: api-docs.json


Additional Information
^^^^^^^^^^^^^^^^^^^^^^

Additional information, including examples, can be found at `PolicyApi link`_.

.. _PolicyApi link: https://wiki.onap.org/display/DW/Policy+API





End of Document

