swagger: '2.0'
######################################################
# Prolog
######################################################
info:
  version: "0.10.0"
  title: "WSO2 API Manager - Publisher API"
  description: |
    This document specifies a **RESTful API** for WSO2 **API Manager** - Publisher.

    It is written with [swagger 2](http://swagger.io/).

  contact:
    name: "WSO2"
    url: "http://wso2.com/products/api-manager/"
    email: "architecture@wso2.com"
  license:
    name: "Apache 2.0"
    url: "http://www.apache.org/licenses/LICENSE-2.0.html"

######################################################
# The fixed parts of the URLs of the API
######################################################

# The schemes supported by the API
schemes:
  - https

# The domain of the API.
# This is configured by the customer during deployment.
# The given host is just an example.
host: apis.wso2.com

# The base path of the API.
# Will be prefixed to all paths.
basePath: /api/am/publisher/v0.10

# The following media types can be passed as input in message bodies of the API.
# The actual media type must be specified in the Content-Type header field of the request.
# The default is json, i.e. the Content-Type header is not needed to
# be set, but supporting it serves extensibility.
consumes:
  - application/json

# The following media types may be passed as output in message bodies of the API.
# The media type(s) consumable by the requestor is specified in the Accept header field
# of the corresponding request.
# The actual media type returned will be specfied in the Content-Type header field
# of the of the response.
# The default of the Accept header is json, i.e. there is not needed to
# set the value, but supporting it serves extensibility.
produces:
  - application/json


x-wso2-security:
  apim:
    x-wso2-scopes:
      - description: ""
        roles: admin
        name: apim:api_view
        key: apim:api_view
      - description: ""
        roles: admin
        name: apim:api_create
        key: apim:api_create
      - description: ""
        roles: admin
        name: apim:api_publish
        key: apim:api_publish
      - description: ""
        roles: admin
        name: apim:tier_view
        key: apim:tier_view
      - description: ""
        roles: admin
        name: apim:tier_manage
        key: apim:tier_manage
      - description: ""
        roles: admin
        name: apim:subscription_view
        key: apim:subscription_view
      - description: ""
        roles: admin
        name: apim:subscription_block
        key: apim:subscription_block

######################################################
# The "API Collection" resource APIs
######################################################
paths:
  /apis:

#-----------------------------------------------------
# Retrieving the list of all APIs qualifying under a given search condition
#-----------------------------------------------------
    get:
      x-scope: apim:api_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" http://127.0.0.1:9763/api/am/publisher/v0.10/apis"
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"previous\": \"\",\n   \"list\":    [\n            {\n         \"provider\": \"admin\",\n         \"version\": \"1.0.0\",\n         \"description\": \"This sample API provides Account Status Validation\",\n         \"name\": \"AccountVal\",\n         \"context\": \"/account\",\n         \"id\": \"2e81f147-c8a8-4f68-b4f0-69e0e7510b01\",\n         \"status\": \"PUBLISHED\"\n      },\n            {\n         \"provider\": \"admin\",\n         \"version\": \"1.0.0\",\n         \"description\": null,\n         \"name\": \"api1\",\n         \"context\": \"/api1\",\n         \"id\": \"3e22d2fb-277a-4e9e-8c7e-1c0f7f73960e\",\n         \"status\": \"PUBLISHED\"\n      }\n   ],\n   \"next\": \"\",\n   \"count\": 2\n}"
      summary: |
        Get all APIs
      description: |
        Get a list of available APIs qualifying under a given search condition.
      parameters:
        - $ref : '#/parameters/limit'
        - $ref : '#/parameters/offset'
        - name : query
          in: query
          description: |
            **Search condition**.

            You can search in attributes by using an **"attribute:"** modifier.

            Eg. "provider:wso2" will match an API if the provider of the API contains "wso2".

            Supported attribute modifiers are [**version, context, status,
            description, subcontext, doc, provider**]

            If no advanced attribute modifier has been specified, search will match the
            given query string against API Name.
          type: string
        - $ref : "#/parameters/Accept"
        - $ref : "#/parameters/If-None-Match"
      tags:
        - APIs
      responses:
        200:
          description: |
            OK.
            List of qualifying APIs is returned.
          schema:
            $ref: '#/definitions/APIList'
          headers:
            Content-Type:
              description: The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource. Used by caches, or in conditional requests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        406:
          description: |
            Not Acceptable.
            The requested media type is not supported
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Create a new API
#-----------------------------------------------------
    post:
      x-scope: apim:api_create
      x-wso2-curl: "curl -H \"Authorization: Bearer 40e486e50ce43407181fb4c570d2cac7\" -H \"Content-Type: application/json\" -X POST -d @data.json http://127.0.0.1:9763/api/am/publisher/v0.10/apis"
      x-wso2-request: "{\n   \"sequences\": [],\n   \"tiers\":    [\n      \"Bronze\",\n      \"Gold\"\n   ],\n   \"thumbnailUrl\": null,\n   \"visibility\": \"PUBLIC\",\n   \"visibleRoles\": [],\n   \"visibleTenants\": [],\n   \"cacheTimeout\": 300,\n   \"endpointConfig\": \"{\\\"production_endpoints\\\":{\\\"url\\\":\\\" http://ws.cdyne.com/phoneverify/phoneverify.asmx\\\",\\\"config\\\":null},\\\"endpoint_type\\\":\\\"http\\\"}\",\n   \"subscriptionAvailability\": null,\n   \"subscriptionAvailableTenants\": [],\n   \"destinationStatsEnabled\": \"Disabled\",\n   \"apiDefinition\": \"{\\\"paths\\\":{\\\"\\/*\\\":{\\\"get\\\":{\\\"x-auth-type\\\":\\\"Application\\\",\\\"x-throttling-tier\\\":\\\"Unlimited\\\",\\\"responses\\\":{\\\"200\\\":{\\\"description\\\":\\\"OK\\\"}}}}},\\\"x-wso2-security\\\":{\\\"apim\\\":{\\\"x-wso2-scopes\\\":[]}},\\\"swagger\\\":\\\"2.0\\\",\\\"info\\\":{\\\"title\\\":\\\"PhoneVerification\\\",\\\"description\\\":\\\"Verify a phone number\\\",\\\"contact\\\":{\\\"email\\\":\\\"xx@ee.com\\\",\\\"name\\\":\\\"xx\\\"},\\\"version\\\":\\\"1.0.0\\\"}}\",\n   \"responseCaching\": \"Disabled\",\n   \"isDefaultVersion\": true,\n   \"gatewayEnvironments\": \"Production and Sandbox\",\n   \"businessInformation\":    {\n      \"technicalOwner\": \"xx\",\n      \"technicalOwnerEmail\": \"ggg@ww.com\",\n      \"businessOwner\": \"xx\",\n      \"businessOwnerEmail\": \"xx@ee.com\"\n   },\n   \"transport\":    [\n      \"http\",\n      \"https\"\n   ],\n   \"tags\":    [\n      \"phone\",\n      \"multimedia\",\n      \"mobile\"\n   ],\n   \"provider\": \"admin\",\n   \"version\": \"1.0.0\",\n   \"description\": \"Verify a phone number\",\n   \"name\": \"PhoneVerification\",\n   \"context\": \"/phoneverify\"\n}"
      x-wso2-response: "HTTP/1.1 201 Created\nLocation: http://localhost:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b\nContent-Type: application/json\n\n{\n   \"sequences\": [],\n   \"tiers\":    [\n      \"Bronze\",\n      \"Gold\"\n   ],\n   \"thumbnailUrl\": null,\n   \"visibility\": \"PUBLIC\",\n   \"visibleRoles\": [],\n   \"visibleTenants\": [],\n   \"cacheTimeout\": 300,\n   \"endpointConfig\": \"{\\\"production_endpoints\\\":{\\\"url\\\":\\\" http://ws.cdyne.com/phoneverify/phoneverify.asmx\\\",\\\"config\\\":null},\\\"endpoint_type\\\":\\\"http\\\"}\",\n   \"subscriptionAvailability\": null,\n   \"subscriptionAvailableTenants\": [],\n   \"destinationStatsEnabled\": \"Disabled\",\n   \"apiDefinition\": \"{\\\"paths\\\":{\\\"\\/*\\\":{\\\"get\\\":{\\\"x-auth-type\\\":\\\"Application\\\",\\\"x-throttling-tier\\\":\\\"Unlimited\\\",\\\"responses\\\":{\\\"200\\\":{\\\"description\\\":\\\"OK\\\"}}}}},\\\"x-wso2-security\\\":{\\\"apim\\\":{\\\"x-wso2-scopes\\\":[]}},\\\"swagger\\\":\\\"2.0\\\",\\\"info\\\":{\\\"title\\\":\\\"PhoneVerification\\\",\\\"description\\\":\\\"Verify a phone number\\\",\\\"contact\\\":{\\\"email\\\":\\\"xx@ee.com\\\",\\\"name\\\":\\\"xx\\\"},\\\"version\\\":\\\"1.0.0\\\"}}\",\n   \"responseCaching\": \"Disabled\",\n   \"isDefaultVersion\": true,\n   \"gatewayEnvironments\": \"Production and Sandbox\",\n   \"businessInformation\":    {\n      \"technicalOwner\": \"xx\",\n      \"technicalOwnerEmail\": \"ggg@ww.com\",\n      \"businessOwner\": \"xx\",\n      \"businessOwnerEmail\": \"xx@ee.com\"\n   },\n   \"transport\":    [\n      \"http\",\n      \"https\"\n   ],\n   \"tags\":    [\n      \"phone\",\n      \"multimedia\",\n      \"mobile\"\n   ],\n   \"provider\": \"admin\",\n   \"version\": \"1.0.0\",\n   \"description\": \"Verify a phone number\",\n   \"name\": \"PhoneVerification\",\n   \"context\": \"/phoneverify\",\n   \"id\": \"890a4f4d-09eb-4877-a323-57f6ce2ed79b\",\n   \"status\": \"CREATED\"\n}"
      summary: Create a new API
      description: |
        Create a new API
      parameters:
        - in: body
          name: body
          description: |
            API object that needs to be added
          required: true
          schema:
            $ref: '#/definitions/API'
        - $ref: '#/parameters/Content-Type'
      tags:
        - APIs
      responses:
        201:
          description: |
            Created.
            Successful response with the newly created object as entity in the body.
            Location header contains URL of newly created entity.
          schema:
            $ref: '#/definitions/API'
          headers:
            Location:
              description: |
                The URL of the newly created resource.
              type: string
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource. Used by caches, or in conditional request
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error.
          schema:
            $ref: '#/definitions/Error'
        415:
          description: |
            Unsupported Media Type.
            The entity of the request was in a not supported format.
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Individual API" resource APIs
######################################################
  /apis/{apiId}:

#-----------------------------------------------------
# Retrieve the details of an API definition
#-----------------------------------------------------
    get:
      x-scope: apim:api_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" http://127.0.0.1:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b"
      x-wso2-response: "HTTP/1.1 200 OK\nDate: Mon, 22 Feb 2016 13:27:08 GMT\nContent-Type: application/json\nTransfer-Encoding: chunked\nServer: WSO2 Carbon Server\n\n{\n   \"sequences\": [],\n   \"tiers\":    [\n      \"Bronze\",\n      \"Gold\"\n   ],\n   \"thumbnailUrl\": null,\n   \"visibility\": \"PUBLIC\",\n   \"visibleRoles\": [],\n   \"visibleTenants\": [],\n   \"cacheTimeout\": 300,\n   \"endpointConfig\": \"{\\\"production_endpoints\\\":{\\\"url\\\":\\\" http://ws.cdyne.com/phoneverify/phoneverify.asmx\\\",\\\"config\\\":null},\\\"endpoint_type\\\":\\\"http\\\"}\",\n   \"subscriptionAvailability\": null,\n   \"subscriptionAvailableTenants\": [],\n   \"destinationStatsEnabled\": \"Disabled\",\n   \"apiDefinition\": \"{\\\"paths\\\":{\\\"\\/*\\\":{\\\"get\\\":{\\\"x-auth-type\\\":\\\"Application\\\",\\\"x-throttling-tier\\\":\\\"Unlimited\\\",\\\"responses\\\":{\\\"200\\\":{\\\"description\\\":\\\"OK\\\"}}}}},\\\"x-wso2-security\\\":{\\\"apim\\\":{\\\"x-wso2-scopes\\\":[]}},\\\"swagger\\\":\\\"2.0\\\",\\\"info\\\":{\\\"title\\\":\\\"PhoneVerification\\\",\\\"description\\\":\\\"Verify a phone number\\\",\\\"contact\\\":{\\\"email\\\":\\\"xx@ee.com\\\",\\\"name\\\":\\\"xx\\\"},\\\"version\\\":\\\"1.0.0\\\"}}\",\n   \"responseCaching\": \"Disabled\",\n   \"isDefaultVersion\": false,\n   \"gatewayEnvironments\": \"Production and Sandbox\",\n   \"businessInformation\":    {\n      \"technicalOwner\": \"xx\",\n      \"technicalOwnerEmail\": \"ggg@ww.com\",\n      \"businessOwner\": \"xx\",\n      \"businessOwnerEmail\": \"xx@ee.com\"\n   },\n   \"transport\":    [\n      \"http\",\n      \"https\"\n   ],\n   \"tags\":    [\n      \"phone\",\n      \"multimedia\",\n      \"mobile\"\n   ],\n   \"provider\": \"admin\",\n   \"version\": \"1.0.0\",\n   \"description\": \"Verify a phone number\",\n   \"name\": \"PhoneVerification\",\n   \"context\": \"/phoneverify\",\n   \"id\": \"890a4f4d-09eb-4877-a323-57f6ce2ed79b\",\n   \"status\": \"PUBLISHED\"\n}"
      summary: Get API details
      description: |
        Get details of an API
      parameters:
        - $ref: '#/parameters/apiId'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
        - $ref: '#/parameters/If-Modified-Since'
      tags:
        - APIs
      responses:
        200:
          description: |
            OK.
            Requested API is returned
          headers:
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource. Used by caches, or in conditional requests.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional requests.
              type: string
          schema:
            $ref: '#/definitions/API'
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        404:
          description: |
            Not Found.
            Requested API does not exist.
          schema:
            $ref: '#/definitions/Error'
        406:
          description: |
            Not Acceptable.
            The requested media type is not supported
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Update the definition of an API
#-----------------------------------------------------
    put:
      x-scope: apim:api_create
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -H \"Content-Type: application/json\" -X PUT -d @data.json http://127.0.0.1:9763/api/am/publisher/v0.10/apis/6fb74674-4ab8-4b52-9886-f9a376985060"
      x-wso2-request: "{\n   \"sequences\": [],\n   \"tiers\":    [\n      \"Bronze\",\n      \"Gold\"\n   ],\n   \"thumbnailUrl\": null,\n   \"visibility\": \"PUBLIC\",\n   \"visibleRoles\": [],\n   \"visibleTenants\": [],\n   \"cacheTimeout\": 300,\n   \"endpointConfig\": \"{\\\"production_endpoints\\\":{\\\"url\\\":\\\" http://ws.cdyne.com/phoneverify/phoneverify.asmx\\\",\\\"config\\\":null},\\\"endpoint_type\\\":\\\"http\\\"}\",\n   \"subscriptionAvailability\": null,\n   \"subscriptionAvailableTenants\": [],\n   \"destinationStatsEnabled\": \"Disabled\",\n   \"apiDefinition\": \"{\\\"paths\\\":{\\\"\\/*\\\":{\\\"get\\\":{\\\"x-auth-type\\\":\\\"Application\\\",\\\"x-throttling-tier\\\":\\\"Unlimited\\\",\\\"responses\\\":{\\\"200\\\":{\\\"description\\\":\\\"OK\\\"}}}}},\\\"x-wso2-security\\\":{\\\"apim\\\":{\\\"x-wso2-scopes\\\":[]}},\\\"swagger\\\":\\\"2.0\\\",\\\"info\\\":{\\\"title\\\":\\\"PhoneVerification\\\",\\\"description\\\":\\\"Verify a phone number\\\",\\\"contact\\\":{\\\"email\\\":\\\"xx@ee.com\\\",\\\"name\\\":\\\"xx\\\"},\\\"version\\\":\\\"2.0.0\\\"}}\",\n   \"responseCaching\": \"Disabled\",\n   \"isDefaultVersion\": false,\n   \"gatewayEnvironments\": \"Production and Sandbox\",\n   \"businessInformation\":    {\n      \"technicalOwner\": \"xx\",\n      \"technicalOwnerEmail\": \"ggg@ww.com\",\n      \"businessOwner\": \"xx\",\n      \"businessOwnerEmail\": \"xx@ee.com\"\n   },\n   \"transport\":    [\n      \"http\",\n      \"https\"\n   ],\n   \"tags\":    [\n      \"phone\",\n      \"multimedia\",\n      \"verification\",\n      \"mobile\"\n   ],\n   \"provider\": \"admin\",\n   \"version\": \"2.0.0\",\n   \"description\": \"Use this API to verify a phone number\",\n   \"name\": \"PhoneVerification\",\n   \"context\": \"/phoneverify\",\n   \"id\": \"6fb74674-4ab8-4b52-9886-f9a376985060\",\n   \"status\": \"CREATED\"\n}"
      x-wso2-response: "HTTP/1.1 200 OK\nDate: Mon, 22 Feb 2016 13:31:35 GMT\nContent-Type: application/json\nTransfer-Encoding: chunked\nServer: WSO2 Carbon Server\n\n{\n   \"sequences\": [],\n   \"tiers\":    [\n      \"Bronze\",\n      \"Gold\"\n   ],\n   \"thumbnailUrl\": null,\n   \"visibility\": \"PUBLIC\",\n   \"visibleRoles\": [],\n   \"visibleTenants\": [],\n   \"cacheTimeout\": 300,\n   \"endpointConfig\": \"{\\\"production_endpoints\\\":{\\\"url\\\":\\\" http://ws.cdyne.com/phoneverify/phoneverify.asmx\\\",\\\"config\\\":null},\\\"endpoint_type\\\":\\\"http\\\"}\",\n   \"subscriptionAvailability\": null,\n   \"subscriptionAvailableTenants\": [],\n   \"destinationStatsEnabled\": \"Disabled\",\n   \"apiDefinition\": \"{\\\"paths\\\":{\\\"\\/*\\\":{\\\"get\\\":{\\\"x-auth-type\\\":\\\"Application\\\",\\\"x-throttling-tier\\\":\\\"Unlimited\\\",\\\"responses\\\":{\\\"200\\\":{\\\"description\\\":\\\"OK\\\"}}}}},\\\"x-wso2-security\\\":{\\\"apim\\\":{\\\"x-wso2-scopes\\\":[]}},\\\"swagger\\\":\\\"2.0\\\",\\\"info\\\":{\\\"title\\\":\\\"PhoneVerification\\\",\\\"description\\\":\\\"Verify a phone number\\\",\\\"contact\\\":{\\\"email\\\":\\\"xx@ee.com\\\",\\\"name\\\":\\\"xx\\\"},\\\"version\\\":\\\"2.0.0\\\"}}\",\n   \"responseCaching\": \"Disabled\",\n   \"isDefaultVersion\": false,\n   \"gatewayEnvironments\": \"Production and Sandbox\",\n   \"businessInformation\":    {\n      \"technicalOwner\": \"xx\",\n      \"technicalOwnerEmail\": \"ggg@ww.com\",\n      \"businessOwner\": \"xx\",\n      \"businessOwnerEmail\": \"xx@ee.com\"\n   },\n   \"transport\":    [\n      \"http\",\n      \"https\"\n   ],\n   \"tags\":    [\n      \"phone\",\n      \"multimedia\",\n      \"verification\",\n      \"mobile\"\n   ],\n   \"provider\": \"admin\",\n   \"version\": \"2.0.0\",\n   \"description\": \"Use this API to verify a phone number\",\n   \"name\": \"PhoneVerification\",\n   \"context\": \"/phoneverify\",\n   \"id\": \"6fb74674-4ab8-4b52-9886-f9a376985060\",\n   \"status\": \"CREATED\"\n}"
      summary: Update an existing API
      description: |
        Update an existing API
      parameters:
        - $ref: '#/parameters/apiId'
        - in: body
          name: body
          description: |
            API object that needs to be added
          required: true
          schema:
            $ref: '#/definitions/API'
        - $ref: '#/parameters/Content-Type'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      tags:
        - APIs
      responses:
        200:
          description: |
            OK.
            Successful response with updated API object
          schema:
            $ref: '#/definitions/API'
          headers:
            Location:
              description: |
                The URL of the newly created resource.
              type: string
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource. Used by caches, or in conditional request.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional requests.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error
          schema:
            $ref: '#/definitions/Error'
        403:
          description: |
            Forbidden.
            The request must be conditional but no condition has been specified.
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            The resource to be updated does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Delete the definition of an API
#-----------------------------------------------------
    delete:
      x-scope: apim:api_create
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -X DELETE http://127.0.0.1:9763/api/am/publisher/v0.10/apis/6fb74674-4ab8-4b52-9886-f9a376985060"
      x-wso2-response: "HTTP/1.1 200 OK"
      summary: Delete API
      description: |
        Delete an existing API
      parameters:
        - $ref: '#/parameters/apiId'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      tags:
        - APIs
      responses:
        200:
          description: |
            OK.
            Resource successfully deleted.
        403:
          description: |
            Forbidden.
            The request must be conditional but no condition has been specified.
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            Resource to be deleted does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

################################################################
# The swagger resource of "Individual API" resource APIs
################################################################

  /apis/{apiId}/swagger:
#-----------------------------------------------------
# Retrieve the API swagger definition
#-----------------------------------------------------
    get:
      x-scope: apim:api_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" http://127.0.0.1:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b/swagger"
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\nContent-Length: 329\n\n{\n   \"paths\": {\"/*\": {\"get\":    {\n      \"x-auth-type\": \"Application\",\n      \"x-throttling-tier\": \"Unlimited\",\n      \"responses\": {\"200\": {\"description\": \"OK\"}}\n   }}},\n   \"x-wso2-security\": {\"apim\": {\"x-wso2-scopes\": []}},\n   \"swagger\": \"2.0\",\n   \"info\":    {\n      \"title\": \"PhoneVerification\",\n      \"description\": \"Verify a phone number\",\n      \"contact\":       {\n         \"email\": \"xx@ee.com\",\n         \"name\": \"xx\"\n      },\n      \"version\": \"1.0.0\"\n   }\n}"
      summary: Get API Definition
      description: |
        Get the swagger of an API
      parameters:
        - $ref: '#/parameters/apiId'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
        - $ref: '#/parameters/If-Modified-Since'
      tags:
        - APIs
      responses:
        200:
          description: |
            OK.
            Requested swagger document of the API is returned
          headers:
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource. Used by caches, or in conditional requests.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional requests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        404:
          description: |
            Not Found.
            Requested API does not exist.
          schema:
            $ref: '#/definitions/Error'
        406:
          description: |
            Not Acceptable.
            The requested media type is not supported
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Update the API swagger definition
#-----------------------------------------------------
    put:
      consumes:
        - multipart/form-data
      x-scope: apim:api_create
      x-wso2-curl: "curl -k -H \"Authorization:Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -F apiDefinition=\"{\\\"paths\\\":{\\\"\\/*\\\":{\\\"get\\\":{\\\"x-auth-type\\\":\\\"Application\\\",\\\"x-throttling-tier\\\":\\\"Unlimited\\\",\\\"responses\\\":{\\\"200\\\":{\\\"description\\\":\\\"OK\\\"}}}}},\\\"x-wso2-security\\\":{\\\"apim\\\":{\\\"x-wso2-scopes\\\":[]}},\\\"swagger\\\":\\\"2.0\\\",\\\"info\\\":{\\\"title\\\":\\\"PhoneVerification\\\",\\\"description\\\":\\\"Verify a phone number\\\",\\\"contact\\\":{\\\"email\\\":\\\"xx@ee.com\\\",\\\"name\\\":\\\"xx\\\"},\\\"version\\\":\\\"1.0.0\\\"}}\" -X PUT \"http://127.0.0.1:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b/swagger\""
      x-wso2-request: "{\n    \"paths\": {\n        \"\\/*\": {\n            \"get\": {\n                \"x-auth-type\": \"Application\",\n                \"x-throttling-tier\": \"Unlimited\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"OK\"\n                    }\n                }\n            }\n        }\n    },\n    \"x-wso2-security\": {\n        \"apim\": {\n            \"x-wso2-scopes\": []\n        }\n    },\n    \"swagger\": \"2.0\",\n    \"info\": {\n        \"title\": \"PhoneVerification\",\n        \"description\": \"Verify a phone number\",\n        \"contact\": {\n            \"email\": \"xx@ee.com\",\n            \"name\": \"xx\"\n        },\n        \"version\": \"1.0.0\"\n    }\n}"
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"paths\": {\"/*\": {\"get\":    {\n      \"x-auth-type\": \"Application\",\n      \"x-throttling-tier\": \"Unlimited\",\n      \"responses\": {\"200\": {\"description\": \"OK\"}}\n   }}},\n   \"x-wso2-security\": {\"apim\": {\"x-wso2-scopes\": []}},\n   \"swagger\": \"2.0\",\n   \"info\":    {\n      \"title\": \"PhoneVerification\",\n      \"description\": \"Verify a phone number\",\n      \"contact\":       {\n         \"email\": \"xx@ee.com\",\n         \"name\": \"xx\"\n      },\n      \"version\": \"1.0.0\"\n   }\n}"
      summary: Update API Definition
      description: |
        Update an existing swagger definition of an API
      parameters:
        - $ref: '#/parameters/apiId'
        - in: formData
          name: apiDefinition
          description: Swagger definition of the API
          type: string
          required: true
        - $ref: '#/parameters/Content-Type'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      tags:
        - APIs
      responses:
        200:
          description: |
            OK.
            Successful response with updated Swagger definition
          headers:
            Location:
              description: |
                The URL of the newly created resource.
              type: string
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource. Used by caches, or in conditional request.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional requests.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error
          schema:
            $ref: '#/definitions/Error'
        403:
          description: |
            Forbidden.
            The request must be conditional but no condition has been specified.
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            The resource to be updated does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

################################################################
# The thumbnail resource of "Individual API" resource APIs
################################################################

  /apis/{apiId}/thumbnail:
#-------------------------------------------------------------------------------------------------
# Downloads a thumbnail image of an API
#-------------------------------------------------------------------------------------------------
    get:
      x-scope: apim:api_view
      x-wso2-curl: "curl -H \"Authorization: Bearer d34baf74-3f02-3929-814e-88b27f750ba9\" http://127.0.0.1:9763/api/am/publisher/v0.10/apis/29c9ec3d-f590-467e-83e6-96d43517080f/thumbnail > image.jpg"
      x-wso2-response: "HTTP/1.1 200 OK\r\nContent-Type: image/jpeg\r\n\r\n[image content]"
      summary: Get the thumbnail image
      description: |
        Downloads a thumbnail image of an API
      parameters:
        - $ref: '#/parameters/apiId'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
        - $ref: '#/parameters/If-Modified-Since'
      tags:
        - APIs
      responses:
        200:
          description: |
            OK.
            Thumbnail image returned
          headers:
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional requests.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional reuquests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        404:
          description: |
            Not Found.
            Requested Document does not exist.
          schema:
            $ref: '#/definitions/Error'
        406:
          description: |
            Not Acceptable.
            The requested media type is not supported
          schema:
            $ref: '#/definitions/Error'

#----------------------------------------------------------------------------
# Upload a thumbnail image to a certain API
#----------------------------------------------------------------------------
    post:
      consumes:
        - multipart/form-data
      x-scope: apim:api_create
      x-wso2-curl: "curl -X POST -H \"Authorization: Bearer d34baf74-3f02-3929-814e-88b27f750ba9\" http://127.0.0.1:9763/api/am/publisher/v0.10/apis/29c9ec3d-f590-467e-83e6-96d43517080f/thumbnail -F file=@image.jpg"
      x-wso2-response: "HTTP/1.1 201 Created\r\nLocation: http://localhost:9763/api/am/publisher/v0.10/apis/29c9ec3d-f590-467e-83e6-96d43517080f/thumbnail\r\nContent-Type: application/json\r\n\r\n{\r\n   \"relativePath\": \"/apis/29c9ec3d-f590-467e-83e6-96d43517080f/thumbnail\",\r\n   \"mediaType\": \"image/jpeg\"\r\n}"
      summary: Upload a thumbnail image
      description: |
        Upload a thumbnail image to an API.
      parameters:
        - $ref: '#/parameters/apiId'
        - in: formData
          name: file
          description: Image to upload
          type: file
          required: true
        - $ref: '#/parameters/Content-Type'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      tags:
        - APIs
      responses:
        200:
          description: |
            OK.
            Image updated
          schema:
            $ref : '#/definitions/FileInfo'
          headers:
            Location:
              description: |
                The URL of the uploaded thumbnail image of the API.
              type: string
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional request.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional reuquests.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error.
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            The resource to be updated does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Copy API" Processing Function resource API
######################################################
  /apis/copy-api:

#-----------------------------------------------------
# Create a new API based on an already existing one
#-----------------------------------------------------
    post:
      x-scope: apim:api_create
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -X POST \"http://127.0.0.1:9763/api/am/publisher/v0.10/apis/copy-api?apiId=890a4f4d-09eb-4877-a323-57f6ce2ed79b&newVersion=2.0.0\""
      x-wso2-response: "HTTP/1.1 201 Created\nLocation: http://localhost:9763/api/am/publisher/v0.10/apis/6fb74674-4ab8-4b52-9886-f9a376985060\nContent-Type: application/json\n\n{\n   \"sequences\": [],\n   \"tiers\":    [\n      \"Bronze\",\n      \"Gold\"\n   ],\n   \"thumbnailUrl\": null,\n   \"visibility\": \"PUBLIC\",\n   \"visibleRoles\": [],\n   \"visibleTenants\": [],\n   \"cacheTimeout\": 300,\n   \"endpointConfig\": \"{\\\"production_endpoints\\\":{\\\"url\\\":\\\" http://ws.cdyne.com/phoneverify/phoneverify.asmx\\\",\\\"config\\\":null},\\\"endpoint_type\\\":\\\"http\\\"}\",\n   \"subscriptionAvailability\": null,\n   \"subscriptionAvailableTenants\": [],\n   \"destinationStatsEnabled\": \"Disabled\",\n   \"apiDefinition\": \"{\\\"paths\\\":{\\\"\\/*\\\":{\\\"get\\\":{\\\"x-auth-type\\\":\\\"Application\\\",\\\"x-throttling-tier\\\":\\\"Unlimited\\\",\\\"responses\\\":{\\\"200\\\":{\\\"description\\\":\\\"OK\\\"}}}}},\\\"x-wso2-security\\\":{\\\"apim\\\":{\\\"x-wso2-scopes\\\":[]}},\\\"swagger\\\":\\\"2.0\\\",\\\"info\\\":{\\\"title\\\":\\\"PhoneVerification\\\",\\\"description\\\":\\\"Verify a phone number\\\",\\\"contact\\\":{\\\"email\\\":\\\"xx@ee.com\\\",\\\"name\\\":\\\"xx\\\"},\\\"version\\\":\\\"2.0.0\\\"}}\",\n   \"responseCaching\": \"Disabled\",\n   \"isDefaultVersion\": true,\n   \"gatewayEnvironments\": \"Production and Sandbox\",\n   \"businessInformation\":    {\n      \"technicalOwner\": \"xx\",\n      \"technicalOwnerEmail\": \"ggg@ww.com\",\n      \"businessOwner\": \"xx\",\n      \"businessOwnerEmail\": \"xx@ee.com\"\n   },\n   \"transport\":    [\n      \"http\",\n      \"https\"\n   ],\n   \"tags\":    [\n      \"phone\",\n      \"multimedia\",\n      \"mobile\"\n   ],\n   \"provider\": \"admin\",\n   \"version\": \"2.0.0\",\n   \"description\": \"Verify a phone number\",\n   \"name\": \"PhoneVerification\",\n   \"context\": \"/phoneverify\",\n   \"id\": \"6fb74674-4ab8-4b52-9886-f9a376985060\",\n   \"status\": \"CREATED\"\n}"
      summary: Copy API
      description: |
        Create a new API by copying an existing API
      parameters:
        - name: newVersion
          description: Version of the new API.
          type: string
          in: query
          required: true
        - $ref: '#/parameters/apiId-Q'
      tags:
        - APIs
      responses:
        201:
          description: |
            Created.
            Successful response with the newly created API as entity in the body. Location header contains URL of newly created API.
          headers:
            Location:
              description: |
                The URL of the newly created API.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            API to copy does not exist.
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Change Lifecycle" Processing Function resource API
######################################################
  /apis/change-lifecycle:

#-----------------------------------------------------
# Change the lifecycle of an API
#-----------------------------------------------------
    post:
      x-scope: apim:api_publish
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -X POST \"http://127.0.0.1:9763/api/am/publisher/v0.10/apis/change-lifecycle?apiId=890a4f4d-09eb-4877-a323-57f6ce2ed79b&action=Publish\""
      x-wso2-response: "HTTP/1.1 200 OK"
      summary: Change API Status
      description: |
        Change the lifecycle of an API
      parameters:
        - name: action
          description: |
            The action to demote or promote the state of the API.

            Supported actions are [ **Publish, Deploy as a Prototype, Demote to Created, Demote to Prototyped, Block, Deprecate, Re-Publish, Retire **]

          in: query
          type: string
          required: true
          enum:
            - Publish
            - Deploy as a Prototype
            - Demote to Created
            - Demote to Prototyped
            - Block
            - Deprecate
            - Re-Publish
            - Retire
        - name: lifecycleChecklist
          description: |

            You can specify additional checklist items by using an **"attribute:"** modifier.

            Eg: "Deprecate Old Versions:true" will deprecate older versions of a particular API when it is promoted to
            Published state from Created state. Multiple checklist items can be given in "attribute1:true, attribute2:false"
            format.

            Supported checklist items are as follows.
            1. **Deprecate Old Versions**: Setting this to true will deprecate older versions of a particular API when it is promoted to Published state from Created state.
            2. **Require Re-Subscription**: If you set this to true, users need to re subscribe to the API although they may have subscribed to an older version.

          type: string
          in: query
        - $ref: '#/parameters/apiId-Q'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      tags:
        - APIs
      responses:
        200:
          description: |
            OK.
            Lifecycle changed successfully.
          headers:
            ETag:
              description: |
                Entity Tag of the changed API. Used by caches, or in conditional request.
              type: string
            Last-Modified:
              description: |
                Date and time the API lifecycle has been modified the last time.
                Used by caches, or in conditional requests.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            Requested API does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Document Collection" resource APIs
######################################################
  /apis/{apiId}/documents:

#-----------------------------------------------------
# Retrieve the documents associated with an API that qualify under a search condition
#-----------------------------------------------------
    get:
      x-scope: apim:api_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" \"http://127.0.0.1:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b/documents\""
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"previous\": \"\",\n   \"list\":    [\n            {\n         \"visibility\": \"API_LEVEL\",\n         \"sourceType\": \"INLINE\",\n         \"sourceUrl\": null,\n         \"otherTypeName\": null,\n         \"documentId\": \"0bcb7f05-599d-4e1a-adce-5cb89bfe58d5\",\n         \"summary\": \"This is a sample documentation for v1.0.0\",\n         \"name\": \"PhoneVerification API Documentation\",\n         \"type\": \"HOWTO\"\n      },\n            {\n         \"visibility\": \"API_LEVEL\",\n         \"sourceType\": \"URL\",\n         \"sourceUrl\": \"http://wiki.cdyne.com/index.php/Phone_Verification\",\n         \"otherTypeName\": null,\n         \"documentId\": \"4145df31-04f1-440c-8d08-68952874622c\",\n         \"summary\": \"This is the URL for online documentation\",\n         \"name\": \"Online Documentation\",\n         \"type\": \"SAMPLES\"\n      }\n   ],\n   \"next\": \"\",\n   \"count\": 2\n}"
      summary: Get API Documents
      description: |
        Get a list of documents belonging to an API.
      parameters:
        - $ref: '#/parameters/apiId'
        - $ref: '#/parameters/limit'
        - $ref: '#/parameters/offset'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
      tags:
        - API Document
      responses:
        200:
          description: |
            OK.
            Document list is returned.
          schema:
            $ref: '#/definitions/DocumentList'
          headers:
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource. Used by caches, or in conditional requests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        404:
          description: |
            Not Found.
            Requested API does not exist.
          schema:
            $ref: '#/definitions/Error'
        406:
          description: |
            Not Acceptable.
            The requested media type is not supported
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Add a document to a certain API
#-----------------------------------------------------
    post:
      x-scope: apim:api_create
      x-wso2-curl: "curl -H \"Authorization: Bearer cdcc8cf6016ed10620edf3a1d3c5ef2b\" -H \"Content-Type: application/json\" -X POST -d @data.json \"http://127.0.0.1:9763/api/am/publisher/v0.10/apis/96077508-fd01-4fae-bc64-5de0e2baf43c/documents\""
      x-wso2-request: "{\n    \"visibility\": \"API_LEVEL\",\n    \"sourceType\": \"INLINE\",\n    \"sourceUrl\": null,\n    \"otherTypeName\": null,\n    \"summary\": \"This is a sample documentation\",\n    \"name\": \"Introduction to PhoneVerification API\",\n    \"type\": \"HOWTO\"\n}"
      x-wso2-response: "HTTP/1.1 201 Created\nLocation: http://localhost:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b/documents/ffd5790d-b7a9-4cb6-b76a-f8b83ecdd058\nContent-Type: application/json\n\n{\n   \"visibility\": \"API_LEVEL\",\n   \"sourceType\": \"INLINE\",\n   \"sourceUrl\": null,\n   \"otherTypeName\": null,\n   \"documentId\": \"ffd5790d-b7a9-4cb6-b76a-f8b83ecdd058\",\n   \"summary\": \"This is a sample documentation\",\n   \"name\": \"Introduction to PhoneVerification API\",\n   \"type\": \"HOWTO\"\n}"
      summary: Add a new document
      description: |
        Add a new document to an API
      parameters:
        - $ref: '#/parameters/apiId'
        - in: body
          name: body
          description: |
            Document object that needs to be added
          required: true
          schema:
            $ref: '#/definitions/Document'
        - $ref: '#/parameters/Content-Type'
      tags:
        - API Document
      responses:
        201:
          description: |
            Created.
            Successful response with the newly created Document object as entity in the body.
            Location header contains URL of newly added document.
          schema:
            $ref: '#/definitions/Document'
          headers:
            Location:
              description: |
                Location to the newly created Document.
              type: string
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional request.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error
          schema:
            $ref: '#/definitions/Error'
        415:
          description: |
            Unsupported media type.
            The entity of the request was in a not supported format.

######################################################
# The "Individual Document" resource APIs
######################################################
  '/apis/{apiId}/documents/{documentId}':

#-----------------------------------------------------
# Retrieve a particular document of a certain API
#-----------------------------------------------------
    get:
      x-scope: apim:api_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" \"http://127.0.0.1:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b/documents/0bcb7f05-599d-4e1a-adce-5cb89bfe58d5\""
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"visibility\": \"API_LEVEL\",\n   \"sourceType\": \"INLINE\",\n   \"sourceUrl\": null,\n   \"otherTypeName\": null,\n   \"documentId\": \"0bcb7f05-599d-4e1a-adce-5cb89bfe58d5\",\n   \"summary\": \"This is a sample documentation\",\n   \"name\": \"PhoneVerification API Documentation\",\n   \"type\": \"HOWTO\"\n}"
      summary: Get an API Document
      description: |
        Get a particular document associated with an API.
      parameters:
        - $ref: '#/parameters/apiId'
        - $ref: '#/parameters/documentId'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
        - $ref: '#/parameters/If-Modified-Since'
      tags:
        - API Document
      responses:
        200:
          description: |
            OK.
            Document returned.
          schema:
            $ref: '#/definitions/Document'
          headers:
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional requests.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional reuquests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        404:
          description: |
            Not Found.
            Requested Document does not exist.
          schema:
            $ref: '#/definitions/Error'
        406:
          description: |
            Not Acceptable.
            The requested media type is not supported
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Update a particular document of a certain API
#-----------------------------------------------------
    put:
      x-scope: apim:api_create
      x-wso2-curl: "curl -k -H \"Authorization:Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -H \"Content-Type: application/json\" -X PUT -d data.json \"http://127.0.0.1:9763/api/am/publisher/v0.10/apis/96077508-fd01-4fae-bc64-5de0e2baf43c/documents/0bcb7f05-599d-4e1a-adce-5cb89bfe58d5\""
      x-wso2-request: "{\n   \"visibility\": \"API_LEVEL\",\n   \"sourceType\": \"INLINE\",\n   \"sourceUrl\": null,\n   \"otherTypeName\": null,\n   \"documentId\": \"0bcb7f05-599d-4e1a-adce-5cb89bfe58d5\",\n   \"summary\": \"This is a sample documentation for v1.0.0\",\n   \"name\": \"PhoneVerification API Documentation\",\n   \"type\": \"HOWTO\"\n}"
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"visibility\": \"API_LEVEL\",\n   \"sourceType\": \"INLINE\",\n   \"sourceUrl\": null,\n   \"otherTypeName\": null,\n   \"documentId\": \"0bcb7f05-599d-4e1a-adce-5cb89bfe58d5\",\n   \"summary\": \"This is a sample documentation for v1.0.0\",\n   \"name\": \"PhoneVerification API Documentation\",\n   \"type\": \"HOWTO\"\n}"
      summary: Update an API Document
      description: |
        Update document details.
      parameters:
        - $ref: '#/parameters/apiId'
        - $ref: '#/parameters/documentId'
        - in: body
          name: body
          description: |
            Document object that needs to be added
          required: true
          schema:
            $ref: '#/definitions/Document'
        - $ref: '#/parameters/Content-Type'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      tags:
        - API Document
      responses:
        200:
          description: |
            OK.
            Document updated
          schema:
            $ref: '#/definitions/Document'
          headers:
            Location:
              description: |
                The URL of the updated document.
              type: string
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional request.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional reuquests.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error.
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            The resource to be updated does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Delete a particular document of a certain API
#-----------------------------------------------------
    delete:
      x-scope: apim:api_create
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -X DELETE http://127.0.0.1:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b/documents/ffd5790d-b7a9-4cb6-b76a-f8b83ecdd058"
      x-wso2-response: "HTTP/1.1 200 OK"
      summary: Delete an API Document
      description: |
        Delete a document of an API
      parameters:
        - $ref: '#/parameters/apiId'
        - $ref: '#/parameters/documentId'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      tags:
        - API Document
      responses:
        200:
          description: |
            OK.
            Resource successfully deleted.
        404:
          description: |
            Not Found.
            Resource to be deleted does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

################################################################
# The content resource of "Individual Document" resource APIs
################################################################

  '/apis/{apiId}/documents/{documentId}/content':

  #-------------------------------------------------------------------------------------------------
  # Downloads a FILE type document/get the inline content or source url of a certain document
  #-------------------------------------------------------------------------------------------------
      get:
        x-scope: apim:api_view
        x-wso2-curl: "curl -k -H \"Authorization:Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" \"http://127.0.0.1:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b/documents/daf732d3-bda2-46da-b381-2c39d901ea61/content\" > sample.pdf"
        x-wso2-response: "HTTP/1.1 200 OK\nContent-Disposition: attachment; filename=\"sample.pdf\"\nContent-Type: application/octet-stream\nContent-Length: 7802\n\n%PDF-1.4\n%äüöß\n2 0 obj\n<</Length 3 0 R/Filter/FlateDecode>>\nstream\n..\n>>\nstartxref\n7279\n%%EOF"
        summary: Get document content
        description: |
          Downloads a FILE type document/get the inline content or source url of a certain document.
        parameters:
          - $ref: '#/parameters/apiId'
          - $ref: '#/parameters/documentId'
          - $ref: '#/parameters/Accept'
          - $ref: '#/parameters/If-None-Match'
          - $ref: '#/parameters/If-Modified-Since'
        tags:
          - API Document
        responses:
          200:
            description: |
              OK.
              File or inline content returned.
            headers:
              Content-Type:
                description: |
                  The content type of the body.
                type: string
              ETag:
                description: |
                  Entity Tag of the response resource.
                  Used by caches, or in conditional requests.
                type: string
              Last-Modified:
                description: |
                  Date and time the resource has been modifed the last time.
                  Used by caches, or in conditional reuquests.
                type: string
          303:
            description: |
              See Other.
              Source can be retrived from the URL specified at the Location header.
            headers:
              Location:
                description: |
                  The Source URL of the document.
                type: string
          304:
            description: |
              Not Modified.
              Empty body because the client has already the latest version of the requested resource.
          404:
            description: |
              Not Found.
              Requested Document does not exist.
            schema:
              $ref: '#/definitions/Error'
          406:
            description: |
              Not Acceptable.
              The requested media type is not supported
            schema:
              $ref: '#/definitions/Error'

  #----------------------------------------------------------------------------
  # Upload a file or add inline content to a document of a certain API
  #----------------------------------------------------------------------------
      post:
        consumes:
          - multipart/form-data
        x-scope: apim:api_create
        x-wso2-curl: "curl -k -H \"Authorization:Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -F file=@\"sample.pdf\" -X POST \"http://127.0.0.1:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b/documents/daf732d3-bda2-46da-b381-2c39d901ea61/content\""
        x-wso2-response: "HTTP/1.1 201 Created\nLocation: http://localhost:9763/api/am/publisher/v0.10/apis/890a4f4d-09eb-4877-a323-57f6ce2ed79b/documents/daf732d3-bda2-46da-b381-2c39d901ea61/content\nContent-Type: application/json\n\n{\n    \"visibility\":\"API_LEVEL\",\n    \"sourceType\":\"FILE\",\n    \"sourceUrl\":null,\n    \"otherTypeName\":null,\n    \"documentId\":\"daf732d3-bda2-46da-b381-2c39d901ea61\",\n    \"summary\":\"This is a sample documentation pdf\",\n    \"name\":\"Introduction to PhoneVerification API PDF\",\n    \"type\":\"HOWTO\"\n}"
        summary: Update API document content.
        description: |
          Upload a file to a document or add inline content to the document.

          Document's source type should be **FILE** in order to upload a file to the document using **file** parameter.
          Document's source type should be **INLINE** in order to add inline content to the document using **inlineContent** parameter.

          Only one of **file** or **inlineContent** can be specified at one time.
        parameters:
          - $ref: '#/parameters/apiId'
          - $ref: '#/parameters/documentId'
          - in: formData
            name: file
            description: Document to upload
            type: file
            required: false
          - in: formData
            name: inlineContent
            description: Inline content of the document
            type: string
            required: false
          - $ref: '#/parameters/Content-Type'
          - $ref: '#/parameters/If-Match'
          - $ref: '#/parameters/If-Unmodified-Since'
        tags:
          - API Document
        responses:
          200:
            description: |
              OK.
              Document updated
            schema:
              $ref: '#/definitions/Document'
            headers:
              Location:
                description: |
                  The URL of the updated content of the document.
                type: string
              Content-Type:
                description: |
                  The content type of the body.
                type: string
              ETag:
                description: |
                  Entity Tag of the response resource.
                  Used by caches, or in conditional request.
                type: string
              Last-Modified:
                description: |
                  Date and time the resource has been modifed the last time.
                  Used by caches, or in conditional reuquests.
                type: string
          400:
            description: |
              Bad Request.
              Invalid request or validation error.
            schema:
              $ref: '#/definitions/Error'
          404:
            description: |
              Not Found.
              The resource to be updated does not exist.
            schema:
              $ref: '#/definitions/Error'
          412:
            description: |
              Precondition Failed.
              The request has not been performed because one of the preconditions is not met.
            schema:
              $ref: '#/definitions/Error'

######################################################
# The "Individual Application" resource APIs
######################################################
  '/applications/{applicationId}':

#-----------------------------------------------------
# Retrieve the details about a certain application
#-----------------------------------------------------
    get:
      x-scope: apim:api_create
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" http://127.0.0.1:9763/api/am/publisher/v0.10/applications/896658a0-b4ee-4535-bbfa-806c894a4015"
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"groupId\": \"\",\n   \"subscriber\": \"admin\",\n   \"throttlingTier\": \"Unlimited\",\n   \"applicationId\": \"896658a0-b4ee-4535-bbfa-806c894a4015\",\n   \"description\": null,\n   \"name\": \"DefaultApplication\"\n}"
      summary: Get Application
      description: |
        Get application details
      parameters:
        - $ref: '#/parameters/applicationId'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
        - $ref: '#/parameters/If-Modified-Since'
      tags:
        - Applications
      responses:
        200:
          description: |
            OK.
            Application returned.
          schema:
            $ref: '#/definitions/Application'
          headers:
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource. Used by caches, or in conditional requests.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional reuquests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        404:
          description: |
            Not Found.
            Requested application does not exist.
          schema:
            $ref: '#/definitions/Error'
        406:
          description: |
            Not Acceptable.
            The requested media type is not supported
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Subscription Collection" resource APIs
######################################################
  /subscriptions:

#-----------------------------------------------------
# Retrieve all subscriptions of a certain API
#-----------------------------------------------------
    get:
      x-scope: apim:subscription_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" \"http://127.0.0.1:9763/api/am/publisher/v0.10/subscriptions?apiId=890a4f4d-09eb-4877-a323-57f6ce2ed79b\""
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n \n{\n   \"previous\": \"\",\n   \"list\":    [\n            {\n         \"subscriptionId\": \"64eca60b-2e55-4c38-8603-e9e6bad7d809\",\n         \"tier\": \"Gold\",\n         \"apiIdentifier\": \"admin-PhoneVerification-1.0.0\",\n         \"applicationId\": \"896658a0-b4ee-4535-bbfa-806c894a4015\",\n         \"status\": \"UNBLOCKED\"\n      },\n            {\n         \"subscriptionId\": \"7ac22c34-8745-4cfe-91e0-262c50b2f2e3\",\n         \"tier\": \"Gold\",\n         \"apiIdentifier\": \"admin-PhoneVerification-1.0.0\",\n         \"applicationId\": \"367a2361-8db5-4140-8133-c6c8dc7fa0c4\",\n         \"status\": \"UNBLOCKED\"\n      }\n   ],\n   \"next\": \"\",\n   \"count\": 2\n}"
      summary: Get All Subscriptions
      description: |
        Get subscription list.
        The API Identifier and corresponding Application Identifier
        the subscriptions of which are to be returned are passed as parameters.
      parameters:
        - $ref: '#/parameters/apiId-Q'
        - $ref: '#/parameters/limit'
        - $ref: '#/parameters/offset'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
      tags:
        - Subscriptions
      responses:
        200:
          description: |
            OK.
            Subscription list returned.
          schema:
            $ref: '#/definitions/SubscriptionList'
          headers:
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional requests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        406:
          description: |
            Not Acceptable. The requested media type is not supported
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Individual Subscription" resource APIs
######################################################
  '/subscriptions/{subscriptionId}':

#-----------------------------------------------------
# Retrieve a certain subscription
#-----------------------------------------------------
    get:
      x-scope: apim:subscription_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" http://127.0.0.1:9763/api/am/publisher/v0.10/subscriptions/64eca60b-2e55-4c38-8603-e9e6bad7d809"
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"subscriptionId\": \"64eca60b-2e55-4c38-8603-e9e6bad7d809\",\n   \"tier\": \"Gold\",\n   \"apiIdentifier\": \"admin-PhoneVerification-1.0.0\",\n   \"applicationId\": \"896658a0-b4ee-4535-bbfa-806c894a4015\",\n   \"status\": \"UNBLOCKED\"\n}"
      summary: Get a Subscription
      description: |
        Get subscription details
      parameters:
        - $ref: '#/parameters/subscriptionId'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
        - $ref: '#/parameters/If-Modified-Since'
      tags:
        - Subscriptions
      responses:
        200:
          description: |
            OK.
            Subscription returned
          schema:
            $ref: '#/definitions/Subscription'
          headers:
            Content-Type:
              description: The content type of the body.
              type: string
            ETag:
              description: 'Entity Tag of the response resource. Used by caches, or in conditional requests.'
              type: string
            Last-Modified:
              description: 'Date and time the resource has been modifed the last time. Used by caches, or in conditional reuquests.'
              type: string
        '304':
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        '404':
          description: |
            Not Found.
            Requested Subscription does not exist.
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Block Subscription" Processing Function resource API
######################################################
  /subscriptions/block-subscription:

#-----------------------------------------------------
# Block a certain subscription
#-----------------------------------------------------
    post:
      x-scope: apim:subscription_block
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -X POST \"http://127.0.0.1:9763/api/am/publisher/v0.10/subscriptions/block-subscription?subscriptionId=64eca60b-2e55-4c38-8603-e9e6bad7d809&blockState=PROD_ONLY_BLOCKED\""
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n \n{\n   \"subscriptionId\": \"64eca60b-2e55-4c38-8603-e9e6bad7d809\",\n   \"tier\": \"Gold\",\n   \"apiIdentifier\": \"admin-PhoneVerification-1.0.0\",\n   \"applicationId\": \"896658a0-b4ee-4535-bbfa-806c894a4015\",\n   \"status\": \"PROD_ONLY_BLOCKED\"\n}"
      summary: Block a subscription
      parameters:
        - $ref: '#/parameters/subscriptionId-Q'
        - name: blockState
          in: query
          description: |
            Subscription block state.
          type: string
          required: true
          enum:
            - BLOCKED
            - PROD_ONLY_BLOCKED
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      description: |
        Block a subscription.
      tags:
        - Subscriptions
      responses:
        200:
          description: |
            OK.
            Subscription was blocked successfully.
          headers:
            ETag:
              description: |
                Entity Tag of the blocked subscription.
                Used by caches, or in conditional request.
              type: string
            Last-Modified:
              description: |
                Date and time the subscription has been blocked.
                Used by caches, or in conditional requests.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            Requested subscription does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Unblock Subscription" Processing Function resource API
######################################################
  /subscriptions/unblock-subscription:

#-----------------------------------------------------
# Unblock a certain subscription
#-----------------------------------------------------
    post:
      x-scope: apim:subscription_block
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -X POST \"http://127.0.0.1:9763/api/am/publisher/v0.10/subscriptions/unblock-subscription?subscriptionId=64eca60b-2e55-4c38-8603-e9e6bad7d809\""
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"subscriptionId\": \"64eca60b-2e55-4c38-8603-e9e6bad7d809\",\n   \"tier\": \"Gold\",\n   \"apiIdentifier\": \"admin-PhoneVerification-1.0.0\",\n   \"applicationId\": \"896658a0-b4ee-4535-bbfa-806c894a4015\",\n   \"status\": \"UNBLOCKED\"\n} "
      summary: Unblock a Subscription
      parameters:
        - $ref: '#/parameters/subscriptionId-Q'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      description: |
        Unblock a subscription.
      tags:
        - Subscriptions
      responses:
        200:
          description: |
            OK.
            Subscription was unblocked successfully.
          headers:
            ETag:
              description: |
                Entity Tag of the unblocked subscription.
                Used by caches, or in conditional request.
              type: string
            Last-Modified:
              description: |
                Date and time the subscription has been unblocked.
                Used by caches, or in conditional requests.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            Requested subscription does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Tier Collection" resource APIs
######################################################
  '/tiers/{tierLevel}':

#-----------------------------------------------------
# Retrieve the list of all available tiers
#-----------------------------------------------------
    get:
      x-scope: apim:tier_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" http://127.0.0.1:9763/api/am/publisher/v0.10/tiers/api"
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n\n{\n   \"previous\": \"\",\n   \"list\":    [\n            {\n         \"unitTime\": 60000,\n         \"tierPlan\": \"FREE\",\n         \"tierLevel\": \"api\",\n         \"stopOnQuotaReach\": true,\n         \"requestCount\": 1,\n         \"description\": \"Allows 1 request(s) per minute.\",\n         \"name\": \"Bronze\",\n         \"attributes\": {}\n      },\n            {\n         \"unitTime\": 60000,\n         \"tierPlan\": \"FREE\",\n         \"tierLevel\": \"api\",\n         \"stopOnQuotaReach\": true,\n         \"requestCount\": 20,\n         \"description\": \"Allows 20 request(s) per minute.\",\n         \"name\": \"Gold\",\n         \"attributes\": {}\n      },\n            {\n         \"unitTime\": 60000,\n         \"tierPlan\": \"FREE\",\n         \"tierLevel\": \"api\",\n         \"stopOnQuotaReach\": true,\n         \"requestCount\": 5,\n         \"description\": \"Allows 5 request(s) per minute.\",\n         \"name\": \"Silver\",\n         \"attributes\": {}\n      },\n            {\n         \"unitTime\": 0,\n         \"tierPlan\": null,\n         \"tierLevel\": \"api\",\n         \"stopOnQuotaReach\": true,\n         \"requestCount\": 0,\n         \"description\": \"Allows unlimited requests\",\n         \"name\": \"Unlimited\",\n         \"attributes\": {}\n      }\n   ],\n   \"next\": \"\",\n   \"count\": 4\n}"
      summary: List Tiers
      description: |
        Get available tiers
      parameters:
        - $ref: '#/parameters/limit'
        - $ref: '#/parameters/offset'
        - $ref: '#/parameters/tierLevel'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
      tags:
        - Tiers
      responses:
        200:
          description: |
            OK.
            List of tiers returned.
          schema:
            $ref: '#/definitions/TierList'
          headers:
            Content-Type:
              description: The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional requests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        406:
          description: |
            Not Acceptable.
            The requested media type is not supported
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Create a new tier
#-----------------------------------------------------
    post:
      x-scope: apim:tier_manage
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -H \"Content-Type: application/json\" -X POST -d @data.json \"http://127.0.0.1:9763/api/am/publisher/v0.10/tiers/api\""
      x-wso2-request: "{\n    \"unitTime\": 60000,\n    \"tierPlan\": \"FREE\",\n    \"tierLevel\": \"api\",\n    \"stopOnQuotaReach\": true,\n    \"requestCount\": 5,\n    \"description\": \"Allows 5 request(s) per minute.\",\n    \"name\": \"Low\",\n    \"attributes\": {\n            \"a\":10,\n            \"b\":30\n        }\n}"
      x-wso2-response: "HTTP/1.1 201 Created\nLocation: http://localhost:9763/api/am/publisher/v0.10/tiers/Low\nContent-Type: application/json\n\n{\n   \"unitTime\": 60000,\n   \"tierPlan\": \"FREE\",\n   \"tierLevel\": \"api\",\n   \"stopOnQuotaReach\": true,\n   \"requestCount\": 5,\n   \"description\": \"Allows 5 request(s) per minute.\",\n   \"name\": \"Low\",\n   \"attributes\":    {\n      \"b\": \"30\",\n      \"a\": \"10\"\n   }\n}"
      summary: Add a new Tier
      description: |
        Add a new tier
      parameters:
        - in: body
          name: body
          description: |
            Tier object that should to be added
          required: true
          schema:
            $ref: '#/definitions/Tier'
        - $ref: '#/parameters/tierLevel'
        - $ref: '#/parameters/Content-Type'
      tags:
        - Tiers
      responses:
        201:
          description: |
            Created.
            Successful response with the newly created object as entity in the body.
            Location header contains URL of newly created entity.
          schema:
            $ref: '#/definitions/Tier'
          headers:
            Location:
              description: |
                Location of the newly created tier.
              type: string
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional request'
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error
          schema:
            $ref: '#/definitions/Error'
        415:
          description: |
            Unsupported media type.
            The entity of the request was in a not supported format.

######################################################
# The "Individual Tier" resource APIs
######################################################
  '/tiers/{tierLevel}/{tierName}':

#-----------------------------------------------------
# Retrieve a certain tier
#-----------------------------------------------------
    get:
      x-scope: apim:tier_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" http://127.0.0.1:9763/api/am/publisher/v0.10/tiers/api/Bronze"
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"unitTime\": 60000,\n   \"tierPlan\": \"FREE\",\n   \"tierLevel\": \"api\",\n   \"stopOnQuotaReach\": true,\n   \"requestCount\": 1,\n   \"description\": \"Allows 1 request(s) per minute.\",\n   \"name\": \"Bronze\",\n   \"attributes\": {}\n}"
      summary: Get a Tier
      description: |
        Get tier details
      parameters:
        - $ref: '#/parameters/tierName'
        - $ref: '#/parameters/tierLevel'
        - $ref: '#/parameters/Accept'
        - $ref: '#/parameters/If-None-Match'
        - $ref: '#/parameters/If-Modified-Since'
      tags:
        - Tiers
      responses:
        200:
          description: |
            OK.
            Tier returned
          schema:
            $ref: '#/definitions/Tier'
          headers:
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional requests.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional reuquests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        404:
          description: |
            Not Found.
            Requested Tier does not exist.
          schema:
            $ref: '#/definitions/Error'
        406:
          description: |
            Not Acceptable.
            The requested media type is not supported.
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Update a certain tier
#-----------------------------------------------------
    put:
      x-scope: apim:tier_manage
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -H \"Content-Type: application/json\" -X PUT -d @data.json \"http://127.0.0.1:9763/api/am/publisher/v0.10/tiers/api/Low\""
      x-wso2-request: "{\n   \"unitTime\": 60000,\n   \"tierPlan\": \"FREE\",\n   \"tierLevel\": \"api\",\n   \"stopOnQuotaReach\": true,\n   \"requestCount\": 10,\n   \"description\": \"Allows 10 request(s) per minute.\",\n   \"name\": \"Low\",\n   \"attributes\":    {\n      \"a\": \"30\",\n      \"b\": \"10\",\n      \"c\": \"20\"\n   }\n}\n"
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"unitTime\": 60000,\n   \"tierPlan\": \"FREE\",\n   \"tierLevel\": \"api\",\n   \"stopOnQuotaReach\": true,\n   \"requestCount\": 10,\n   \"description\": \"Allows 10 request(s) per minute.\",\n   \"name\": \"Low\",\n   \"attributes\":    {\n      \"b\": \"10\",\n      \"c\": \"20\",\n      \"a\": \"30\"\n   }\n}"
      summary: Update a Tier
      description: |
        Update tier details
      parameters:
        - $ref: '#/parameters/tierName'
        - in: body
          name: body
          description: |
            Tier object that needs to be modified
          required: true
          schema:
            $ref: '#/definitions/Tier'
        - $ref: '#/parameters/tierLevel'
        - $ref: '#/parameters/Content-Type'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      tags:
        - Tiers
      responses:
        200:
          description: |
            OK.
            Subscription updated.
          schema:
            $ref: '#/definitions/Tier'
          headers:
            Location:
              description: |
                The URL of the newly created resource.
              type: string
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional request.
              type: string
            Last-Modified:
              description: |
                Date and time the resource has been modifed the last time.
                Used by caches, or in conditional reuquests.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error.
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            The resource to be updated does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

#-----------------------------------------------------
# Delete a certain tier
#-----------------------------------------------------
    delete:
      x-scope: apim:tier_manage
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -X POST \"http://127.0.0.1:9763/api/am/publisher/v0.10/tiers/api/Low\""
      x-wso2-response: "HTTP/1.1 200 OK"
      summary: Delete a Tier
      description: |
        Remove a tier
      parameters:
        - $ref: '#/parameters/tierName'
        - $ref: '#/parameters/tierLevel'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
      tags:
        - Tiers
      responses:
        200:
          description: |
            OK.
            Resource successfully deleted.
        404:
          description: |
            Not Found.
            Resource to be deleted does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'

######################################################
# The "Update Permission" Processing Function resource API
######################################################
  '/tiers/update-permission':

#-----------------------------------------------------
# Update the permission of a certain tier
#-----------------------------------------------------
    post:
      x-scope: apim:tier_manage
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" -H \"Content-Type: application/json\" -X POST -d @data.json \"http://127.0.0.1:9763/api/am/publisher/v0.10/tiers/update-permission?tierName=Bronze&tierLevel=api\""
      x-wso2-request: "{\n    \"permissionType\":\"deny\",\n    \"roles\": [\"Internal/everyone\",\"admin\"]\n}"
      x-wso2-response: "HTTP/1.1 200 OK"
      summary: Update Tier Permission
      description: |
        Update tier permission
      parameters:
        - $ref: '#/parameters/tierName-Q'
        - $ref: '#/parameters/tierLevel-Q'
        - $ref: '#/parameters/If-Match'
        - $ref: '#/parameters/If-Unmodified-Since'
        - in: body
          name: permissions
          schema:
            $ref: '#/definitions/TierPermission'
      tags:
        - Tiers
      responses:
        200:
          description: |
            OK.
            Successfully updated tier permissions
          schema:
            type: array
            items:
              $ref: '#/definitions/Tier'
          headers:
            ETag:
              description: |
                Entity Tag of the modified tier.
                 Used by caches, or in conditional request.
              type: string
            Last-Modified:
              description: |
                Date and time the tier has been modified.
                Used by caches, or in conditional requests.
              type: string
        400:
          description: |
            Bad Request.
            Invalid request or validation error.
          schema:
            $ref: '#/definitions/Error'
        403:
          description: |
            Forbidden.
            The request must be conditional but no condition has been specified.
          schema:
            $ref: '#/definitions/Error'
        404:
          description: |
            Not Found.
            Requested tier does not exist.
          schema:
            $ref: '#/definitions/Error'
        412:
          description: |
            Precondition Failed.
            The request has not been performed because one of the preconditions is not met.
          schema:
            $ref: '#/definitions/Error'


######################################################
# The "Environment Collection" resource API
######################################################
  /environments:

#-----------------------------------------------------
# Retrieve the list of environments configured for a certain API
#-----------------------------------------------------
    get:
      x-scope: apim:api_view
      x-wso2-curl: "curl -H \"Authorization: Bearer b0982cd2aacd463ff5f63cd5ebe58f4a\" \"http://127.0.0.1:9763/api/am/publisher/v0.10/environments\""
      x-wso2-response: "HTTP/1.1 200 OK\nContent-Type: application/json\n\n{\n   \"list\": [   {\n      \"showInApiConsole\": true,\n      \"serverUrl\": \"https://192.168.56.1:9444//services/\",\n      \"endpoints\":       {\n         \"http\": \"http://192.168.56.1:8281\",\n         \"https\": \"https://192.168.56.1:8244\"\n      },\n      \"name\": \"Production and Sandbox\",\n      \"type\": \"hybrid\"\n   }],\n   \"count\": 1\n}"
      summary: Get gateway environments
      description: |
        Get a list of gateway environments configured previously.
      parameters:
        - in: query
          name: apiId
          description: |
            Will return environment list for the provided API.
          type: string
      tags:
        - Environments
      responses:
        200:
          description: |
            OK.
            Environment list is returned.
          schema:
            $ref: '#/definitions/EnvironmentList'
          headers:
            Content-Type:
              description: |
                The content type of the body.
              type: string
            ETag:
              description: |
                Entity Tag of the response resource.
                Used by caches, or in conditional requests.
              type: string
        304:
          description: |
            Not Modified.
            Empty body because the client has already the latest version of the requested resource.
        404:
          description: |
            Not Found.
            Requested API does not exist.
          schema:
            $ref: '#/definitions/Error'
######################################################
# Parameters - required by some of the APIs above
######################################################
parameters:

# API Identifier
# Specified as part of the path expression
  apiId:
    name: apiId
    in: path
    description: |
      **API ID** consisting of the **UUID** of the API.
      The combination of the provider of the API, name of the API and the version is also accepted as a valid API ID.
      Should be formatted as **provider-name-version**.
    required: true
    type: string

# API Identifier
# Specified as part of the query string
  apiId-Q:
    name: apiId
    in: query
    description: |
      **API ID** consisting of the **UUID** of the API.
      The combination of the provider of the API, name of the API and the version is also accepted as a valid API I.
      Should be formatted as **provider-name-version**.
    required: true
    type: string


# Document Identifier
# Specified as part of the path expression
  documentId:
    name: documentId
    in: path
    description: |
      **Document Identifier**
    required: true
    type: string

# Application Identifier
# Specified as part of the path expression
  applicationId:
    name: applicationId
    in: path
    description: |
      **Application Identifier** consisting of the UUID of the Application.
    required: true
    type: string

# Subscription Identifier
# Specified as part of the path expression
  subscriptionId:
    name: subscriptionId
    in: path
    description: |
      Subscription Id
    required: true
    type: string

# Subscription Identifier
# Specified as part of the query string
  subscriptionId-Q:
    name: subscriptionId
    in: query
    description: |
      Subscription Id
    required: true
    type: string

# Tier Name
# Specified as part of the path expression
  tierName:
    name: tierName
    in: path
    description: |
      Tier name
    required: true
    type: string

# Tier Name
# Specified as part of the query string
  tierName-Q:
    name: tierName
    in: query
    description: |
      Name of the tier
    required: true
    type: string

# Tier Type
# Specified as part of the path expression
  tierLevel:
    name: tierLevel
    in: path
    description: |
      List API or Application or Resource type tiers.
    type: string
    enum:
      - api
      - application
      - resource
    required: true

# Tier Type
# Specified as part of the query string
  tierLevel-Q:
    name: tierLevel
    in: query
    description: |
      List API or Application or Resource type tiers.
    type: string
    enum:
      - api
      - application
      - resource
    required: true

# Used for pagination:
# The maximum number of resoures to be returned by a GET
  limit:
    name: limit
    in: query
    description: |
      Maximum size of resource array to return.
    default: 25
    type: integer

# Used for pagination:
# The order number of an instance in a qualified set of resoures
# at which to start to return the next batch of qualified resources
  offset:
    name: offset
    in: query
    description: |
      Starting point within the complete list of items qualified.
    default: 0
    type: integer

# The HTTP Accept header
  Accept:
    name: Accept
    in: header
    description: |
      Media types acceptable for the response. Default is JSON.
    default: JSON
    type: string

# The HTTP Content-Type header
  Content-Type:
    name: Content-Type
    in: header
    description: |
      Media type of the entity in the body. Default is JSON.
    default: JSON
    required: true
    type : string

# The HTTP If-None-Match header
# Used to avoid retrieving data that are already cached
  If-None-Match:
    name: If-None-Match
    in: header
    description: |
      Validator for conditional requests; based on the ETag of the formerly retrieved
      variant of the resourec.
    type : string

# The HTTP If-Modified-Since header
# Used to avoid retrieving data that are already cached
  If-Modified-Since:
    name: If-Modified-Since
    in: header
    description: |
      Validator for conditional requests; based on Last Modified header of the
      formerly retrieved variant of the resource.
    type: string

# The HTTP If-Match header
# Used to avoid concurrent updates
  If-Match:
    name: If-Match
    in: header
    description: |
      Validator for conditional requests; based on ETag.
    type: string

# The HTTP If-Unmodified-Since header
# Used to avoid concurrent updates
  If-Unmodified-Since:
    name: If-Unmodified-Since
    in: header
    description: |
      Validator for conditional requests; based on Last Modified header.
    type: string

######################################################
# The resources used by some of the APIs above within the message body
######################################################
definitions:

#-----------------------------------------------------
# The API List resource
#-----------------------------------------------------
  APIList:
    title: API List
    properties:
      count:
        type: integer
        description: |
          Number of APIs returned.
        example: 1
      next:
        type: string
        description: |
          Link to the next subset of resources qualified.
          Empty if no more resources are to be returned.
        example: "/apis?limit=1&offset=2&query="
      previous:
        type: string
        description: |
          Link to the previous subset of resources qualified.
          Empty if current subset is the first subset returned.
        example: "/apis?limit=1&offset=0&query="
      list:
        type: array
        items:
          $ref: '#/definitions/APIInfo'

#-----------------------------------------------------
# The API Info resource
#-----------------------------------------------------
  APIInfo:
    title: API Info object with basic API details.
    properties:
      id:
        type: string
        example: 01234567-0123-0123-0123-012345678901
      name:
        type: string
        example: CalculatorAPI
      description:
        type: string
        example: A calculator API that supports basic operations
      context:
        type: string
        example: CalculatorAPI
      version:
        type: string
        example: 1.0.0
      provider:
        description: |
          If the provider value is not given, the user invoking the API will be used as the provider.
        type: string
        example: admin
      status:
        type: string
        example: CREATED

#-----------------------------------------------------
# The API resource
#-----------------------------------------------------
  API:
    title: API object
    required:
      - name
      - context
      - version
      - apiDefinition
      - tiers
      - isDefaultVersion
      - transport
      - endpointConfig
      - visibility
    properties:
      id:
        type: string
        description: |
          UUID of the api registry artifact
        example: 01234567-0123-0123-0123-012345678901
      name:
        type: string
        example: CalculatorAPI
      description:
        type: string
        example: A calculator API that supports basic operations
      context:
        type: string
        example: CalculatorAPI
      version:
        type: string
        example: 1.0.0
      provider:
        description: |
          If the provider value is not given user invoking the api will be used as the provider.
        type: string
        example: admin
      apiDefinition:
        description: |
          Swagger definition of the API which contains details about URI templates and scopes
        type: string
      wsdlUri:
        description: |
          WSDL URL if the API is based on a WSDL endpoint
        type: string
        example: "http://www.webservicex.com/globalweather.asmx?wsdl"
      status:
        type: string
        example: CREATED
      responseCaching:
        type: string
        example: Disabled
      cacheTimeout:
        type: integer
        example: 300
      destinationStatsEnabled:
        type: string
        example: Disabled
      isDefaultVersion:
        type: boolean
        example: false
      transport:
        description: |
          Supported transports for the API (http and/or https).
        type: array
        items:
          type: string
        example: ["http","https"]
      tags:
        type: array
        items:
          type: string
        example: ["substract","add"]
      tiers:
        type: array
        items:
          type: string
        example: ["Unlimited"]
      maxTps:
        properties:
          production:
            type: integer
            format: int64
            example: 1000
          sandbox:
            type: integer
            format: int64
            example: 1000
      thumbnailUri:
        type: string
        example: "/apis/01234567-0123-0123-0123-012345678901/thumbnail"
      visibility:
        type: string
        enum:
          - PUBLIC
          - PRIVATE
          - RESTRICTED
          - CONTROLLED
        example: PUBLIC
      visibleRoles:
        type: array
        items:
          type: string
        example: []
      visibleTenants:
        type: array
        items:
          type: string
        example: []
      endpointConfig:
        type: string
        example: "{\"production_endpoints\":{\"url\":\"http://localhost:9763/am/sample/calculator/v1/api\",\"config\":null},\"implementation_status\":\"managed\",\"endpoint_type\":\"http\"}"
      endpointSecurity:
        properties:
          type:
            type: string
            example: basic
            enum:
              - basic
              - digest
          username:
            type: string
            example: admin
          password:
            type: string
            example: password
      gatewayEnvironments:
        description: |
          Comma separated list of gateway environments.
        type: string
        example: Production and Sandbox
      sequences:
        type: array
        items:
          $ref: '#/definitions/Sequence'
        example: []
      subscriptionAvailability:
        type: string
        enum:
          - current_tenant
          - all_tenants
          - specific_tenants
        example: current_tenant
      subscriptionAvailableTenants:
        type: array
        items:
          type: string
        example: []
      businessInformation:
        properties:
          businessOwner:
            type: string
            example: businessowner
          businessOwnerEmail:
            type: string
            example: businessowner@wso2.com
          technicalOwner:
            type: string
            example: technicalowner
          technicalOwnerEmail:
            type: string
            example: technicalowner@wso2.com
      corsConfiguration:
        description: |
          CORS configuration for the API
        properties:
          corsConfigurationEnabled:
            type: boolean
            default: false
          accessControlAllowOrigins:
            type: array
            items:
               type: string
          accessControlAllowCredentials:
            type: boolean
            default: false
          accessControlAllowHeaders:
            type: array
            items:
              type: string
          accessControlAllowMethods:
            type: array
            items:
              type: string

#-----------------------------------------------------
# The Application resource
#-----------------------------------------------------
  Application:
    title: Application
    required:
      - name
      - throttlingTier
    properties:
      applicationId:
        type: string
        example: 01234567-0123-0123-0123-012345678901
      name:
        type: string
        example: CalculatorApp
      subscriber:
        type: string
        example: admin
      throttlingTier:
        type: string
        example: Unlimited
      description:
        type: string
        example: Sample calculator application
      groupId:
        type: string
        example: ""

#-----------------------------------------------------
# The Document List resource
#-----------------------------------------------------
  DocumentList:
    title: Document List
    properties:
      count:
        type: integer
        description: |
          Number of Documents returned.
        example: 1
      next:
        type: string
        description: |
          Link to the next subset of resources qualified.
          Empty if no more resources are to be returned.
        example: "/apis/01234567-0123-0123-0123-012345678901/documents?limit=1&offset=2"
      previous:
        type: string
        description: |
          Link to the previous subset of resources qualified.
          Empty if current subset is the first subset returned.
        example: "/apis/01234567-0123-0123-0123-012345678901/documents?limit=1&offset=0"
      list:
        type: array
        items:
          $ref: '#/definitions/Document'

#-----------------------------------------------------
# The Document resource
#-----------------------------------------------------
  Document:
    title: Document
    required:
      - name
      - type
      - sourceType
      - visibility
    properties:
      documentId:
        type: string
        example: 01234567-0123-0123-0123-012345678901
      name:
        type: string
        example: CalculatorDoc
      type:
        type: string
        enum:
          - HOWTO
          - SAMPLES
          - PUBLIC_FORUM
          - SUPPORT_FORUM
          - API_MESSAGE_FORMAT
          - SWAGGER_DOC
          - OTHER
        example: HOWTO
      summary:
        type: string
        example: "Summary of Calculator Documentation"
      sourceType:
        type: string
        enum:
          - INLINE
          - URL
          - FILE
        example: INLINE
      sourceUrl:
        type: string
        example: ""
      otherTypeName:
        type: string
        example: ""
      visibility:
        type: string
        enum:
          - OWNER_ONLY
          - PRIVATE
          - API_LEVEL
        example: API_LEVEL

#-----------------------------------------------------
# The Tier List resource
#-----------------------------------------------------
  TierList:
    title: Tier List
    properties:
      count:
        type: integer
        description: |
          Number of Tiers returned.
        example: 1
      next:
        type: string
        description: |
          Link to the next subset of resources qualified.
          Empty if no more resources are to be returned.
        example: "/tiers/api?limit=1&offset=2"
      previous:
        type: string
        description: |
          Link to the previous subset of resources qualified.
          Empty if current subset is the first subset returned.
        example: "/tiers/api?limit=1&offset=0"
      list:
        type: array
        items:
          $ref: '#/definitions/Tier'

#-----------------------------------------------------
# The Tier resource
#-----------------------------------------------------
  Tier:
    title: Tier
    required:
      - name
      - tierPlan
      - requestCount
      - unitTime
      - stopOnQuotaReach
    properties:
      name:
        type: string
        example: Platinum
      description:
        type: string
        example: "Allows 50 request(s) per minute."
      tierLevel:
        type: string
        enum:
          - api
          - application
          - resource
        example: api
      attributes:
        description: |
          Custom attributes added to the tier policy
        type: object
        additionalProperties:
          type: string
        example: {}
      requestCount:
        description: |
          Maximum number of requests which can be sent within a provided unit time
        type: integer
        format: int64
        example: 50
      unitTime:
        type: integer
        format: int64
        example: 60000
      timeUnit:
        type: string
        example: "min"
      tierPlan:
        description: |
          This attribute declares whether this tier is available under commercial or free
        type: string
        enum:
          - FREE
          - COMMERCIAL
        example: FREE
      stopOnQuotaReach:
        description: |
          By making this attribute to false, you are capabale of sending requests
          even if the request count exceeded within a unit time
        type: boolean
        example: true

#-----------------------------------------------------
# The Tier Permission resource
#-----------------------------------------------------
  TierPermission:
    title: tierPermission
    required:
      - permissionType
      - roles
    properties:
      permissionType:
        type: string
        enum:
          - allow
          - deny
        example: deny
      roles:
        type: array
        items:
          type: string
        example: ["Internal/everyone"]

#-----------------------------------------------------
# The Subscription List resource
#-----------------------------------------------------
  SubscriptionList:
    title: Subscription List
    properties:
      count:
        type: integer
        description: |
          Number of Subscriptions returned.
        example: 1
      next:
        type: string
        description: |
          Link to the next subset of resources qualified.
          Empty if no more resources are to be returned.
        example: "/subscriptions?limit=1&offset=2&apiId=01234567-0123-0123-0123-012345678901&groupId="
      previous:
        type: string
        description: |
          Link to the previous subset of resources qualified.
          Empty if current subset is the first subset returned.
        example: "/subscriptions?limit=1&offset=0&apiId=01234567-0123-0123-0123-012345678901&groupId="
      list:
        type: array
        items:
          $ref: '#/definitions/Subscription'

#-----------------------------------------------------
# The Subscription resource
#-----------------------------------------------------
  Subscription:
    title: Subscription
    required:
      - applicationId
      - apiIdentifier
      - tier
    properties:
      subscriptionId:
        type: string
        example: 01234567-0123-0123-0123-012345678901
      applicationId:
        type: string
        example: 01234567-0123-0123-0123-012345678901
      apiIdentifier:
        type: string
        example: 01234567-0123-0123-0123-012345678901
      tier:
        type: string
        example: Unlimited
      status:
        type: string
        enum:
          - BLOCKED
          - PROD_ONLY_BLOCKED
          - UNBLOCKED
          - ON_HOLD
          - REJECTED
        example: UNBLOCKED

#-----------------------------------------------------
# The Sequence resource
#-----------------------------------------------------
  Sequence:
    title: Sequence
    required:
      - name
    properties:
      name:
        type: string
        example: log_in_message
      config:
        type: string
        example: ""
      type:
        type: string
        example: in

#-----------------------------------------------------
# The Error resource
#-----------------------------------------------------
  Error:
    title: Error object returned with 4XX HTTP status
    required:
      - code
      - message
    properties:
      code:
        type: integer
        format: int64
      message:
        type: string
        description: Error message.
      description:
        type: string
        description: |
          A detail description about the error message.
      moreInfo:
        type: string
        description: |
          Preferably an url with more details about the error.
      error:
        type: array
        description: |
          If there are more than one error list them out.
          For example, list out validation errors by each field.
        items:
          $ref: '#/definitions/ErrorListItem'

#-----------------------------------------------------
# The Error List Item resource
#-----------------------------------------------------
  ErrorListItem:
    title: Description of individual errors that may have occurred during a request.
    required:
      - code
      - message
    properties:
      code:
        type: string
      message:
        type: string
        description: |
          Description about individual errors occurred

#-----------------------------------------------------
# The Environment resource
#-----------------------------------------------------
  Environment:
    title: Environment
    required:
      - name
      - type
      - serverUrl
      - endpoints
      - showInApiConsole
    properties:
      name:
        type: string
        example: Production and Sandbox
      type:
        type: string
        example: hybrid
      serverUrl:
        type: string
        example: "https://localhost:9443//services/"
      showInApiConsole:
        type: boolean
        example: true
      endpoints:
        $ref: '#/definitions/EnvironmentEndpoints'

#-----------------------------------------------------
# The Environment List resource
#-----------------------------------------------------
  EnvironmentList:
    title: Environment List
    properties:
      count:
        type: integer
        description: |
          Number of Environments returned.
        example: 1
      list:
        type: array
        items:
          $ref: '#/definitions/Environment'


#-----------------------------------------------------
# The Environment Endpoint resource
#-----------------------------------------------------
  EnvironmentEndpoints :
    title: Environment Endpoints
    properties:
      http:
        type: string
        description: HTTP environment URL
        example: "http://localhost:8280"
      https:
        type: string
        description: HTTPS environment URL
        example: "https://localhost:8244"

#-----------------------------------------------------
# The File Information resource
#-----------------------------------------------------
  FileInfo :
    title: File Information including meta data
    properties:
      relativePath:
        type: string
        description: relative location of the file (excluding the base context and host of the Publisher API)
        example: "apis/01234567-0123-0123-0123-012345678901/thumbnail"
      mediaType:
        type: string
        description: media-type of the file
        example: "image/jpeg"