{"files":{"SKILL.md":"---\nname: etsi-gs-mec-010-2-part-2-application-lifecycle-rules-and-requirements-management\ndescription: \"ETSI GS MEC 010-2 - Part 2: Application lifecycle, rules and requirements management API skill. Use when working with ETSI GS MEC 010-2 - Part 2: Application lifecycle, rules and requirements management for app_packages, subscriptions, user_defined_notification. Covers 16 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# ETSI GS MEC 010-2 - Part 2: Application lifecycle, rules and requirements management\nAPI version: 2.1.1\n\n## Auth\nNo authentication required.\n\n## Base URL\nhttps://localhost/app_pkgm/v1\n\n## Setup\n1. No auth setup needed\n2. GET /app_packages -- queries information relating to on-boarded application packages in the meo\n3. POST /app_packages -- create first app_package\n\n## Endpoints\n16 endpoints across 4 groups. See references/api-spec.lap for full details.\n\n### App_packages\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /app_packages | Create a resource for on-boarding an application package to a MEO |\n| GET | /app_packages | Queries information relating to on-boarded application packages in the MEO |\n| GET | /app_packages/{appPkgId} | Queries the information related to individual application package resources |\n| DELETE | /app_packages/{appPkgId} | Deletes an individual application package resources |\n| PATCH | /app_packages/{appPkgId} | Updates the operational state of an individual application package resource |\n| GET | /app_packages/{appPkgId}/appd | Reads the content of the AppD of on-boarded individual application package resources. |\n| GET | /app_packages/{appPkgId}/package_content | Fetch the onboarded application package content identified by appPkgId or appDId. |\n| PUT | /app_packages/{appPkgId}/package_content | Uploads the content of application package. |\n\n### Subscriptions\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /subscriptions | Subscribe to notifications about on-boarding an application package |\n| GET | /subscriptions | used to retrieve the information of subscriptions to individual application package resource in MEO |\n| GET | /subscriptions/{subscriptionId} | Used to represent an individual subscription to notifications about application package changes. |\n| DELETE | /subscriptions/{subscriptionId} | Deletes the individual subscription to notifications about application package changes in MEO. |\n\n### User_defined_notification\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /user_defined_notification | Registers a notification endpoint to notify application package operations |\n\n### Onboarded_app_packages\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /onboarded_app_packages/{appDId}/appd | Reads the content of the AppD of on-boarded individual application package resources. |\n| GET | /onboarded_app_packages/{appDId}/package_content | Fetch the onboarded application package content identified by appPkgId or appDId. |\n| PUT | /onboarded_app_packages/{appDId}/package_content | Uploads the content of application package. |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Create a app_package?\" -> POST /app_packages\n- \"List all app_packages?\" -> GET /app_packages\n- \"Get app_package details?\" -> GET /app_packages/{appPkgId}\n- \"Delete a app_package?\" -> DELETE /app_packages/{appPkgId}\n- \"Partially update a app_package?\" -> PATCH /app_packages/{appPkgId}\n- \"Create a subscription?\" -> POST /subscriptions\n- \"List all subscriptions?\" -> GET /subscriptions\n- \"Get subscription details?\" -> GET /subscriptions/{subscriptionId}\n- \"Delete a subscription?\" -> DELETE /subscriptions/{subscriptionId}\n- \"Create a user_defined_notification?\" -> POST /user_defined_notification\n- \"List all appd?\" -> GET /app_packages/{appPkgId}/appd\n- \"List all package_content?\" -> GET /app_packages/{appPkgId}/package_content\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api ETSI GS MEC 010-2 - Part 2: Application lifecycle, rules and requirements management\n@base https://localhost/app_pkgm/v1\n@version 2.1.1\n@endpoints 16\n@toc app_packages(8), subscriptions(4), user_defined_notification(1), onboarded_app_packages(3)\n\n@group app_packages\n@endpoint POST /app_packages\n@desc Create a resource for on-boarding an application package to a MEO\n@required {appPkgName: str # Name of the application package to be onboarded., appPkgPath: str, appPkgVersion: str # Version of the application package to be onboarded. The appPkgName with appPkgVersion can be used to uniquely identify the application package., checksum: map{algorithm!: str, hash!: str}}\n@optional {appProvider: str # The provider's name of the application package to be onboarded., userDefinedData: map # 'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'}\n@returns(201) Successful response for resource creation\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endpoint GET /app_packages\n@desc Queries information relating to on-boarded application packages in the MEO\n@optional {filter: str # Attribute-based filtering parameters according to ETSI GS MEC 009, all_fields: str # Include all complex attributes in the response., fields: str # Complex attributes of AppPkgInfo to be included into the response, exclude_fields: str # Complex attributes of AppPkgInfo to be excluded from the response., exclude_default: str # Indicates to exclude the following complex attributes of AppPkgInfo from the response.}\n@returns(200) Contains a representation of the application package resource\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endpoint GET /app_packages/{appPkgId}\n@desc Queries the information related to individual application package resources\n@returns(200) {id: str, appDId: str, appProvider: str, appName: str, appSoftwareVersion: str, appDVersion: str, checksum: map{algorithm: str, hash: str}, softwareImages: any, additionalArtifacts: any, onboardingState: str(enum), operationalState: str, usageState: str(enum), userDefinedData: map, _links: map{self: map{href: str(uri)}, appD: map{href: str(uri)}, appPkgContent: map{href: str(uri)}}} # Contains a representation of the application package resource\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endpoint DELETE /app_packages/{appPkgId}\n@desc Deletes an individual application package resources\n@returns(204) No Content\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endpoint PATCH /app_packages/{appPkgId}\n@desc Updates the operational state of an individual application package resource\n@required {operationState: str(DISABLED/ENABLED)}\n@returns(200) {operationState: str} # Shows that the operation has been completed successfully\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 409: Conflict : The operation cannot be executed currently, due to a conflict with the state of the resource, 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endgroup\n\n@group subscriptions\n@endpoint POST /subscriptions\n@desc Subscribe to notifications about on-boarding an application package\n@required {callbackUri: str(uri) # The URI of the endpoint for the notification to be sent to., subsctiptionType: str(AppPackageOnBoarding/AppPacakgeOperationChange/AppPackageDeletion) # 'Subscribed notification type'}\n@optional {appPkgFilter: [str]}\n@returns(201) {id: str, subscriptionType: str, callbackUri: str(uri), _links: map{self: map{href: str(uri)}}} # Successful response for created subscription\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endpoint GET /subscriptions\n@desc used to retrieve the information of subscriptions to individual application package resource in MEO\n@returns(200) {_links: map{self: map{href: str(uri)}, subscriptions: [map]}} # List of zero or more subscriptions\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endpoint GET /subscriptions/{subscriptionId}\n@desc Used to represent an individual subscription to notifications about application package changes.\n@returns(200) {id: str, subscriptionType: str, callbackUri: str(uri), _links: map{self: map{href: str(uri)}}} # Representation of the resource.\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endpoint DELETE /subscriptions/{subscriptionId}\n@desc Deletes the individual subscription to notifications about application package changes in MEO.\n@returns(204) No Content\n@errors {401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endgroup\n\n@group user_defined_notification\n@endpoint POST /user_defined_notification\n@desc Registers a notification endpoint to notify application package operations\n@required {id: str # '', notificationType: str(AppPackageOnBoarded/AppPacakgeEnabled/AppPacakgeDisabled/AppPackageDeleted) # Discriminator for the different notification types, subscriptionId: str # Identifier of the subscription related to this notification., timeStamp: map{nanoSeconds!: int(Uint32), seconds!: int(Uint32)}, appPkgId: str # Identifier of the onboarded application package., appDId: str # Identifier of this MEC application descriptor. This attribute shall be globally unique., operationalState: str(DISABLED/ENABLED), _links: map{subscription!: map} # Links to resources related to this resource.}\n@returns(204) No Content\n@errors {401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endgroup\n\n@group app_packages\n@endpoint GET /app_packages/{appPkgId}/appd\n@desc Reads the content of the AppD of on-boarded individual application package resources.\n@optional {filter: str # Attribute-based filtering parameters according to ETSI GS MEC 009, all_fields: str # Include all complex attributes in the response., fields: str # Complex attributes of AppPkgInfo to be included into the response, exclude_fields: str # Complex attributes of AppPkgInfo to be excluded from the response., exclude_default: str # Indicates to exclude the following complex attributes of AppPkgInfo from the response.}\n@returns(200) Content of the AppD is returned.\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endgroup\n\n@group onboarded_app_packages\n@endpoint GET /onboarded_app_packages/{appDId}/appd\n@desc Reads the content of the AppD of on-boarded individual application package resources.\n@optional {filter: str # Attribute-based filtering parameters according to ETSI GS MEC 009, all_fields: str # Include all complex attributes in the response., fields: str # Complex attributes of AppPkgInfo to be included into the response, exclude_fields: str # Complex attributes of AppPkgInfo to be excluded from the response., exclude_default: str # Indicates to exclude the following complex attributes of AppPkgInfo from the response.}\n@returns(200) Content of the AppD is returned.\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endgroup\n\n@group app_packages\n@endpoint GET /app_packages/{appPkgId}/package_content\n@desc Fetch the onboarded application package content identified by appPkgId or appDId.\n@returns(200) The payload body shall contain a copy of the file representing the AppD or a ZIP file that contains the file or multiple files representing the AppD.\n@returns(206) Partial content\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 416: Range Not Satisfiable ., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endpoint PUT /app_packages/{appPkgId}/package_content\n@desc Uploads the content of application package.\n@returns(202) The application package has been accepted for uploading, but the processing has not been completed.\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 409: Conflict : The operation cannot be executed currently, due to a conflict with the state of the resource, 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endgroup\n\n@group onboarded_app_packages\n@endpoint GET /onboarded_app_packages/{appDId}/package_content\n@desc Fetch the onboarded application package content identified by appPkgId or appDId.\n@returns(200) The payload body shall contain a copy of the file representing the AppD or a ZIP file that contains the file or multiple files representing the AppD.\n@returns(206) Partial content\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 416: Range Not Satisfiable ., 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endpoint PUT /onboarded_app_packages/{appDId}/package_content\n@desc Uploads the content of application package.\n@returns(202) The application package has been accepted for uploading, but the processing has not been completed.\n@errors {400: Bad Request : used to indicate that incorrect parameters were passed to the request., 401: Unauthorized :  used when the client did not submit credentials., 403: Forbidden :  operation is not allowed given the current status of the resource., 404: Not Found :  used when a client provided a URI that cannot be mapped to a valid resource URI., 406: Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client., 409: Conflict : The operation cannot be executed currently, due to a conflict with the state of the resource, 429: Too Many Requests : used when a rate limiter has triggered.}\n\n@endgroup\n\n@end\n"}}