3GPP Plan Group Descriptor Management API

The Plan Group Descriptor Management API from 3GPP — 2 operation(s) for plan group descriptor management.

Operations 5

POST /plan-group-descriptors Create a new plan group descriptor #
GET /plan-group-descriptors Get plan configuration descriptors #
GET /plan-group-descriptors/{id} Get a specific plan group descriptor by ID #
PUT /plan-group-descriptors/{id} Replace a plan group descriptor #
DELETE /plan-group-descriptors/{id} Delete a plan group descriptor by ID #

Documentation

📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.104/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28104_MdaNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28104_MdaReport.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.105/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28105_AiMlNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.111/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28111_FaultNotifications.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28111_FaultNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.310/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28310_EnergyInformationNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.312/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28312_IntentExpectations.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28312_IntentNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.317/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28317_RanScNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.318/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28318_DsoNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.319/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28319_MsacNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.531/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28531_NSProvMnS.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28531_NSSProvMnS.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.532/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28532_FileDataReportingMnS.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28532_HeartbeatNtf.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28532_PerfMnS.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28532_ProvMnS.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28532_StreamingDataMnS.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.536/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28536_CoslaNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.538/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28538_EdgeNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.541/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28541_5GcNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28541_NrNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28541_SliceNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.550/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28550_PerfMeasJobCtrlMnS.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.561/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28561_NdtNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.567/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28567_CclNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.572/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28572_PlanManagement.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/28_series/28.623/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_ComDefs.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_ExternalDataMgmtNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_FeatureNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_FileManagementNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_GenericNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_ManagementDataCollectionNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_MnSRegistryNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_PmControlNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_QoEMeasurementCollectionNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_SubscriptionControlNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_ThresholdMonitorNrm.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS28623_TraceControlNrm.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/29_series/29.122/
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_AsSessionWithQoS.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_ChargeableParty.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_CommonData.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_CpProvisioning.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_DeviceTriggering.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_ECRControl.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_GMDviaMBMSbyMB2.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_GMDviaMBMSbyxMB.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_MonitoringEvent.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_MsisdnLessMoSms.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_NIDD.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_NpConfiguration.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_PfdManagement.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_RacsParameterProvisioning.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_ReportingNetworkStatus.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29122_ResourceManagementOfBdt.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/29_series/29.222/
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_AEF_Security_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_Access_Control_Policy_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_API_Invoker_Management_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_API_Provider_Management_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_Auditing_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_Discover_Service_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_Events_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_Logging_API_Invocation_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_Open_Discover_Service_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_Publish_Service_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_Routing_Info_API.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29222_CAPIF_Security_API.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/29_series/29.512/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS29512_Npcf_SMPolicyControl.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/29_series/29.514/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS29514_Npcf_PolicyAuthorization.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/29_series/29.520/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS29520_Nnwdaf_AnalyticsInfo.yaml
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS29520_Nnwdaf_EventsSubscription.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/29_series/29.522/
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_5GLANParameterProvision.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_ACSParameterProvision.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_AddressingParamProvision.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_AIoT.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_AKMA.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_AMInfluence.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_AMPolicyAuthorization.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_AnalyticsExposure.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_ApplyingBdtPolicy.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_ASTI.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_CagInfoParamProvision.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_DataReporting.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_DataReportingProvisioning.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_DNAIMapping.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_EASDeployment.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_ECSAddress.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_EcsAddressProvision.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_GroupParametersProvisioning.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_ImsEventExposure.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_ImsParamProvision.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_ImsSessionManagement.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_IPTVConfiguration.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_LpiParameterProvision.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_MBSGroupMsgDelivery.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_MBSSession.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_MBSTMGI.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_MBSUserDataIngestSession.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_MBSUserService.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_MemberUESelectionAssistance.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_MoLcsNotify.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_MSEventExposure.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_NIDDConfigurationTrigger.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_PDTQPolicyNegotiation.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_RSLPPIParametersProvisioning.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_ServiceParameter.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_SliceParamProvision.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_TimeSyncExposure.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_TrafficInfluence.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_UAVFlightAssistance.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_UEAddress.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_UEId.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_VFLInference.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_VFLNFDiscovery.yaml
📖
APIReference
https://forge.3gpp.org/rep/all/5G_APIs/-/raw/REL-20/TS29522_VFLTraining.yaml
📖
Documentation
https://www.3gpp.org/ftp/Specs/archive/29_series/29.571/
📖
APIReference
https://forge.3gpp.org/rep/sa5/MnS/-/raw/Rel-19/OpenAPI/TS29571_CommonData.yaml

Specifications

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/3gpp-plan-group-descriptor-management-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

3gpp-plan-group-descriptor-management-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 3GPP Plan Provisioning Management Plan Group Descriptor Management API
  version: 19.2.0
  description: OAS 3.0.1 specification of API for managing network configuration plans and related jobs © 2026, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
servers:
- url: '{MnSRoot}/plan-management/{MnSVersion}'
  variables:
    MnSRoot:
      description: See clause 4.4.2 of TS 32.158
      default: http://example.com/cm
    MnSVersion:
      description: Version number of the OpenAPI definition
      default: v1
tags:
- name: Plan Group Descriptor Management
paths:
  /plan-group-descriptors:
    post:
      tags:
      - Plan Group Descriptor Management
      summary: Create a new plan group descriptor
      description: Creates a new configuration plan group descriptor that can be later activated.
      operationId: createPlanGroupDescriptor
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanConfigurationGroupDescriptor'
      responses:
        '201':
          description: Plan group descriptor created successfully
          headers:
            Location:
              description: URI of the created plan descriptor.
              schema:
                type: string
                format: uri-reference
                example: /plan-group-descriptors/mygroup-11
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanConfigurationGroupDescriptorResponse'
        '400':
          description: Invalid request parameters or malformed input.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
    get:
      tags:
      - Plan Group Descriptor Management
      summary: Get plan configuration descriptors
      description: Retrieve a list of existing plan descriptors.
      operationId: getPlanGroupDescriptors
      responses:
        '200':
          description: List of the plan configuration descriptors retrieved successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DescriptorListEntry'
        '500':
          description: Internal server error.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
  /plan-group-descriptors/{id}:
    parameters:
    - in: path
      name: id
      schema:
        type: string
        description: Unique identifier of the plan group descriptor.
        example: NewNetworkElement10-group-plan-001
      required: true
    get:
      tags:
      - Plan Group Descriptor Management
      summary: Get a specific plan group descriptor by ID
      description: Retrieve the details of a plan group descriptor using its unique identifier.
      operationId: getPlanGroupDescriptorById
      responses:
        '200':
          description: Plan group descriptor retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanConfigurationGroupDescriptorResponse'
        '404':
          description: Plan group descriptor does not exist
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
    put:
      tags:
      - Plan Group Descriptor Management
      summary: Replace a plan group descriptor
      description: Replace a configuration plan group descriptor
      operationId: putPlanGroupDescriptor
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanConfigurationGroupDescriptor'
      responses:
        '200':
          description: Plan group descriptor replaced successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanConfigurationGroupDescriptorResponse'
        '400':
          description: Invalid request parameters or malformed input.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '404':
          description: Plan group descriptor not found.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
    delete:
      tags:
      - Plan Group Descriptor Management
      summary: Delete a plan group descriptor by ID
      description: Deletes a plan group descriptor using its unique identifier
      operationId: deletePlanGroupDescriptorById
      responses:
        '204':
          description: Plan descriptor deleted successfully.
        '404':
          description: Plan descriptor not found.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '409':
          description: The plan group descriptor cannot be deleted due to its current state or dependencies (For example, it is referenced in a plan group descriptor).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
        '500':
          description: Internal server error.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ErrorDetail'
components:
  schemas:
    DescriptorListEntry:
      type: object
      properties:
        id:
          type: string
          description: id of the descriptor.
          example: plan-descriptor-1
        name:
          type: string
          description: name of the descriptor.
          example: Dublin East Rollout
        version:
          type: string
          description: version of the descriptor.
          example: 1.0.0
        description:
          type: string
          description: description/purpose of the descriptor.
          example: plan-descriptor-1
      required:
      - id
    Member:
      type: object
      description: "Defines a member identified by EITHER a single Plan Configuration Descriptor ID \nOR a Plan Configuration Group Descriptor ID, but not both.\n"
      oneOf:
      - type: object
        required:
        - planConfigDescrId
        properties:
          planConfigDescrId:
            type: string
            description: Unique id of the plan configuration descriptor.
            example: pcd-001
      - type: object
        required:
        - planConfigGroupDescrId
        properties:
          planConfigGroupDescrId:
            type: string
            description: Unique id of the plan configuration group descriptor.
            example: pgc-001
    ErrorDetail:
      type: object
      properties:
        title:
          type: string
          description: A short, human-readable summary of the problem type
          example: Data already exists; cannot be created
        type:
          type: string
          description: The type of the error
          enum:
          - SCHEMA_VALIDATION_ERROR
          - DATA_NODE_TREE_ERROR
          - MODIFICATION_NOT_ALLOWED
          - ACCESS_CONTROL_CONFLICT
          - APPLICATION_LAYER_ERROR
          - SERVER_ERROR
          - OTHER
        reason:
          type: string
          enum:
          - NEW_DATA_NODE_NAME_INVALID
          - NEW_DATA_NODE_VALUE_INVALID
          - NEW_DATA_NODE_CONTAINMENT_INVALID
          - FINAL_DATA_NODE_VALUE_INVALID
          - FINAL_DATA_NODE_UNIQUENESS_INVALID
          - FINAL_DATA_NODE_MULTIPLICITY_INVALID
          - FINAL_DATA_NODE_CARDINALITY_INVALID
          - TARGET_DATA_NODE_NOT_FOUND
          - TARGET_DATA_NODE_PARENT_NOT_FOUND
          - TARGET_DATA_NODE_FOUND
          - TARGET_DATA_NODE_NOT_WRITABLE
          - TARGET_DATA_NODE_INVARIANT
          - TARGET_DATA_NODE_CREATION_NOT_ALLOWED
          - TARGET_DATA_NODE_DELETION_NOT_ALLOWED
          - ACCESS_DENIED
          - OTHER
          example: NEW_DATA_NODE_CONTAINMENT_INVALID
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence of the problem.
          example: NRCellDU=1234 already exists in the network
        badDataNode:
          type: string
          example: /_3gpp-common-subnetwork:SubNetwork=Irl/_3gpp-common-mecontext:MeContext=Dublin-1
        errorInfo:
          type: object
          description: additional error info (e.g. stackdump)
          additionalProperties: true
      required:
      - type
      - badDataNode
    PlanConfigurationGroupDescriptorResponse:
      allOf:
      - $ref: '#/components/schemas/PlanConfigurationGroupDescriptor'
      - type: object
        required:
        - id
        - activationMode
        - validationState
        - isOrdered
        - isFailOnMemberConflicts
        - members
        properties:
          _links:
            type: object
            description: Hypermedia links for plan descriptor
            allOf:
            - $ref: '#/components/schemas/SelfLink'
            example:
              self:
                href: '{root-url}/plan-management/v1/plan-group-descriptors/pgd-001'
                templated: true
                type: application/json
                title: The newly created PlanConfigurationGroupDescriptor
    PlanConfigurationGroupDescriptor:
      type: object
      required:
      - members
      properties:
        id:
          type: string
          description: Unique id of the plan group configuration descriptor
          example: plan-001
        name:
          type: string
          description: Descriptive name of the plan group configuration descriptor
          example: Rollout-5G-Dublin-East
        version:
          type: string
          description: version of the plan group configuration descriptor
          example: 1.0.0
        description:
          type: string
          description: Used to describe the purpose of the plan group configuration
          example: This is the plan for the new 5G rollout in Dublin east.
        customProperties:
          type: object
          description: A dynamic set of custom properties provided by client
          additionalProperties: true
          example:
            technology-type: NR
            location: Dublin
        isOrdered:
          type: boolean
          description: Specifies if the members of the planned configuration group are ordered. When ordered, the planned configuration group members shall be validated/activated in the specified order. When not ordered the planned configuration group members can be validated/activated in any order
          default: false
        isFailOnMemberConflicts:
          type: boolean
          description: Specifies if the activation shall fail on detection of conflicts between planned configuration group members, or if the operations shall be processed as if there were no conflicts
          default: false
        activationMode:
          type: string
          enum:
          - ATOMIC
          - BEST_EFFORT
          - STOP_ON_ERROR
          default: BEST_EFFORT
          description: Specifies the execution behavior when the plan configuration group is activated
          example: BEST_EFFORT
        validationState:
          type: string
          enum:
          - NOT_VALIDATED
          - PARTIALLY_VALID
          - VALID
          - INVALID
          default: NOT_VALIDATED
          description: The validation state for the last time plan configuration group was validated
          example: NOT_VALIDATED
        lastModifiedAt:
          type: string
          format: date-time
          description: the last time the plan was modified
          example: '2025-03-06T16:50:26-08:00'
        lastValidatedAt:
          type: string
          format: date-time
          description: last time the plan was validated
          example: '2025-03-06T16:50:29-08:00'
        members:
          type: array
          description: list of plan or plan group descriptor identifiers
          items:
            $ref: '#/components/schemas/Member'
          example:
          - planConfigDescrId: pcd-network-101
          - planConfigGroupDescrId: pgc-europe-east-group
          - planConfigDescrId: pcd-radio-tuning-005
          - planConfigGroupDescrId: pgc-5g-core-rollout
    LinkObject:
      type: object
      description: Defines the structure of a single hypermedia link.
      properties:
        href:
          type: string
          format: uri-reference
          description: The target URI of the link.
        templated:
          type: boolean
          description: Indicates if the href is a URI Template (RFC 6570).
          default: true
        type:
          type: string
          description: The content type expected when following this link (MIME type).
        title:
          type: string
          description: A human-readable title that describes the link's purpose.
        method:
          type: string
          enum:
          - GET
          - POST
          - PUT
          - DELETE
          - PATCH
          description: The HTTP method to use for this action link.
      required:
      - href
    SelfLink:
      type: object
      description: Hypermedia links for this resource, including fixed and dynamic relations.
      properties:
        self:
          allOf:
          - $ref: '#/components/schemas/LinkObject'
          description: A link to the resource itself.
      additionalProperties:
        $ref: '#/components/schemas/LinkObject'
      required:
      - self
      example:
        self:
          href: '{root-url}/plan-management/v1/plan-descriptors/pd-001'
          templated: true
          type: application/json
          title: The newly created PlanConfigurationDescriptor
        help:
          href: '{root-url}/help-service/v1/topics/plan-descriptors'
          templated: true
          type: application/json
          title: online help for the plan descriptor
externalDocs:
  description: 3GPP TS 28.572; Generic management services
  url: http://www.3gpp.org/ftp/Specs/archive/28_series/28.572/