openapi: 3.0.2
servers:
  - url: 'http://127.0.0.1:8081/mec_service_mgmt/v1'
  - url: 'https://127.0.0.1:8081/mec_service_mgmt/v1'
info:
  title: MEC Service Management API
  version: 2.0.9
  description: The ETSI MEC ISG MEC011 MEC Service Management API described using OpenAPI
  license:
    name: ETSI Forge copyright notice
    url: 'https://forge.etsi.org/etsi-forge-copyright-notice.txt'
  contact:
    email: cti_support@etsi.org
externalDocs:
  description: 'ETSI GS MEC011 Application Enablement API, V2.0.9'
  url: >-
    https://docbox.etsi.org/ISG/MEC/70-Draft/0011v211Plat.App.Enabl/MEC-0011v211Plat.App.Enablv209.zip
tags:
  - name: appSubscriptions
  - name: appServices
  - name: services
  - name: transports
  - name: callbacks
paths:
  '/services':
    get:
      description: >-
        This method retrieves information about a list of mecService resources.
        This method is typically used in "service availability query" procedure
      operationId: Services_GET
      tags:
        - services
      parameters:
        - $ref: '#/components/parameters/Query.Ser_instance_id'
        - $ref: '#/components/parameters/Query.Ser_name'
        - $ref: '#/components/parameters/Query.Ser_category_id'
        - $ref: '#/components/parameters/Query.Consumed_local_only'
        - $ref: '#/components/parameters/Query.Is_local'
        - $ref: '#/components/parameters/Query.LocalityTypes' 
      responses:
        '200':
          $ref: '#/components/responses/Services.200'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
  '/services/{serviceId}':
    parameters:
      - $ref: '#/components/parameters/Path.ServiceId'
    get:
      description: >-
        This method retrieves information about a mecService resource. This
        method is typically used in "service availability query" procedure
      operationId: ServicesServiceId_GET
      tags:
        - services
      responses:
        '200':
          $ref: '#/components/responses/ServicesServiceId.200'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
  '/applications/{appInstanceId}/services':
    parameters:
      - $ref: '#/components/parameters/Path.AppInstanceId'
    get:
      description: >-
        This method retrieves information about a list of mecService resources.
        This method is typically used in "service availability query" procedure
      operationId: AppServices_GET
      tags:
        - appServices
      parameters:
        - $ref: '#/components/parameters/Query.Ser_instance_id'
        - $ref: '#/components/parameters/Query.Ser_name'
        - $ref: '#/components/parameters/Query.Ser_category_id'
        - $ref: '#/components/parameters/Query.Consumed_local_only'
        - $ref: '#/components/parameters/Query.Is_local'
        - $ref: '#/components/parameters/Query.LocalityTypes' 
      responses:
        '200':
          $ref: '#/components/responses/Services.200'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
    post:
      description: >-
        This method is used to create a mecService resource. This method is
        typically used in "service availability update and new service
        registration" procedure
      operationId: AppServices_POST
      tags:
        - appServices
      responses:
        '201':
          $ref: '#/components/responses/Services.201'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
      requestBody:
        $ref: '#/components/requestBodies/Services.Post'
  '/applications/{appInstanceId}/services/{serviceId}':
    parameters:
      - $ref: '#/components/parameters/Path.AppInstanceId'
      - $ref: '#/components/parameters/Path.ServiceId'
    get:
      description: >-
        This method retrieves information about a mecService resource. This
        method is typically used in "service availability query" procedure
      operationId: AppServicesServiceId_GET
      tags:
        - appServices
      responses:
        '200':
          $ref: '#/components/responses/ServicesServiceId.200'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
    put:
      description: This method updates the information about a mecService resource
      operationId: AppServicesServiceId_PUT
      tags:
        - appServices
      responses:
        '200':
          $ref: '#/components/responses/ServicesServiceId.200'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
        '412':
          $ref: '#/components/responses/Error.412'
      requestBody:
        $ref: '#/components/requestBodies/ServicesServiceId'
  '/applications/{appInstanceId}/subscriptions':
    parameters:
      - $ref: '#/components/parameters/Path.AppInstanceId'
    get:
      description: >-
        The GET method may be used to request information about all
        subscriptions for this requestor. Upon success, the response contains
        entity body with all the subscriptions for the requestor.
      operationId: ApplicationsSubscriptions_GET
      tags:
        - appSubscriptions
      responses:
        '200':
          $ref: '#/components/responses/ApplicationsSubscriptions.200'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
    post:
      description: >-
        The POST method may be used to create a new subscription. One example
        use case is to create a new subscription to the MEC service
        availability notifications. Upon success, the response contains entity
        body describing the created subscription.
      operationId: ApplicationsSubscriptions_POST
      tags:
        - appSubscriptions
      responses:
        '201':
          $ref: '#/components/responses/ApplicationsSubscriptions.201'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
      requestBody:
        $ref: '#/components/requestBodies/ApplicationsSubscriptions'
      callbacks:
        serviceAvailabilityNotification:
          $ref: '#/components/callbacks/ServiceAvailabilityNotification'
  '/applications/{appInstanceId}/subscriptions/{subscriptionId}':
    parameters:
      - $ref: '#/components/parameters/Path.AppInstanceId'
      - $ref: '#/components/parameters/Path.SubscriptionId'
    get:
      description: >-
        The GET method requests information about a subscription for this
        requestor. Upon success, the response contains entity body with the
        subscription for the requestor.
      operationId: ApplicationsSubscription_GET
      tags:
        - appSubscriptions
      responses:
        '200':
          $ref: '#/components/responses/ApplicationsSubscription.200'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
    delete:
      description: >-
        This method deletes a mecSrvMgmtSubscription. This method is typically used
        in "Unsubscribing from service availability event notifications"
        procedure.
      operationId: ApplicationsSubscription_DELETE
      tags:
        - appSubscriptions
      responses:
        '204':
          description: No Content
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
  '/transports':
    get:
      description: >-
        This method retrieves information about a list of available transports.
        This method is typically used by a service-producing application to
        discover transports provided by the MEC platform in the
        "transport information query" procedure
      operationId: Transports_GET
      tags:
        - transports
      responses:
        '200':
          $ref: '#/components/responses/Transports.200'
        '400':
          $ref: '#/components/responses/Error.400'
        '403':
          $ref: '#/components/responses/Error.403'
        '404':
          $ref: '#/components/responses/Error.404'
components:
  schemas:
    Empty:
      description: Empty schema
    CategoryRef.Href:
      description: Reference of the catalogue
      type: string
      example: 'catItem1'
    CategoryRef.Id:
      description: Unique identifier of the category
      type: string
      example: 'id12345'
    CategoryRef.Name:
      description: Name of the category, example values include RNI, Location & Bandwidth Management
      type: string
      example: 'RNI'
    CategoryRef.Version:
      description: Category version
      type: string
      example: 'version1'
    CategoryRef:
      description: This type represents the category reference
      type: object
      required:
        - href
        - id
        - name
        - version
      properties:
        href:
          $ref: '#/components/schemas/CategoryRef.Href'
        id:
          $ref: '#/components/schemas/CategoryRef.Id'
        name:
          $ref: '#/components/schemas/CategoryRef.Name'
        version:
          $ref: '#/components/schemas/CategoryRef.Version'
    EndPointInfo.Address.Host:
      description: Host portion of the address
      type: string
      example: '192.0.2.0'
    EndPointInfo.Address_Port:
      description: Port portion of the address
      type: integer
      format: uint32
      example: 8080
    EndPointInfo.Address:
      description: A IP address and port pair
      type: object
      required:
        - host
        - port
      properties:
        host:
          $ref: '#/components/schemas/EndPointInfo.Address.Host'
        port:
          $ref: '#/components/schemas/EndPointInfo.Address_Port'
    EndPointInfo.Addresses:
      description: >-
        Entry point information of the service as one or more pairs of IP
        address and port
      type: object
      required:
        - addresses
      properties:
        addresses:
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/EndPointInfo.Address'
    EndPointInfo.Alternative:
      description: >-
        Entry point information of the service in a format defined by an
        implementation, or in an external specification.
      type: object
      required:
        - alternative
      properties: 
        alternative:
          type: object
    EndPointInfo.Uri:
      description: Entry point information of the service
      type: string
      format: uri
      example: '/mecSerMgmtApi/service/EntryPoint'
    EndPointInfo.Uris:
      description: >-
        Entry point information of the service as string, formatted according to
        URI syntax
      type: object
      required:
        - uris
      properties:
        uris:
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/EndPointInfo.Uri'
    LinkType:
      description: This type represents a type of link and may be referenced from data structures
      type: object
      properties:
        href: 
          $ref: '#/components/schemas/Href'
    Href:
      description: URI referring to a resource
      type: string
      format: uri
      example: '/mecSerMgmtApi/example'
    MecServiceMgmtApiSubscriptionLinkList.Links:
      description: Self-referring URI.
      type: object
      required:
        - self
      properties:
        self:
          $ref: '#/components/schemas/LinkType'
        subscriptions:
          description: The MEC application instance's subscriptions
          type: array
          items:
            $ref: '#/components/schemas/MecServiceMgmtApiSubscriptionLinkList.Subscription'
    MecServiceMgmtApiSubscriptionLinkList.Subscription:
      description: A link to a subscription.
      type: object
      required:
        - href
        - rel
      properties:
        href:
          $ref: '#/components/schemas/Href'
        rel:
          description: >-
            The value shall be se to SerAvailabilityNotificationSubscription.
          type: string
    MecServiceMgmtApiSubscriptionLinkList:
      description: >-
        This type represents a list of links related to currently existing
        subscriptions for a MEC application instance. This information
        is returned when sending a request to receive current subscriptions.
      type: object
      required:
        - _links
      properties:
        _links:
          $ref: '#/components/schemas/MecServiceMgmtApiSubscriptionLinkList.Links'
    ProblemDetails:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/Problem.type'
        title:
          $ref: '#/components/schemas/Problem.title'
        status:
          $ref: '#/components/schemas/Problem.status'
        detail:
          $ref: '#/components/schemas/Problem.detail'
        instance:
          $ref: '#/components/schemas/Problem.instance'
    Problem.detail:
      type: string
      description: A human-readable explanation specific to this occurrence of the problem
    Problem.instance:
      type: string
      format: uri
      description: A URI reference that identifies the specific occurrence of the problem
    Problem.status:
      type: integer
      format: uint32
      description: The HTTP status code for this occurrence of the problem
    Problem.title:
      type: string
      description: 'A short, human-readable summary of the problem type'
    Problem.type:
      type: string
      format: uri
      description: >-
        A URI reference according to IETF RFC 3986 that identifies the problem
        type
    SecurityInfo.OAuth2Info.GrantTypes:
      description: List of supported OAuth 2.0 grant types
      type: string
      enum:
        - OAUTH2_AUTHORIZATION_CODE
        - OAUTH2_IMPLICIT_GRANT
        - OAUTH2_RESOURCE_OWNER
        - OAUTH2_CLIENT_CREDENTIALS
      example: 'OAUTH2_CLIENT_CREDENTIALS'
    SecurityInfo.OAuth2Info.TokenEndpoint:
      description: The token endpoint
      type: string
      format: uri
      example: '/mecSerMgmtApi/security/TokenEndPoint'
    SecurityInfo.OAuth2Info:
      description: Parameters related to use of OAuth 2.0
      required:
        - grantTypes
        - tokenEndpoint
      properties:
        grantTypes:
          description: >-
            List of supported OAuth 2.0 grant types.
          type: array
          minItems: 1
          maxItems: 4
          items:
            $ref: '#/components/schemas/SecurityInfo.OAuth2Info.GrantTypes'
        tokenEndpoint:
          $ref: '#/components/schemas/SecurityInfo.OAuth2Info.TokenEndpoint'
      type: object
    SecurityInfo:
      description: This type represents security information related to a transport
      type: object
      properties:
        oAuth2Info:
          $ref: '#/components/schemas/SecurityInfo.OAuth2Info'
    Self:
      description: Self-referring URI.
      type: object
      required:
        - self
      properties:
        self:
          $ref: '#/components/schemas/LinkType'
      readOnly: true
    SerAvailabilityNotificationSubscription.CallbackReference:
      description: >-
        URI selected by the MEC application instance to receive
        notifications on the subscribed MEC service availability
        information. This shall be included in both the request and the
        response.
      type: string
      format: uri
    SerAvailabilityNotificationSubscription:
      description: >-
        This type represents a subscription to the notifications from the 
        MEC platform regarding the availability of a MEC service or a
        list of MEC services.
      type: object
      required:
        - subscriptionType
        - callbackReference
        - _links
        - filteringCriteria
      properties:
        subscriptionType:
          $ref: >-
            #/components/schemas/SerAvailabilityNotificationSubscription.SubscriptionType
        callbackReference:
          $ref: >-
            #/components/schemas/SerAvailabilityNotificationSubscription.CallbackReference
        _links:
          $ref: '#/components/schemas/Self'
        filteringCriteria:
          $ref: '#/components/schemas/ServiceInfo'
    SerAvailabilityNotificationSubscription.SubscriptionType:
      description: Shall be set to SerAvailabilityNotificationSubscription.
      type: string
      example: 'SerAvailabilityNotificationSubscription'
    ServiceAvailabilityNotification:
      description: >-
        This type represents the service availability information.
      type: object
      required:
        - notificationType
        - services
        - _links
      properties:
        notificationType:
          $ref: >-
            #/components/schemas/SerAvailabilityNotificationSubscription.SubscriptionType
        services:
          type: array
          items: 
            $ref: '#/components/schemas/ServiceInfo'
        _links:
          $ref: '#/components/schemas/Subscription'
    SerializerTypes:
      description: The enumeration SerializerTypes represents types of serializers
      type: string
      enum:
        - JSON
        - XML
        - PROTOBUF3
      example: 'JSON'
    LocalityTypes:
      description: The scope of locality as expressed by "consumedLocalOnly" and "isLocal". If absent, defaults to MEC_HOST
      type: string
      enum:
        - MEC_SYSTEM
        - MEC_HOST
        - NFVI_POP
        - ZONE
        - ZONE_GROUP
        - NFVI_NODE
      example: 'MEC_SYSTEM'
    ServiceInfo.SerInstanceId:
      description: >-
        Identifier of the service instance assigned by the MEC platform.
      type: string
      readOnly: true
      example: 'ServiceInstance123'
    ServiceInfo.SerName:
      description: >-
        The name of the service. This is how the service producing MEC
        application identifies the service instance it produces.
      type: string
      example: 'ExampleService'
    ServiceInfo.State:
      description: Contains the state
      type: string
      enum:
        - ACTIVE
        - INACTIVE
      example: 'ACTIVE'
    ServiceInfo.TransportId:
      description: >-
        Identifier of the platform-provided transport to be used by the service.
        Valid identifiers may be obtained using the "Transport information
        query" procedure. May be present in POST requests to signal the use of a
        platform-provided transport for the service, and shall be absent
        otherwise.
      type: string
      writeOnly: true
      example: 'Rest1'
    ServiceInfo.Version:
      description: Service version
      type: string
      example: 'ServiceVersion1'
    ServiceInfo.ConsumedLocalOnly:
      description: >-
        Indicate whether the service can only be consumed by the MEC applications
        located in the same locality (as defined by scopeOfLocality) as this 
        service instance.
      type: boolean
      example: false
    ServiceInfo.IsLocal:
      description: >-
        Indicate whether the service is located in the same locality (as defined
        by scopeOfLocality) as the consuming MEC application.
      type: boolean
      example: true
    ServiceInfo.Post:
      description: This type represents the general information of a MEC service.
      type: object
      required:
        - serName
        - version
        - state
        - serializer
      oneOf:
        - required: [transportId]
        - required: [transportInfo]
      properties:
        serInstanceId:
          $ref: '#/components/schemas/ServiceInfo.SerInstanceId'
        serName:
          $ref: '#/components/schemas/ServiceInfo.SerName'
        serCategory:
          $ref: '#/components/schemas/CategoryRef'
        version:
          $ref: '#/components/schemas/ServiceInfo.Version'
        state:
          $ref: '#/components/schemas/ServiceInfo.State'
        transportId:
          $ref: '#/components/schemas/ServiceInfo.TransportId'
        transportInfo:
          $ref: '#/components/schemas/TransportInfo'
        serializer:
          $ref: '#/components/schemas/SerializerTypes'
        scopeOfLocality:
          $ref: '#/components/schemas/LocalityTypes'
        consumedLocalOnly:
          $ref: '#/components/schemas/ServiceInfo.ConsumedLocalOnly'
        isLocal:
          $ref: '#/components/schemas/ServiceInfo.IsLocal'
    ServiceInfo:
      description: This type represents the general information of a MEC service.
      type: object
      required:
        - serName
        - version
        - state
        - transportInfo
        - serializer
      properties:
        serInstanceId:
          $ref: '#/components/schemas/ServiceInfo.SerInstanceId'
        serName:
          $ref: '#/components/schemas/ServiceInfo.SerName'
        serCategory:
          $ref: '#/components/schemas/CategoryRef'
        version:
          $ref: '#/components/schemas/ServiceInfo.Version'
        state:
          $ref: '#/components/schemas/ServiceInfo.State'
        transportInfo:
          $ref: '#/components/schemas/TransportInfo'
        serializer:
          $ref: '#/components/schemas/SerializerTypes'
        scopeOfLocality:
          $ref: '#/components/schemas/LocalityTypes'
        consumedLocalOnly:
          $ref: '#/components/schemas/ServiceInfo.ConsumedLocalOnly'
        isLocal: 
          $ref: '#/components/schemas/ServiceInfo.IsLocal'
    Subscription:
      description: A link to the related subscription
      type: object
      required:
        - subscription
      properties:
        subscription:
          $ref: '#/components/schemas/LinkType'
    TransportInfo.Description:
      description: Human-readable description of this transport
      type: string
      example: 'REST API'
    TransportInfo.Id:
      description: The identifier of this transport
      type: string
      example: 'TransId12345'
    TransportInfo.ImplSpecificInfo:
      description: Additional implementation specific details of the transport
      type: object
    TransportInfo.Name:
      description: The name of this transport
      type: string
      example: 'REST'
    TransportInfo.Protocol:
      description: The name of the protocol used. Shall be set to HTTP for a REST API.
      type: string
      example: 'HTTP'
    TransportInfo.Version:
      description: The version of the protocol used
      type: string
      example: '2.0'
    TransportInfo:
      description: This type represents the general information of a MEC service.
      type: object
      required:
        - id
        - name
        - type
        - protocol
        - version
        - endpoint
        - security
      properties:
        id:
          $ref: '#/components/schemas/TransportInfo.Id'
        name:
          $ref: '#/components/schemas/TransportInfo.Name'
        description:
          $ref: '#/components/schemas/TransportInfo.Description'
        type:
          $ref: '#/components/schemas/TransportTypes'
        protocol:
          $ref: '#/components/schemas/TransportInfo.Protocol'
        version:
          $ref: '#/components/schemas/TransportInfo.Version'
        endpoint:
          description: This type represents information about a transport endpoint
          type: object
          oneOf:
            - $ref: '#/components/schemas/EndPointInfo.Uris'
            - $ref: '#/components/schemas/EndPointInfo.Addresses'
            - $ref: '#/components/schemas/EndPointInfo.Alternative'
        security:
          $ref: '#/components/schemas/SecurityInfo'
        implSpecificInfo:
          $ref: '#/components/schemas/TransportInfo.ImplSpecificInfo'
    TransportTypes:
      description: The enumeration TransportTypes represents types of transports
      type: string
      enum:
        - REST_HTTP
        - MB_TOPIC_BASED
        - MB_ROUTING
        - MB_PUBSUB
        - RPC
        - RPC_STREAMING
        - WEBSOCKET
      example: 'REST_HTTP'
  parameters:
    Path.AppInstanceId:
      name: appInstanceId
      description: >-
        Represents a MEC application instance. Note that the
        appInstanceId is allocated by the MEC platform manager.
      in: path
      required: true
      schema:
        type: string
    Path.SubscriptionId:
      name: subscriptionId
      description: >-
        Represents a subscription to the notifications from the MEC
        platform.
      in: path
      required: true
      schema:
        type: string
    Path.ServiceId:
      name: serviceId
      description: Represents a MEC service instance.
      in: path
      required: true
      schema:
        type: string
    Query.Ser_category_id:
      name: ser_category_id
      description: >-
        A MEC application instance may use ser_category_id as an input
        parameter to query the availability of a list of MEC service
        instances in a serCategory. Either "ser_instance_id" or "ser_name" or
        "ser_category_id" or none of them shall be present.
      in: query
      required: false
      schema:
        type: string
    Query.Ser_instance_id:
      name: ser_instance_id
      description: >-
        A MEC application instance may use multiple ser_instance_ids as
        an input parameter to query the availability of a list of MEC
        service instances. Either "ser_instance_id" or "ser_name" or
        "ser_category_id" or none of them shall be present.
      in: query
      required: false
      schema:
        type: array
        items:
          type: string
    Query.Ser_name:
      name: ser_name
      description: >-
        A MEC application instance may use multiple ser_names as an
        input parameter to query the availability of a list of MEC
        service instances. Either "ser_instance_id" or "ser_name" or
        "ser_category_id" or none of them shall be present.
      in: query
      required: false
      schema:
        type: array
        items:
          type: string
    Query.LocalityTypes:
      name: scope_of_locality
      description: >-
        A MEC application instance may use scope_of_locality as an input 
        parameter to query the availability of a list of MEC service instances 
        with a certain scope of locality.
      in: query
      required: false
      schema:
        type: string
    Query.Is_local:
      name: is_local
      description: >-
        Indicate whether the service is located in the same locality (as 
        defined by scopeOfLocality) as the consuming MEC application.
      in: query
      required: false
      schema:
        type: boolean
    Query.Consumed_local_only:
      name: consumed_local_only
      description: >-
        Indicate whether the service can only be consumed by the MEC 
        applications located in the same locality (as defined by 
        scopeOfLocality) as this service instance.
      in: query
      required: false
      schema:
        type: boolean
  responses:
    ApplicationsSubscriptions.200:
      description: >-
        Upon success, a response body containing the list of links to the
        requested subscriptions is returned.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/MecServiceMgmtApiSubscriptionLinkList'
      links:
        getIndividualmecSerMgmtApiSubscriptionLinkList:
          $ref: '#/components/links/GetIndividualmecSerMgmtApiSubscriptionLinkList'
        delIndividualmecSerMgmtApiSubscriptionLinkList:
          $ref: '#/components/links/DelIndividualmecSerMgmtApiSubscriptionLinkList'
    ApplicationsSubscriptions.201:
      description: >-
        Entity body in the request contains a subscription to the MEC
        service availability notifications that is to be created.
      headers:
        location:
          description: The resource URI of the created resource
          schema:
            type: string
            format: uri
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SerAvailabilityNotificationSubscription'
      links:
        getIndividualmecSerMgmtApiSubscription:
          $ref: '#/components/links/GetIndividualmecSerMgmtApiSubscription'
        delIndividualmecSerMgmtApiSubscription:
          $ref: '#/components/links/DelIndividualmecSerMgmtApiSubscription'
    ApplicationsSubscription.200:
      description: >-
        Upon success, a response body containing the requested subscription
        is returned.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SerAvailabilityNotificationSubscription'
    Services.200:
      description: >-
        It is used to indicate nonspecific success. The response body
        contains a representation of the resource.
      content:
        application/json:
          schema:
            type: array
            minItems: 0
            items:
              $ref: '#/components/schemas/ServiceInfo'
          examples:
            ServiceInfoList:
              $ref: '#/components/examples/ServiceInfoList'
      links:
        getIndividualmecService:
          $ref: '#/components/links/GetIndividualmecService'
        putIndividualmecService:
          $ref: '#/components/links/PutIndividualmecService'
    Services.201:
      description: >-
        Upon success, the HTTP response shall include a Location HTTP header
        that contains the resource URI of the created resource.
      headers:
        location:
          description: The resource URI of the created resource
          schema:
            type: string
            format: uri
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServiceInfo'
          examples:
            ServiceInfo:
              $ref: '#/components/examples/ServiceInfo'
      links:
        getIndividualmecService:
          $ref: '#/components/links/GetIndividualmecService'
        putIndividualmecService:
          $ref: '#/components/links/PutIndividualmecService'
    ServicesServiceId.200:
      description: >-
        It is used to indicate nonspecific success. The response body
        contains a representation of the resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServiceInfo'
          examples:
            ServiceInfo:
              $ref: '#/components/examples/ServiceInfo'
    Transports.200:
      description: >-
        It is used to indicate nonspecific success. The response body
        contains a representation of the resource.
      content:
        application/json:
          schema:
            type: array
            minItems: 0
            items:
              $ref: '#/components/schemas/TransportInfo'
      links:
        getTransportInfo:
          $ref: '#/components/links/GetTransportInfo'
    Error.400:
      description: >-
        Bad Request.
        It is used to indicate that incorrect parameters were passed to the request.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
        text/plain:
          schema:
            $ref: '#/components/schemas/Empty'
    Error.401:
      description: >-
        Unauthorized.
        It is used when the client did not submit the appropriate credentials.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
        text/plain:
          schema:
            $ref: '#/components/schemas/Empty'
    Error.403:
      description: >-
        Forbidden.
        The operation is not allowed given the current status of the resource. 
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
    Error.404:
      description: >-
        Not Found.
        It is used when a client provided a URI that cannot be mapped 
        to a valid resource URI.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
        text/plain:
          schema:
            $ref: '#/components/schemas/Empty'
    Error.409:
      description: >- 
        Conflict.
        The operation cannot be executed currently, due to a conflict with 
        the state of the resource. Typically, this is because the application 
        instance resource is in NOT_INSTANTIATED state.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
        text/plain:
          schema:
            $ref: '#/components/schemas/Empty'
    Error.412:
      description: >-
        Precondition Failed.
        It is used when a condition has failed during conditional requests, 
        e.g. when using ETags to avoid write conflicts.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
        text/plain:
          schema:
            $ref: '#/components/schemas/Empty'
    Error.429:
      description: >-
        Too Many Requests.
        It is used when a rate limiter has triggered.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ProblemDetails'
        text/plain:
          schema:
            $ref: '#/components/schemas/Empty'
  requestBodies:
    ApplicationsSubscriptions:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SerAvailabilityNotificationSubscription'
      description: >-
        Entity body in the request contains a subscription to the MEC
        application termination notifications that is to be created.
      required: true
    Services:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServiceInfo'
      description: >-
        New ServiceInfo with updated "state" is included as entity body of the
        request
      required: true
    Services.Post:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServiceInfo.Post'
      description: >-
        New ServiceInfo with updated "state" is included as entity body of the
        request
      required: true
    ServicesServiceId:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServiceInfo'
      description: >-
        New ServiceInfo with updated "state" is included as entity body of the
        request
      required: true
    ServiceAvailabilityNotification:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ServiceAvailabilityNotification'
      required: true
  callbacks:
    ServiceAvailabilityNotification:
      '{$request.body#/callbackReference}':
        post:
          description: >-
            'Represents the service availability information that 
            is used in the following cases
            - when the MEC platform announces the newly available
             services to the authorized relevant MEC applications (e.g. 
             the applications that indicate the services as "optional" 
             or "required") that are subscribed to the corresponding 
             service availability notifications
            -	when the MEC platform notifies the authorized relevant 
            applications that are subscribed to the corresponding 
            service availability notifications about the service availability changes.'
          operationId: ServiceAvailabilityNotification_POST
          tags:
            - callbacks
          requestBody:
            $ref: '#/components/requestBodies/ServiceAvailabilityNotification'
          responses:
            '200':
              description: Expected responses from callback consumer, if it accepts the callback
  links:
    GetIndividualmecService:
      operationId: ServicesServiceId_GET
      description: The `serviceId` value returned in the response can be used as the `serviceId` parameter in `GET /services/{serviceId}`
      parameters:
        serviceId: '$response.body#/serviceId'
    PutIndividualmecService:
      operationId: ServicesServiceId_PUT
      description: The `serviceId` value returned in the response can be used as the `serviceId` parameter in `PUT /services/{serviceId}`
      parameters:
        serviceId: '$response.body#/serviceId'
    GetTransportInfo:
      operationId: AppServices_POST
      description: The `id` value returned in the response can be used as the `transportId` parameter in `POST /applications/{appInstanceId}/services`. The first transport is provided as the link as wildcards are not supported
      parameters:
        transportId: '$response.body#/0/id'
    GetIndividualmecSerMgmtApiSubscription:
      operationId: ApplicationsSubscription_GET
      description: The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `GET /applications/{appInstanceId}/subscriptions/{subscriptionId}`
      parameters:
        description: regex = \/mec_service_mgmt\/v1\/applications\/.*\/subscriptions\/.*\/(.*);subscriptionId = href.match(regex)[1];// where "href" is an attribute within the subscription attribute within the _links attribute
        subscriptionId: 'TBC'
    DelIndividualmecSerMgmtApiSubscription:
      operationId: ApplicationsSubscription_DELETE
      description: The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `DELETE /applications/{appInstanceId}/subscriptions/{subscriptionId}`
      parameters:
        description: regex = \/mec_service_mgmt\/v1\/applications\/.*\/subscriptions\/(.*);subscriptionId = href.match(regex)[1];// where "href" is an attribute within the subscription attribute within the _links attribute
        subscriptionId: 'TBC'
    GetIndividualmecSerMgmtApiSubscriptionLinkList:
      operationId: ApplicationsSubscription_GET
      description: The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `GET /applications/{appInstanceId}/subscriptions/{subscriptionId}`
      parameters:
        description: regex = \/mec_service_mgmt\/v1\/applications\/.*\/subscriptions\/(.*);subscriptionId = href.match(regex)[1];// where "href" is an attribute within the subscription attribute within the _links attribute
        subscriptionId: 'TBC'
    DelIndividualmecSerMgmtApiSubscriptionLinkList:
      operationId: ApplicationsSubscription_DELETE
      description: The `subscriptionId` value returned in the response can be used as the `subscriptionId` parameter in `DELETE /applications/{appInstanceId}/subscriptions/{subscriptionId}`
      parameters:
        description: regex = \/mec_service_mgmt\/v1\/applications\/.*\/subscriptions\/(.*);subscriptionId = href.match(regex)[1];// where "href" is an attribute within the subscription attribute within the _links attribute
        subscriptionId: 'TBC'
  examples:
    ServiceInfo:
      value:
        serInstanceId: 'ServiceInstance123'
        serName: 'ExampleService'
        serCategory:
          href: 'catItem1'
          id: 'id12345'
          name: 'RNI'
          version: 'version1'
        version: 'ServiceVersion1'
        state: 'ACTIVE'
        transportInfo:
          id: 'TransId12345'
          name: 'REST'
          description: 'REST API'
          type: 'REST_HTTP'
          protocol: 'HTTP'
          version: '2.0'
          endpoint:
            uris:
              - '/mecSerMgmtApi/service/EntryPoint'
          security:
            oAuth2Info:
              grantTypes: 
                - 'OAUTH2_CLIENT_CREDENTIALS'
              tokenEndpoint: '/mecSerMgmtApi/security/TokenEndPoint'
        serializer: 'JSON'
    ServiceInfoList:
      value:
        - serInstanceId: 'ServiceInstance123'
          serName: 'ExampleService'
          serCategory:
            href: 'catItem1'
            id: 'id12345'
            name: 'RNI'
            version: 'version1'
          version: 'ServiceVersion1'
          state: 'ACTIVE'
          transportInfo:
            id: 'TransId12345'
            name: 'REST'
            description: 'REST API'
            type: 'REST_HTTP'
            protocol: 'HTTP'
            version: '2.0'
            endpoint:
              addresses:
                - host: '192.0.2.0'
                  port: 8080
            security:
              oAuth2Info:
                grantTypes: 
                  - 'OAUTH2_CLIENT_CREDENTIALS'
                tokenEndpoint: '/mecSerMgmtApi/security/TokenEndPoint'
          serializer: 'JSON'