.. This work is a derivative of https://wiki.onap.org/display/DW/Modeling+Concepts
.. This work is licensed under a Creative Commons Attribution 4.0
.. International License. http://creativecommons.org/licenses/by/4.0
.. Copyright (C) 2020 Deutsche Telekom AG.

Dynamic Payload
-------------------------------------

One of the most important API provided by the run time is to execute a CBA Package.

The nature of this API **request** and **response** is **model
driven** and **dynamic**.

Here is how the a **generic request** and **response** look like.

.. list-table::
   :widths: 50 50
   :header-rows: 1

   * - request
     - response
   * - .. code-block:: json

          {
           "commonHeader": {
              "originatorId": "",
              "requestId": "",
              "subRequestId": ""
           },
           "actionIdentifiers": {
              "blueprintName": "",
              "blueprintVersion": "",
              "actionName": "",
              "mode": ""
           },
           "payload": {
              "$actionName-request": {
                 "$actionName-properties": {
                 }
              }
           }
          }

     - .. code-block:: json
         
          {
           "commonHeader": {
              "originatorId": "",
              "requestId": "",
              "subRequestId": ""
           },
           "actionIdentifiers": {
              "blueprintName": "",
              "blueprintVersion": "",
              "actionName": "",
              "mode": ""
           },
           "payload": {
              "$actionName-response": {
              }
           }
          }

The ``actionName``, under the ``actionIdentifiers`` refers to the name of a
Workflow (see :ref:`workflow`)

The content of the ``payload`` is what is fully dynamic / model driven.

The first **top level element** will always be either
``$actionName-request`` for a request or ``$actionName-response`` for a response.

Then the **content within this element** is fully based on the
**workflow** **inputs** and **outputs**.

During the :ref:`enrichment` CDS will aggregate all the resources
defined to be resolved as input (see :ref:`node_type` -> Source -> Input), within mapping definition files
(see :ref:`artifact_type` -> Mapping), as data-type, that will then be use as type 
of an  input called ``$actionName-properties``.