#
# ============LICENSE_START=======================================================
# Copyright (C) 2024 Ericsson
# Modifications Copyright (C) 2024 OpenInfra Foundation Europe
# ================================================================================
# 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.2
info:
  x-api-id: 52812f69-83ac-4dfa-b83a-1a1bdf2d49b8
  x-audience: external-public
  description: |
    Topology Exposure and Inventory data is the information that represents entities
    in a telecommunications network and the relationships between them that
    provide insight into a particular aspect of the network of importance to
    specific use cases. Topology and Inventory data can be derived from
    inventory, configuration, or other data.

    Topology Exposure and Inventory supports several topology domains. A domain is a
    grouping of topology and inventory entities that handles topology and
    inventory data.

    Entities are enabling the modelling and storage of complex network
    infrastructure and relationships.

    A relationship is a bi-directional connection between two entities, one
    of which is the originating side (A-side) and the other is the
    terminating side (B-side). The order of the sides matters since it
    defines the relationship itself which must be unique.

    Classifier (also known as tag or label) permits the association of a 
    well defined user specified string with an entity or relationship.

    Decorators are user-defined attributes (key-value pairs) which can
    be applied to topology entities and relationships.

    Topology groups provide the capability to create user-defined collections of
    topology entities and/or relationships of any type. Groups can be either
    static or dynamic based on how they are created.

    Topology Exposure and Inventory API provides the capabilities to fetch topology
    data. Using the filtering options, it is possible to define more specific
    query requests.

    ## Querying simple entities
    The *entityTypeName* is used as the root of the queries (from here
    referred to as RootObject). Every other object, either in *targetFilter* or
    *scopeFilter*, has to relate to the RootObject. The queries are
    constructed starting from the RootObject and all other objects are joined
    to it. If there is no connection between the RootObject and the other
    object(s), the query is not constructed. The RootObject still can be
    retrieved and filtered using the */attributes*.

    | Use case                                                                                                                                                                                                                                                                                                                                                                                             | domainName | entityTypeName | targetFilter                    | scopeFilter                                                                            | Query result                                                                                                                   |
    |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:---------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------|
    | To return the ids for all instances of the entityTypeName used in the query.                                                                                                                                                                                                                                                                                                                         | RAN        | GNBDUFunction  |                                 |                                                                                        | All ids of every GNBDUFunction                                                                                                 |
    | To return all attributes of every instance of the entityTypeName used in the query.                                                                                                                                                                                                                                                                                                                  | RAN        | GNBDUFunction  | /attributes                     |                                                                                        | All GNBDUFunctions with every attribute                                                                                        |
    | To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the *targetFilter* parameter. <br/> Note: The attribute must be a valid field of the object.                                                                                                                                                                                            | RAN        | GNBDUFunction  | /attributes(gNBId)              |                                                                                        | All gNBIds of every GNBDUFunction                                                                                              |
    | To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the *targetFilter* parameter. <br/> Note: The attributes must be separated by a comma "," when using parenthesis "()".                                                                                                                                                                | RAN        | GNBDUFunction  | /attributes(gNBId, gNBIdLength) |                                                                                        | All gNBIds and gNBIdLengths of every GNBDUFunction                                                                             |
    | To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the *scopeFilter* parameter.                                                                                                                                                                                                                                               | RAN        | GNBDUFunction  |                                 | /sourceIds[contains (@item, 'SubNetwork=Europe')]                                      | Unique set of ids of GNBDUFunctions, where sourceIds contains *SubNetwork=Ireland*                                             |
    | To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the *scopeFilter* parameter. <br/> Note: The attributes must be separated by a *AND* or *OR*".                                                                                                                                                                                     | RAN        | GNBDUFunction  |                                 | /attributes [@gNBIdLength=1 and @gNBId=9]                                              | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9                                     |
    | To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the *scopeFilter* parameter. A condition is a complete unit of *scopeFilter* parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon ";" to represent AND, or a pipe symbol "&#124;" to represent OR. | RAN        | GNBDUFunction  |                                 | /attributes [@gNBIdLength=2]  &#124; /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with "SubNetwork=Europe" |

    ## Querying connected entities
    The *entityTypeName* is used as the root of the queries.

    | Use case                                                                                                                                                                  | domainName  | entityTypeName | targetFilter | scopeFilter                                                                                                                                                                                                                                   | Query result                                                                                                                                                                                                             |
    |:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
    | To return the ids for all instances of an entityTypeName related by an association.                                                                                       | REL_OAM_RAN | ENodeBFunction |              | /managed-by-managedElement                                                                                                                                                                                                                    | All ENodeBFunction entities that are managed by any Managed Element.                                                                                                                                                     |
    | To return the ids for all instances of an entityTypeName related by an association to another entity specified by its *id*.                                               | REL_OAM_RAN | ENodeBFunction |              | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1']                                                                                                                                                                            | All ENodeBFunction entities that are managed by the Managed Element *urn:3gpp:dn: ManagedElement=1*.                                                                                                                     |
    | To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their *id*.                            | REL_OAM_RAN | ENodeBFunction | /attributes  | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] &#124;  /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All EnodeBFunction entities with enbId as *1*, managed by the Managed Element *urn:3gpp:dn: ManagedElement=1* or *urn:3gpp:dn: ManagedElement=2*, and provides EuTranCell *urn:3gpp:dn: ManagedElement=1, EUtranCell=2*. |
    | To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given *scopeFilter* parameter. | RAN         | ENodeBFunction |              | /provided-euTranCell/attributes[@tac=1]                                                                                                                                                                                                       | All EnodeBFunction entities that provide an EuTranCell whose tac equals 1                                                                                                                                                |

    ## Querying based on geographical location
    The *entityTypeName* is used as the root of the queries. Use the "Well-known text" (WKT) representation of geometry to specify geometry objects.

    | Use case                                                                                                                                       | domainName  | entityTypeName | targetFilter | scopeFilter                                                                                                                                                                                                                                   | Query result                                                                                                                                                                                                             |
    |:-----------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
    | To return the ids for all instances of an entityTypeName where the given attribute is covered by the given polygon.                            | EQUIPMENT   | AntennaModule  |              | /attributes[coveredBy(@geo-location, 'POLYGON ((-73.958444 40.800533, -73.981962 40.768558, -73.973207 40.765048, -73.949861 40.797024, -73.958444 40.800533))')]                                                                             | All AntennaModule entities covered by the given polygon.                                                                                                                                                                 |
    | To return the attributes for all instances of an entityTypeName where the given attribute is covered by the given collection of polygons.      | EQUIPMENT   | AntennaModule  | /attributes  | /attributes[coveredBy(@geo-location, 'MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), (30 20, 20 15, 20 25, 30 20)))')]                                                                              | All AntennaModule entities covered by the given polygons.                                                                                                                                                                |
    | To return the ids for all instances of an entityTypeName within the given distance in meters from a given attribute.                           | EQUIPMENT   | AntennaModule  |              | /attributes[withinMeters(@geo-location, 'POINT(-73.958444 40.800533)', 500.5)]                                                                                                                                                                | All AntennaModule entities within the given distance from the given point.                                                                                                                                               |
    | To return the attributes for all instances of an entityTypeName which has a connected entity whose given attribute is within a polygon         | RAN         | NRCellDU       | /attributes  | /serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON ((-73.958444 40.800533, -73.981962 40.768558, -73.973207 40.765048, -73.949861 40.797024, -73.958444 40.800533))')]                                                       | All NRCellDU entities that have at least one connected AntennaModule with a geo-location attribute within the given polygon.                                                                                             |

    ## Querying entities for relationships
    The *entityTypeName* is used as the root of the queries.

    | Use case                                                                                                           | domainName  | entityTypeName | entityId                                       | targetFilter                            | scopeFilter                                                        | Query result                                                                                                                                                                                        |
    |:-------------------------------------------------------------------------------------------------------------------|-------------|:---------------|------------------------------------------------|:----------------------------------------|:-------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
    | To return the relationships for a given entity specified by its id.                                                | RAN         | GNBDUFunction  | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 |                                         |                                                                    | All relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1*.                                                                                                       |
    | To return specific relationships for a given entity specified by its id.                                           | REL_OAM_RAN | GNBDUFunction  | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | /MANAGEDELEMENT _MANAGES _GNBDUFUNCTION |                                                                    | All *MANAGEDELEMENT _MANAGES _GNBDUFUNCTION* relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1*.                                                              |
    | To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | GNBDUFunction  | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 |                                         | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All *MANAGEDELEMENT _MANAGES _GNBDUFUNCTION* relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1* where the managed element is *urn:3gpp:dn: ManagedElement=1*. |

    ## Querying on relationships
    Here, the *relationshipTypeName* is used as the root of the queries.

    | Use case                                                                                                 | domainName  | relationshipTypeName                    | targetFilter | scopeFilter                                                      | Query result                                                                                                                                                 |
    |:---------------------------------------------------------------------------------------------------------|-------------|:----------------------------------------|:-------------|:-----------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------|
    | To return all relationships for a specified relationship type.                                           | REL_OAM_RAN | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION |              |                                                                  | All MANAGEDELEMENT_MANAGES_ENODEBFUNCTION relationships.                                                                                                     |
    | To return all relationships for a specified relationship type with a specified association to an entity. | REL_OAM_RAN | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION |              | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | All MANAGEDELEMENT_MANAGES_ENODEBFUNCTION relationships having an association *managed-by-managedElement* to ManagedElement *urn:3gpp:dn: ManagedElement=1*. |
    
    ## Querying on classifiers and decorators
    The *domainName* is used as the root of the queries.

    | Use case                                                                                                                                          | domainName | targetFilter | scopeFilter                                               | Query result                                                                                                           |
    |:--------------------------------------------------------------------------------------------------------------------------------------------------|------------|--------------|:----------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------|
    | Return all related entity IDs that are exactly matched with the specified classifier with given domain name.                                      | RAN        |              | /classifiers[@item = 'gnbdu-function-model:Indoor']       | All the entity IDs that are classified with "gnbdu-function-model:Indoor" in RAN domain.                               |
    | Return all related entity IDs that are partially matched for the given classifier with given domain name.                                         | RAN        |              | /classifiers[contains(@item, 'Ind')]                      | All the entity IDs that are partially matched with "Ind" in RAN domain.                                                |
    | Return all related entity IDs that are exactly matched with the key-value pair that specified decorators with given domain name.                  | RAN        |              | /decorators[@gnbdu-function-model:textdata = 'Stockholm'] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata = 'Stockholm'" in RAN domain.          |
    | Return all related entity IDs that are exactly matched with key parameter where the value of the decorator is unknown with given domain name.     | RAN        |              | /decorators[contains(@gnbdu-function-model:textdata, '')] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata as key of the decorator in RAN domain. |

    The *entityName* is used as the root of the queries.
    
    | Use case                                                                                                                                                                                         | entityName   | relationshipTypeName | targetFilter              | scopeFilter                                                                                                     | Query result                                                                                                                                                                                               |
    |:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|:---------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
    | Return all related entity IDs and classifiers.                                                                                                                                                   | NRCellDU     |                      | /classifiers              |                                                                                                                 | All NRCellDU IDs and classifiers.                                                                                                                                                                          |
    | Return all related entity IDs and decorators.                                                                                                                                                    | NRCellDU     |                      | /decorators               |                                                                                                                 | All NRCellDU IDs and decorators.                                                                                                                                                                           |
    | Return all related entity IDs that are exact match for the given classifiers and decorators.                                                                                                     | NRCellDU     |                      |                           | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All NRCellDU IDs where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and where classifier exactly contains "gnbdu-function-model:Indoor".         |
    | Return all related entity IDs and classifiers that are partially matched for the given classifier.                                                                                               | NRCellDU     |                      | /classifiers              | /classifiers[contains(@item, 'Ind')]                                                                            | All NRCellDU IDs and classifiers partially contains the text "Ind".                                                                                                                                        |
    | Return all related entity IDs and decorators where key is a exact match and value is partially match.                                                                                            | NRCellDU     |                      | /decorators               | /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')]                                                   | All NRCellDU IDs and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc'.                                                               |
    | Return all related entity IDs, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU     |                      | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')]             | All NRCellDU IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text "Ind".  |
    
     The *relationshipTypeName* is used as the root of the queries.
    
    | Use case                                                                                                                                                                                               | entityName | relationshipTypeName                    | targetFilter              | scopeFilter                                                                                                                       | Query result                                                                                                                                                                                                                                |
    |:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:----------------------------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
    | Return all related relationships IDs and classifiers.                                                                                                                                                  |            | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers              |                                                                                                                                   | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and classifiers.                                                                                                                                                                            |
    | Return all related relationships IDs and decorators.                                                                                                                                                   |            | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators               |                                                                                                                                   | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators.                                                                                                                                                                             |
    | Return all related relationship IDs that are exact match for the given classifier and decorators.                                                                                                      |            | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION |                           | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm']                   | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and classifiers exactly contains "gnbdu-function-model:Indoor". |
    | Return all related relationships IDs and classifiers that are partially matched for the given classifier.                                                                                              |            | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers              | /classifiers[contains(@item, 'Ind')]                                                                                              | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text "Ind".                                                                                                                                              |
    | Return all related relationships IDs and decorators where key is a exact match and value is partially match.                                                                                           |            | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators               | /decorators[contains(@gnbdu-function-model:textdata, 'Stock')]                                                                    | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock'.                                                                    |
    | Return all related relationships IDs,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. |            | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stock')]                              | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text "Ind".   |

  version: 0.11.0
  title: Topology Exposure and Inventory API
  license:
    name: Copyright (C) 2024 Ericsson, Modifications Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
    url: http://www.apache.org/licenses/LICENSE-2.0
  termsOfService: http://www.apache.org/licenses/LICENSE-2.0

tags:
  - name: Entities and relationships
    description: "Provides the capability to retrieve topology and inventory entities and relationships."
  - name: Schemas
    description: "Schemas are defined in YANG modeling language. A group of Yang schemas makes the topology and inventory model, which represents topology and inventory entities, their attributes, and their relationships. For more information on YANG modelling language, see [IETF Documentation](https://datatracker.ietf.org/doc/html/rfc6020)."
  - name: Classifiers
    description: "Provides the capability to update or remove user-defined keywords or tags on entities and relationships."
  - name: Decorators
    description: "Provides the capability to update or remove user-defined values on entities and relationships."
  - name: Groups
    description: "Provides the capability to group topology entities and/or relationships of any type. Groups can be created in static or dynamic way. *Static groups*: Group members are defined statically upon group creation. It can include a maximum of 10,000 members. *Dynamic groups*: Group members are dynamically selected based on the defined resource query."

servers:
  - url: https://{host}/topology-inventory/v1alpha11
    variables:
      host:
        default: localhost
        description: Change this value to point to your custom host.

paths:
  /domains:
    get:
      description: Get all the available topology domains.
      tags:
        - Entities and relationships
      summary: Get all the available topology domains.
      operationId: "getAllDomains"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Domains'
              examples:
                domains:
                  $ref: '#/components/examples/DomainsResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /domains/{domainName}/entity-types:
    get:
      description: Get all the available topology entity types in domain name.
      tags:
        - Entities and relationships
      summary: Get all the available topology entity types in domain name.
      operationId: "getTopologyEntityTypes"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/domainNameInPath'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityTypes'
              examples:
                entityTypes:
                  $ref: '#/components/examples/EntityTypesResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /domains/{domainName}/entity-types/{entityTypeName}/entities:
    get:
      description: Get all topology entities of a specific entity type.
      tags:
        - Entities and relationships
      summary: Get all topology entities of a specific entity type.
      operationId: "getTopologyByEntityTypeName"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/domainNameInPath'
        - $ref: '#/components/parameters/entityTypeNameInPath'
        - $ref: '#/components/parameters/targetFilterOptionalInQuery'
        - $ref: '#/components/parameters/scopeFilterOptionalInQuery'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntitiesResponseMessage'
              examples:
                entities:
                  $ref: '#/components/examples/EntitiesResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /domains/{domainName}/entity-types/{entityTypeName}/entities/{entityId}:
    get:
      description: Get topology for entity type name with specified id.
        Specified id represents the entity instance.
      tags:
        - Entities and relationships
      summary: Get topology for entity type name with specified id. Specified
        id represents the entity instance.
      operationId: "getTopologyById"
      parameters:
        - $ref: '#/components/parameters/acceptYangJsonInHeader'
        - $ref: '#/components/parameters/domainNameInPath'
        - $ref: '#/components/parameters/entityTypeNameInPath'
        - $ref: '#/components/parameters/entityIdInPath'
      responses:
        '200':
          description: OK
          content:
            application/yang.data+json:
              schema:
                type: object
                description: "Refer to yang model for schema definition"
              examples:
                entity:
                  $ref: '#/components/examples/EntityResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /domains/{domainName}/entity-types/{entityTypeName}/entities/{entityId}/relationships:
    get:
      description: Get all relationships for entity type name with specified
        id. Specified id represents the entity instance.
      tags:
        - Entities and relationships
      summary: Get all relationships for entity type name with specified id.
        Specified id represents the entity instance.
      operationId: "getAllRelationshipsForEntityId"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/domainNameInPath'
        - $ref: '#/components/parameters/entityTypeNameInPath'
        - $ref: '#/components/parameters/entityIdInPath'
        - $ref: '#/components/parameters/targetFilterOptionalInQuery'
        - $ref: '#/components/parameters/scopeFilterOptionalInQuery'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RelationshipsResponseMessage'
              examples:
                relationships:
                  $ref: '#/components/examples/RelationshipsResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /domains/{domainName}/relationship-types:
    get:
      description: Get all the available topology relationship types in a specified domain.
      tags:
        - Entities and relationships
      summary: Get all the available topology relationship types.
      operationId: "getTopologyRelationshipTypes"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/domainNameInPath'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RelationshipTypes'
              examples:
                relationshipTypes:
                  $ref: '#/components/examples/RelationshipTypesResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /domains/{domainName}/relationship-types/{relationshipTypeName}/relationships:
    get:
      description: Get topology relationships of a specific relationship type
        name.
      tags:
        - Entities and relationships
      summary: Get topology relationships of a specific relationship type name.
      operationId: "getRelationshipsByType"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/domainNameInPath'
        - $ref: '#/components/parameters/relationshipTypeNameInPath'
        - $ref: '#/components/parameters/targetFilterOptionalInQuery'
        - $ref: '#/components/parameters/scopeFilterOptionalInQuery'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RelationshipsResponseMessage'
              examples:
                relationships:
                  $ref: '#/components/examples/RelationshipsResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /domains/{domainName}/relationship-types/{relationshipTypeName}/relationships/{relationshipId}:
    get:
      description: Get relationship with specified id. Specified id
        represents the relationship instance.
      tags:
        - Entities and relationships
      summary: Get relationship with specified id. Specified id represents
        the relationship instance.
      operationId: "getRelationshipById"
      parameters:
        - $ref: '#/components/parameters/acceptYangJsonInHeader'
        - $ref: '#/components/parameters/domainNameInPath'
        - $ref: '#/components/parameters/relationshipTypeNameInPath'
        - $ref: '#/components/parameters/relationshipIdInPath'
      responses:
        '200':
          description: OK
          content:
            application/yang.data+json:
              schema:
                type: object
                description: "Refer to yang model for schema definition"
              examples:
                relationship:
                  $ref: '#/components/examples/RelationshipResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /domains/{domainName}/entities:
    get:
      description: Get topology entities by domain, using a specified
        *targetFilter* as a query parameter.
      tags:
        - Entities and relationships
      summary: "Get entities by domain"
      operationId: "getEntitiesByDomain"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/domainNameInPath'
        - $ref: '#/components/parameters/targetFilterOptionalInQuery'
        - $ref: '#/components/parameters/scopeFilterOptionalInQuery'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntitiesResponseMessage'
              examples:
                entities:
                  $ref: '#/components/examples/EntitiesResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /schemas:
    post:
      description: Create a new schema. The request body contains the schema in YANG format.
      tags:
        - Schemas
      summary: Create a new schema.
      operationId: createSchema
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/contentTypeMultipartFileInHeader'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/MultipartFile'
      responses:
        '201':
          $ref: '#/components/responses/Created'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'

    get:
      description: Get a list of all schemas.
      tags:
        - Schemas
      summary: Get a list of all schemas.
      operationId: getSchemas
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/domainOptionalInQuery'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SchemaList'
              examples:
                schemas:
                  $ref: '#/components/examples/SchemasResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /schemas/{schemaName}/content:
    get:
      description: Get the model schema by name.
      tags:
        - Schemas
      summary: Get the model schema.
      operationId: getSchemaByName
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/schemaNameInPath'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                type: string
              examples:
                schema:
                  $ref: '#/components/examples/SchemaResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /schemas/{schemaName}:
    delete:
      description: Delete a schema.
      tags:
        - Schemas
      summary: Delete a schema.
      operationId: deleteSchema
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/schemaNameInPath'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /classifiers:
    post:
      description: Update entities and/or relationships with classifier(s). The sum of the given entityIds and relationshipIds cannot exceed 100 by default.
      tags:
        - Classifiers
      summary: Update entities and/or relationships with classifier(s).
      operationId: updateClassifier
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/contentTypeJsonInHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Classifier'
            examples:
              updateClassifier:
                $ref: '#/components/examples/ClassifierMergeExample'
              removeClassifier:
                $ref: '#/components/examples/ClassifierDeleteExample'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /decorators:
    post:
      description: Update entities and/or relationships with decorator(s). The sum of the given entityIds and relationshipIds cannot exceed 100 by default.
      tags:
        - Decorators
      summary: Update entities and/or relationships with decorator(s).
      operationId: updateDecorator
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/contentTypeJsonInHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Decorator'
            examples:
              mergeDecorator:
                $ref: '#/components/examples/DecoratorMergeExample'
              removeDecorator:
                $ref: '#/components/examples/DecoratorDeleteExample'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /groups:
    post:
      description: Create a group of entities and/or relationships in a static or dynamic way.
      tags:
        - Groups
      summary: Create a new group.
      operationId: "createGroup"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/contentTypeJsonInHeader'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateGroupPayload'
            examples:
              staticGroup:
                $ref: '#/components/examples/CreateStaticGroupPayloadExample'
              dynamicGroup:
                $ref: '#/components/examples/CreateDynamicGroupGetEntitiesByDomainPayloadExample'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupByIdResponse'
              examples:
                static:
                  $ref: '#/components/examples/StaticGroupResponseExample'
                dynamic:
                  $ref: '#/components/examples/DynamicGroupResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'
    get:
      description: Get all groups.
      tags:
        - Groups
      summary: Get all groups.
      operationId: "getAllGroups"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
        - $ref: '#/components/parameters/groupNameOptionalInQuery'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupsResponse'
              examples:
                groups:
                  $ref: '#/components/examples/GroupsResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /groups/{groupId}:
    get:
      description: Get a group with specified id.
      tags:
        - Groups
      summary: Get a group with specified id.
      operationId: "getGroupById"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/groupIdInPath'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupByIdResponse'
              examples:
                static:
                  $ref: '#/components/examples/StaticGroupResponseExample'
                dynamic:
                  $ref: '#/components/examples/DynamicGroupResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      description: Delete a group with specified id.
      tags:
        - Groups
      summary: Delete a group with specified id.
      operationId: "deleteGroup"
      parameters:
        - $ref: '#/components/parameters/groupIdInPath'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /groups/{groupId}/name:
    put:
      description: Update the name of a group.
      tags:
        - Groups
      summary: Update the name of a group.
      operationId: "updateGroupName"
      parameters:
        - $ref: '#/components/parameters/contentTypeJsonInHeader'
        - $ref: '#/components/parameters/groupIdInPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateGroupNamePayload'
            examples:
              GroupNameUpdatePayload:
                $ref: '#/components/examples/UpdateGroupNamePayloadExample'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /groups/{groupId}/members:
    get:
      description: Get the members of a group with specified id.
      tags:
        - Groups
      summary: Get the members of a group with specified id.
      operationId: "getMembers"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/groupIdInPath'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MembersResponse'
              examples:
                members:
                  $ref: '#/components/examples/MembersResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /groups/{groupId}/provided-members:
    get:
      description: Get the provided members of a static group with specified id.
      tags:
        - Groups
      summary: Get the provided members of a static group with specified id.
      operationId: "getProvidedMembers"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/groupIdInPath'
        - $ref: '#/components/parameters/groupMembersStatusOptionalInQuery'
        - $ref: '#/components/parameters/offsetParam'
        - $ref: '#/components/parameters/limitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MembersResponse'
              examples:
                members:
                  $ref: '#/components/examples/ProvidedMembersResponseExample'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /groups/{groupId}/provided-members-operations:
    post:
      description: Merge or remove members in an existing topology group. This operation is applicable for static group only.
      tags:
        - Groups
      summary: Merge or remove members of a static group.
      operationId: "updateProvidedMembers"
      parameters:
        - $ref: '#/components/parameters/acceptJsonInHeader'
        - $ref: '#/components/parameters/contentTypeJsonInHeader'
        - $ref: '#/components/parameters/groupIdInPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProvidedMembersPayload'
            examples:
              mergeMembersPayload:
                $ref: '#/components/examples/MergeProvidedMembersPayloadExample'
              deleteMembersPayload:
                $ref: '#/components/examples/RemoveProvidedMembersPayloadExample'
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'

components:
  schemas:
    Classifier:
      type: object
      title: Classifier
      properties:
        operation:
          type: string
          enum:
            - merge
            - delete
        classifiers:
          type: array
          items:
            type: string
        entityIds:
          type: array
          items:
            type: string
        relationshipIds:
          type: array
          items:
            type: string
    Decorator:
      type: object
      title: Decorator
      properties:
        operation:
          type: string
          enum:
            - merge
            - delete
        decorators:
          type: object
          additionalProperties: true
          description: Decorators must be defined in schema before use. Data type of a decorator is restricted as defined by its schema.
        entityIds:
          type: array
          items:
            type: string
        relationshipIds:
          type: array
          items:
            type: string
    Domains:
      type: object
      title: Domains
      properties:
        items:
          type: array
          items:
            properties:
              name:
                type: string
              entityTypes:
                $ref: '#/components/schemas/Href'
              relationshipTypes:
                $ref: '#/components/schemas/Href'
        self:
          $ref: '#/components/schemas/Href'
        first:
          $ref: '#/components/schemas/Href'
        prev:
          $ref: '#/components/schemas/Href'
        next:
          $ref: '#/components/schemas/Href'
        last:
          $ref: '#/components/schemas/Href'
        totalCount:
          type: integer
    EntityTypes:
      type: object
      title: EntityTypes
      properties:
        items:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              entities:
                $ref: '#/components/schemas/Href'
        self:
          $ref: '#/components/schemas/Href'
        first:
          $ref: '#/components/schemas/Href'
        prev:
          $ref: '#/components/schemas/Href'
        next:
          $ref: '#/components/schemas/Href'
        last:
          $ref: '#/components/schemas/Href'
        totalCount:
          type: integer
    EntitiesResponseMessage:
      type: object
      title: Entities
      properties:
        items:
          type: array
          items:
            type: object
            description: "Refer to yang model for schema definition of topology entities"
        self:
          $ref: '#/components/schemas/Href'
        first:
          $ref: '#/components/schemas/Href'
        prev:
          $ref: '#/components/schemas/Href'
        next:
          $ref: '#/components/schemas/Href'
        last:
          $ref: '#/components/schemas/Href'
        totalCount:
          type: integer
    RelationshipTypes:
      type: object
      title: RelationshipTypes
      properties:
        items:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              relationships:
                $ref: '#/components/schemas/Href'
        self:
          $ref: '#/components/schemas/Href'
        first:
          $ref: '#/components/schemas/Href'
        prev:
          $ref: '#/components/schemas/Href'
        next:
          $ref: '#/components/schemas/Href'
        last:
          $ref: '#/components/schemas/Href'
        totalCount:
          type: integer
    RelationshipsResponseMessage:
      type: object
      title: Relationships
      properties:
        items:
          type: array
          items:
            type: object
            description: "Refer to yang model for schema definition of topology relationships"
        self:
          $ref: '#/components/schemas/Href'
        first:
          $ref: '#/components/schemas/Href'
        prev:
          $ref: '#/components/schemas/Href'
        next:
          $ref: '#/components/schemas/Href'
        last:
          $ref: '#/components/schemas/Href'
        totalCount:
          type: integer
    ErrorMessage:
      type: object
      title: Error
      properties:
        status:
          type: string
        message:
          type: string
        details:
          type: string
    Href:
      type: object
      title: Href
      properties:
        href:
          type: string
          format: uri-template
    MultipartFile:
      type: object
      required:
        - file
      properties:
        file:
          type: string
          description: multipartFile
          format: binary
    Schema:
      type: object
      title: Schema
      properties:
        name:
          type: string
        domain:
          type: string
        revision:
          type: string
        content:
          $ref: '#/components/schemas/Href'
    SchemaList:
      type: object
      title: Schemas
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Schema'
        self:
          $ref: '#/components/schemas/Href'
        first:
          $ref: '#/components/schemas/Href'
        prev:
          $ref: '#/components/schemas/Href'
        next:
          $ref: '#/components/schemas/Href'
        last:
          $ref: '#/components/schemas/Href'
        totalCount:
          type: integer
    StaticEnum:
      type: string
      enum:
        - static
    DynamicEnum:
      type: string
      enum:
        - dynamic
    CreateGroupPayload:
      title: CreateGroupPayload
      type: object
      oneOf:
        - $ref: '#/components/schemas/static'
        - $ref: '#/components/schemas/dynamic'
      discriminator:
        propertyName: type
    static:
      title: CreateStaticGroupPayload
      type: object
      required:
        - name
        - type
        - providedMembers
      properties:
        name:
          type: string
          description: A name of the topology group.
          minLength: 1
          maxLength: 150
        type:
          type: string
          description: 'Allowed: static'
        providedMembers:
          type: array
          minItems: 1
          items:
            type: object
            description: Refer to yang model for schema definition of topology objects.
    dynamic:
      title: CreateDynamicGroupPayload
      type: object
      required:
        - name
        - type
        - criteria
      properties:
        name:
          type: string
          description: A name of the topology group.
          minLength: 1
          maxLength: 150
        type:
          type: string
          description: 'Allowed: dynamic'
        criteria:
          $ref: '#/components/schemas/Criteria'
    Criteria:
      title: Criteria
      type: object
      oneOf:
        - $ref: '#/components/schemas/getEntitiesByDomain'
        - $ref: '#/components/schemas/getEntitiesByType'
        - $ref: '#/components/schemas/getRelationshipsForEntityId'
        - $ref: '#/components/schemas/getRelationshipsByType'
      discriminator:
        propertyName: queryType
    getEntitiesByDomain:
      title: getEntitiesByDomain
      type: object
      required:
        - queryType
        - domain
      properties:
        queryType:
          type: string
          description: 'Allowed: getEntitiesByDomain'
        domain:
          type: string
        targetFilter:
          type: string
        scopeFilter:
          type: string
    getEntitiesByType:
      title: getEntitiesByType
      type: object
      required:
        - queryType
        - domain
        - entityTypeName
      properties:
        queryType:
          type: string
          description: 'Allowed: getEntitiesByType'
        domain:
          type: string
        entityTypeName:
          type: string
        targetFilter:
          type: string
        scopeFilter:
          type: string
    getRelationshipsForEntityId:
      title: getRelationshipsForEntityId
      type: object
      required:
        - queryType
        - domain
        - entityTypeName
        - entityId
      properties:
        queryType:
          type: string
          description: 'Allowed: getRelationshipsForEntityId'
        domain:
          type: string
        entityTypeName:
          type: string
        entityId:
          type: string
        targetFilter:
          type: string
        scopeFilter:
          type: string
    getRelationshipsByType:
      title: getRelationshipsByType
      type: object
      required:
        - queryType
        - domain
        - relationshipTypeName
      properties:
        queryType:
          type: string
          description: 'Allowed: getRelationshipsByType'
        domain:
          type: string
        relationshipTypeName:
          type: string
        targetFilter:
          type: string
        scopeFilter:
          type: string
    GroupsResponse:
      title: Groups
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/GroupResponse'
        self:
          $ref: '#/components/schemas/Href'
        first:
          $ref: '#/components/schemas/Href'
        prev:
          $ref: '#/components/schemas/Href'
        next:
          $ref: '#/components/schemas/Href'
        last:
          $ref: '#/components/schemas/Href'
        totalCount:
          type: integer
    GroupResponse:
      title: Group
      type: object
      oneOf:
        - $ref: '#/components/schemas/StaticGroupResponse'
        - $ref: '#/components/schemas/DynamicGroupResponse'
    StaticGroupResponse:
      title: StaticGroup
      type: object
      required:
        - id
        - name
        - type
        - members
        - providedMembers
      properties:
        id:
          type: string
          description: The unique identifier of the topology group.
        name:
          type: string
          description: The unique name of the topology group.
        type:
          $ref: '#/components/schemas/StaticEnum'
        members:
          $ref: '#/components/schemas/Href'
        providedMembers:
          $ref: '#/components/schemas/Href'
    DynamicGroupResponse:
      title: DynamicGroup
      type: object
      required:
        - id
        - name
        - type
        - members
      properties:
        id:
          type: string
          description: The unique identifier of the topology group.
        name:
          type: string
          description: The unique name of the topology group.
        type:
          $ref: '#/components/schemas/DynamicEnum'
        members:
          $ref: '#/components/schemas/Href'
    GroupByIdResponse:
      title: Group
      type: object
      oneOf:
        - $ref: '#/components/schemas/StaticGroupByIdResponse'
        - $ref: '#/components/schemas/DynamicGroupByIdResponse'
    StaticGroupByIdResponse:
      title: StaticGroup
      type: object
      required:
        - id
        - name
        - type
        - members
        - providedMembers
      properties:
        id:
          type: string
          description: The unique identifier of the topology group.
        name:
          type: string
          description: The unique name of the topology group.
        type:
          $ref: '#/components/schemas/StaticEnum'
        members:
          $ref: '#/components/schemas/Href'
        providedMembers:
          $ref: '#/components/schemas/Href'
    DynamicGroupByIdResponse:
      title: DynamicGroup
      type: object
      required:
        - id
        - name
        - type
        - members
        - criteria
      properties:
        id:
          type: string
          description: The unique identifier of the topology group.
        name:
          type: string
          description: The unique name of the topology group.
        type:
          $ref: '#/components/schemas/DynamicEnum'
        members:
          $ref: '#/components/schemas/Href'
        criteria:
          $ref: '#/components/schemas/Criteria'
    MembersResponse:
      title: GroupMembers
      type: object
      properties:
        items:
          type: array
          items:
            type: object
            description: Refer to yang model for schema definition of topology objects.
        self:
          $ref: '#/components/schemas/Href'
        first:
          $ref: '#/components/schemas/Href'
        prev:
          $ref: '#/components/schemas/Href'
        next:
          $ref: '#/components/schemas/Href'
        last:
          $ref: '#/components/schemas/Href'
        totalCount:
          type: integer
    UpdateProvidedMembersPayload:
      title: UpdateProvidedMembersPayload
      type: object
      required:
        - operation
        - providedMembers
      properties:
        operation:
          type: string
          description: The operation to be performed on the members of topology group.
          enum: [merge, remove]
        providedMembers:
          description: Members to be added or removed from the group.
          type: array
          minItems: 1
          items:
            type: object
            description: Refer to yang model for schema definition of topology objects.
    UpdateGroupNamePayload:
      title: UpdateGroupNamePayload
      type: object
      required:
        - name
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 150

  responses:
    NotFound:
      description: Not Found
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          example:
            status: '404'
            title: Resource Not Found
            details: The requested resource is not found
    Unauthorized:
      description: Unauthorized
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          example:
            status: '401'
            title: Unauthorized request
            details: This request is unauthorized
    Forbidden:
      description: Forbidden
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          example:
            status: '403'
            title: Request Forbidden
            details: This request is forbidden
    BadRequest:
      description: Bad Request
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          example:
            status: '400'
            title: Bad Request
            details: The provided request is not valid
    Conflict:
      description: Conflict
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          example:
            status: '409'
            title: Conflicting request
            details: The request cannot be processed as the resource is in use.
    Created:
      description: Created without response body
    InternalServerError:
      description: Internal Server Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          example:
            status: '500'
            title: Internal Server Error
            details: Internal Server Error occurred
    NoContent:
      description: No Content
      content: {}

  parameters:
    acceptJsonInHeader:
      name: Accept
      in: header
      required: true
      schema:
        type: string
        example: application/json
        default: application/json
    acceptYangJsonInHeader:
      name: Accept
      in: header
      required: true
      schema:
        type: string
        example: application/yang.data+json
        default: application/yang.data+json
    contentTypeMultipartFileInHeader:
      name: Content-Type
      in: header
      required: true
      schema:
        type: string
        example: multipart/form-data
        default: multipart/form-data
    contentTypeJsonInHeader:
      name: Content-Type
      in: header
      required: true
      schema:
        type: string
        example: application/json
        default: application/json
    offsetParam:
      name: offset
      in: query
      description: Pagination offset.
      required: false
      schema:
        type: integer
        default: 0
        minimum: 0
    limitParam:
      name: limit
      in: query
      description: Result limiter.
      required: false
      schema:
        type: integer
        default: 500
        minimum: 1
        maximum: 500
    domainNameInPath:
      name: domainName
      in: path
      description: domain name
      required: true
      schema:
        type: string
        example: RAN
    schemaNameInPath:
      name: schemaName
      in: path
      required: true
      schema:
        type: string
        default: "o-ran-smo-teiv-ran"
    groupIdInPath:
      name: groupId
      in: path
      required: true
      schema:
        type: string
    entityIdInPath:
      name: entityId
      in: path
      required: true
      schema:
        type: string
    relationshipIdInPath:
      name: relationshipId
      in: path
      required: true
      schema:
        type: string
    entityTypeNameInPath:
      name: entityTypeName
      in: path
      required: true
      schema:
        type: string
    relationshipTypeNameInPath:
      name: relationshipTypeName
      in: path
      required: true
      schema:
        type: string
        example: NRCELLDU_USES_NRSECTORCARRIER
    domainOptionalInQuery:
      name: domain
      in: query
      required: false
      schema:
        type: string
      examples:
        domain:
          value: RAN
    targetFilterOptionalInQuery:
      name: targetFilter
      description: Use *targetFilter* to specify what needs to be returned in the REST response.
      in: query
      required: false
      schema:
        type: string
      examples:
        targetFilter:
          value: /sourceIds;/classifiers
    scopeFilterOptionalInQuery:
      name: scopeFilter
      description: ScopeFilter is used to specify the conditions to be applied.
      in: query
      required: false
      schema:
        type: string
      examples:
        scopeFilter:
          value: /sourceIds[contains(@item,'ManagedElement=1')]
    groupMembersStatusOptionalInQuery:
      name: status
      description: Status can be present (or) not-present (or) invalid. If not specified, returns all members of the group.
      in: query
      required: false
      schema:
        type: string
        enum: [present, not-present, invalid]
    groupNameOptionalInQuery:
      name: name
      description: Group name. If not specified, returns all the groups.
      in: query
      required: false
      schema:
        type: string

  examples:
    ClassifierMergeExample:
      value:
        operation: merge
        classifiers:
          - module-x:Outdoor
          - module-y:Rural
          - module-z:Weekend
        entityIds:
          - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
          - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
        relationshipIds:
          - "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
    ClassifierDeleteExample:
      value:
        operation: delete
        classifiers:
          - module-x:Outdoor
          - module-z:Weekend
        entityIds:
          - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
          - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
        relationshipIds:
          - "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"

    DecoratorMergeExample:
      value:
        operation: merge
        decorators:
          module-x:location: Stockholm
          module-y:vendor: Ericsson
        entityIds:
          - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
          - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
        relationshipIds:
          - "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
    DecoratorDeleteExample:
      value:
        operation: delete
        decorators:
          module-x:location: Stockholm
        entityIds:
          - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
          - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
        relationshipIds:
          - "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"

    EntityResponseExample:
      value:
        o-ran-smo-teiv-ran:NRCellDU:
          - id: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
            attributes:
              cellLocalId: 91
              nCI: 91
              nRPCI: 789
              nRTAC: 456
            decorators:
              location: Stockholm
            classifiers:
              - Rural
            sourceIds:
              - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
              - "urn:cmHandle:395221E080CCF0FD1924103B15873814"

    EntitiesResponseExample:
      value:
        items:
          - o-ran-smo-teiv-ran:GNBCUUPFunction:
              - id: "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,GNBCUUPFunction=10"
                attributes:
                  gNBId: 10
                  gNBIdLength: 2
                sourceIds:
                  - "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,GNBCUUPFunction=10"
                  - "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"
          - o-ran-smo-teiv-ran:GNBCUUPFunction:
              - id: "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,GNBCUUPFunction=13"
                attributes:
                  gNBId: 13
                  gNBIdLength: 2
                sourceIds:
                  - "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,GNBCUUPFunction=13"
                  - "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"
          - o-ran-smo-teiv-ran:GNBCUUPFunction:
              - id: "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,GNBCUUPFunction=14"
                attributes:
                  gNBId: 14
                  gNBIdLength: 2
                sourceIds:
                  - "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,GNBCUUPFunction=14"
                  - "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"
        self:
          href: "/domains/RAN/entities?offset=0&limit=3&targetFilter=/sourceIds;/attributes"
        first:
          href: "/domains/RAN/entities?offset=0&limit=3&targetFilter=/sourceIds;/attributes"
        prev:
          href: "/domains/RAN/entities?offset=0&limit=3&targetFilter=/sourceIds;/attributes"
        next:
          href: "/domains/RAN/entities?offset=3&limit=3&targetFilter=/sourceIds;/attributes"
        last:
          href: "/domains/RAN/entities?offset=33&limit=3&targetFilter=/sourceIds;/attributes"
        totalCount: 3

    RelationshipResponseExample:
      value:
        o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
          - id: "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
            aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
            bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1"
            sourceIds: []

    RelationshipsResponseExample:
      value:
        items:
          - o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
              - id: "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
                aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
                bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1"
                sourceIds: []
          - o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
              - id: "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=11AB21444F9D7C6DAC7453879AB5586D294B495E43AC6F94750767DD624014DB7317E9A5EE73239876649D801037D6347355B19C5D97222B3C25000CF8A97C78"
                aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
                bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=2"
                sourceIds: []
        self:
          href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500"
        first:
          href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500"
        prev:
          href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500"
        next:
          href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500"
        last:
          href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500"
        totalCount: 2

    EntityTypesResponseExample:
      value:
        items:
          - name: "AntennaCapability"
            entities:
              href: "/domains/RAN/entity-types/AntennaCapability/entities"
          - name: "ENodeBFunction"
            entities:
              href: "/domains/RAN/entity-types/ENodeBFunction/entities"
          - name: "EUtranCell"
            entities:
              href: "/domains/RAN/entity-types/EUtranCell/entities"
        self:
          href: "/domains/RAN/entity-types?offset=0&limit=3"
        first:
          href: "/domains/RAN/entity-types?offset=0&limit=3"
        prev:
          href: "/domains/RAN/entity-types?offset=0&limit=3"
        next:
          href: "/domains/RAN/entity-types?offset=3&limit=3"
        last:
          href: "/domains/RAN/entity-types?offset=9&limit=3"
        totalCount: 11

    RelationshipTypesResponseExample:
      value:
        items:
          - name: "MANAGEDELEMENT_MANAGES_GNBDUFUNCTION"
            relationships:
              href: "/domains/RAN/relationship-types/MANAGEDELEMENT_MANAGES_GNBDUFUNCTION/relationships"
          - name: "GNBDUFUNCTION_PROVIDES_NRCELLDU"
            relationships:
              href: "/domains/RAN/relationship-types/GNBDUFUNCTION_PROVIDES_NRCELLDU/relationships"
          - name: "NRCELLDU_USES_NRSECTORCARRIER"
            relationships:
              href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships"
        self:
          href: "/domains/RAN/relationship-types?offset=0&limit=3"
        first:
          href: "/domains/RAN/relationship-types?offset=0&limit=3"
        prev:
          href: "/domains/RAN/relationship-types?offset=0&limit=3"
        next:
          href: "/domains/RAN/relationship-types?offset=0&limit=3"
        last:
          href: "/domains/RAN/relationship-types?offset=0&limit=3"
        totalCount: 3

    DomainsResponseExample:
      value:
        items:
          - name: "EQUIPMENT"
            entityTypes:
              href: "/domains/EQUIPMENT/entity-types"
            relationshipTypes:
              href: "/domains/EQUIPMENT/relationship-types"
          - name: "OAM"
            entityTypes:
              href: "/domains/OAM/entity-types"
            relationshipTypes:
              href: "/domains/OAM/relationship-types"
          - name: "RAN"
            entityTypes:
              href: "/domains/RAN/entity-types"
            relationshipTypes:
              href: "/domains/RAN/relationship-types"
          - name: "REL_EQUIPMENT_RAN"
            entityTypes:
              href: "/domains/REL_EQUIPMENT_RAN/entity-types"
            relationshipTypes:
              href: "/domains/REL_EQUIPMENT_RAN/relationship-types"
          - name: "REL_OAM_RAN"
            entityTypes:
              href: "/domains/REL_OAM_RAN/entity-types"
            relationshipTypes:
              href: "/domains/REL_OAM_RAN/relationship-types"
          - name: "TEIV"
            entityTypes:
              href: "/domains/TEIV/entity-types"
            relationshipTypes:
              href: "/domains/TEIV/relationship-types"
        self:
          href: "/domains?offset=0&limit=500"
        first:
          href: "/domains?offset=0&limit=500"
        prev:
          href: "/domains?offset=0&limit=500"
        next:
          href: "/domains?offset=0&limit=500"
        last:
          href: "/domains?offset=0&limit=500"
        totalCount: 6

    SchemasResponseExample:
      value:
        items:
          - name: "o-ran-smo-teiv-ran"
            domain: "RAN"
            revision: "2024-05-24"
            content:
              href: "/schemas/o-ran-smo-teiv-ran/content"
          - name: "o-ran-smo-teiv-equipment"
            domain: "EQUIPMENT"
            revision: "2024-05-24"
            content:
              href: "/schemas/o-ran-smo-teiv-equipment/content"
          - name: "o-ran-smo-teiv-oam"
            domain: "OAM"
            revision: "2024-05-24"
            content:
              href: "/schemas/o-ran-smo-teiv-oam/content"
          - name: "o-ran-smo-teiv-rel-oam-ran"
            domain: "REL_OAM_RAN"
            revision: "2024-05-24"
            content:
              href: "/schemas/o-ran-smo-teiv-rel-oam-ran/content"
          - name: "o-ran-smo-teiv-rel-equipment-ran"
            domain: "REL_EQUIPMENT_RAN"
            revision: "2024-05-24"
            content:
              href: "/schemas/o-ran-smo-teiv-rel-equipment-ran/content"
          - name: "o-ran-smo-teiv-common-yang-types"
            domain: ""
            revision: "2024-05-24"
            content:
              href: "/schemas/o-ran-smo-teiv-common-yang-types/content"
          - name: "o-ran-smo-teiv-common-yang-extensions"
            domain: ""
            revision: "2024-05-24"
            content:
              href: "/schemas/o-ran-smo-teiv-common-yang-extensions/content"
          - name: "ietf-geo-location"
            domain: ""
            revision: "2022-02-11"
            content:
              href: "/schemas/ietf-geo-location/content"
          - name: "_3gpp-common-yang-extensions"
            domain: ""
            revision: "2019-06-23"
            content:
              href: "/schemas/_3gpp-common-yang-extensions/content"
          - name: "_3gpp-common-yang-types"
            domain: ""
            revision: "2023-11-06"
            content:
              href: "/schemas/_3gpp-common-yang-types/content"
          - name: "ietf-yang-types"
            domain: ""
            revision: "2013-07-15"
            content:
              href: "/schemas/ietf-yang-types/content"
          - name: "ietf-inet-types"
            domain: ""
            revision: "2013-07-15"
            content:
              href: "/schemas/ietf-inet-types/content"
        self:
          href: "/schemas?offset=0&limit=500"
        first:
          href: "/schemas?offset=0&limit=500"
        prev:
          href: "/schemas?offset=0&limit=500"
        next:
          href: "/schemas?offset=0&limit=500"
        last:
          href: "/schemas?offset=0&limit=500"
        totalCount: 12

    SchemaResponseExample:
      value: |
        module o-ran-smo-teiv-ran {
        yang-version 1.1;
        namespace "urn:o-ran:smo-teiv-ran";
        prefix or-teiv-ran;
        import o-ran-smo-teiv-common-yang-types {prefix or-teiv-types; }
        import o-ran-smo-teiv-common-yang-extensions {prefix or-teiv-yext; }
        import _3gpp-common-yang-types { prefix types3gpp; }
        organization "ORAN";
        description
        "Sample Model.";
        revision "2024-05-24" {
          description "Initial revision."
          or-teiv-yext:label 0.1.0;
        }
        or-teiv-yext:domain RAN;
        list GNBDUFunction {
          uses or-teiv-types:Top_Grp_Type;
          key id;
          container attributes {
            container dUpLMNId {
              uses types3gpp:PLMNId;
            }
            leaf gNBDUId {
              type uint32;
            }
            leaf gNBId {
              type uint32;
            }
            leaf gNBIdLength {
              type uint32;
            }
          }
        }
        list NRCellDU {
          uses or-teiv-types:Top_Grp_Type;
          key id;
          container attributes {
            leaf cellLocalId {
              type uint32;
            }
            leaf nCI {
              type uint32;
            }
            leaf nRPCI {
              type uint32;
            }
            leaf nRTAC {
              type uint32;
            }
          }
        }
        list NRSectorCarrier {
          uses or-teiv-types:Top_Grp_Type;
          key id;
            container attributes {
              leaf arfcnDL {
                type uint32;
              }
              leaf arfcnUL {
                type uint32;
              }
              leaf frequencyDL {
                type uint32;
              }
              leaf frequencyUL {
                type uint32;
              }
              leaf bSChannelBwDL {
                type uint32;
              }
            }
          }
        }

    CreateStaticGroupPayloadExample:
      value:
        name: cell-filter-group-1
        type: static
        providedMembers:
          - o-ran-smo-teiv-ran:NRCellDU:
              - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
          - o-ran-smo-teiv-ran:GNBDUFunction:
              - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1
          - o-ran-smo-teiv-oam:ManagedElement:
              - id: urn:3gpp:dn:ManagedElement=1
          - o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU:
              - id: urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418
          - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION:
              - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56

    CreateDynamicGroupGetEntitiesByDomainPayloadExample:
      value:
        name: cell-filter-group-2
        type: dynamic
        criteria:
          queryType: getEntitiesByDomain
          domain: RAN
          targetFilter: /NRCellDU/attributes(nCI)
          scopeFilter: /NRCellDU/attributes[@cellLocalId=1]


    GroupsResponseExample:
      value:
        items:
          - id: urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000
            name: cell-filter-group-1
            type: static
            providedMembers:
              href: /groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/provided-members
            members:
              href: /groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/members
          - id: urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000
            name: cell-filter-group-2
            type: dynamic
            members:
              href: /groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/members
        self:
          href: "/groups?offset=0&limit=500"
        first:
          href: "/groups?offset=0&limit=500"
        prev:
          href: "/groups?offset=0&limit=500"
        next:
          href: "/groups?offset=0&limit=500"
        last:
          href: "/groups?offset=0&limit=500"
        totalCount: 2

    MembersResponseExample:
      value:
        items:
          - o-ran-smo-teiv-ran:NRCellDU:
              - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
          - o-ran-smo-teiv-ran:GNBDUFunction:
              - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1
          - o-ran-smo-teiv-oam:ManagedElement:
              - id: urn:3gpp:dn:ManagedElement=1
          - o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU:
              - id: urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418
          - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION:
              - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56
        self:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/members?offset=0&limit=500"
        first:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/members?offset=0&limit=500"
        prev:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/members?offset=0&limit=500"
        next:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/members?offset=0&limit=500"
        last:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/members?offset=0&limit=500"
        totalCount: 5

    ProvidedMembersResponseExample:
      value:
        items:
          - o-ran-smo-teiv-ran:NRCellDU:
              - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
          - o-ran-smo-teiv-ran:GNBDUFunction:
              - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1
          - o-ran-smo-teiv-oam:ManagedElement:
              - id: urn:3gpp:dn:ManagedElement=1
          - o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU:
              - id: urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418
          - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION:
              - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56
        self:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/provided-members?offset=0&limit=500"
        first:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/provided-members?offset=0&limit=500"
        prev:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/provided-members?offset=0&limit=500"
        next:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/provided-members?offset=0&limit=500"
        last:
          href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/provided-members?offset=0&limit=500"
        totalCount: 5

    MergeProvidedMembersPayloadExample:
      value:
        operation: "merge"
        providedMembers:
          - o-ran-smo-teiv-ran:NRCellDU:
              - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1

    RemoveProvidedMembersPayloadExample:
      value:
        operation: "remove"
        providedMembers:
          - o-ran-smo-teiv-ran:NRCellDU:
              - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1

    StaticGroupResponseExample:
      value:
        id: urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000
        name: cell-filter-group-1
        type: static
        providedMembers:
          href: /groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/provided-members
        members:
          href: /groups/urn:o-ran:smo:teiv:group=123e4567-e89b-12d3-a456-426614174000/members


    DynamicGroupResponseExample:
      value:
        id: urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000
        name: cell-filter-group-2
        type: dynamic
        criteria:
          queryType: getEntitiesByDomain
          domain: RAN
          targetFilter: /NRCellDU/attributes(nCI)
          scopeFilter: /NRCellDU/attributes[@cellLocalId=1]
        members:
          href: /groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/members

    UpdateGroupNamePayloadExample:
      value:
        name: "cell-filter-group-5"