{
  "openapi": "3.0.4",
  "info": {
    "title": "CoffeeShop V1",
    "version": "v1"
  },
  "paths": {
    "/api/ClientCertificate": {
      "get": {
        "tags": [
          "ClientCertificate"
        ],
        "operationId": "GETCertificate",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Coffees/{id}": {
      "delete": {
        "tags": [
          "Coffees"
        ],
        "summary": "Delete a coffee",
        "description": "Deletes the coffee with the given id. If no coffee with the given id exists, nothing is deleted.",
        "operationId": "DELETECoffeeById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Coffees"
        ],
        "summary": "Get coffee by id",
        "description": "Returns the coffee which has the given id. Returns 'null' if no coffee with the given id exists.",
        "operationId": "GETCoffeeById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Coffees": {
      "get": {
        "tags": [
          "Coffees"
        ],
        "summary": "Get all coffees",
        "description": "Returns all coffees.",
        "operationId": "GETCoffees",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Coffees"
        ],
        "summary": "Add a new coffee",
        "description": "Adds a new coffee at the end of the list.",
        "operationId": "POSTCoffee",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "application/*+xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Coffees"
        ],
        "summary": "Update an existing coffee",
        "description": "Updates the name and description of an existing coffee (identified by its id). If no coffee with the given id exists, nothing is updated.",
        "operationId": "PUTCoffee",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            },
            "application/*+xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Coffee"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/EchoService.svc": {
      "post": {
        "tags": [
          "EchoService"
        ],
        "summary": "Echo request body",
        "description": "Returns the request body unchanged, preserving the Content-Type.",
        "operationId": "POSTEcho",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/EchoService.svc/headers": {
      "get": {
        "tags": [
          "EchoService"
        ],
        "summary": "Echo request headers as XML",
        "description": "Returns all request headers serialized as an XML payload.",
        "operationId": "GETEchoHeaders",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "EchoService"
        ],
        "summary": "Echo request headers as XML",
        "description": "Returns all request headers serialized as an XML payload.",
        "operationId": "GETEchoHeaders",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Employee": {
      "get": {
        "tags": [
          "Employee"
        ],
        "summary": "Get all employees",
        "description": "Returns all employees.",
        "operationId": "GETEmployees",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Employee"
        ],
        "summary": "Update an existing employee",
        "description": "Updates the first and last name and address of an existing employee (identified by its id). If no employee with the given id exists, nothing is updated.",
        "operationId": "PUTEmployee",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Employee"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Employee"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Employee"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Employee"
              }
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Employee"
              }
            },
            "application/*+xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Employee"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Employee/{id}": {
      "get": {
        "tags": [
          "Employee"
        ],
        "summary": "Get employee by id",
        "description": "Returns the employee which has the given id. Returns 'null' if no employee with the given id exists.",
        "operationId": "GETEmployeeById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Files/{id}": {
      "delete": {
        "tags": [
          "Files"
        ],
        "summary": "Delete a file",
        "description": "Deletes the file with the given id. If no file with the given id exists, nothing is deleted.",
        "operationId": "DELETEFileById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Files"
        ],
        "summary": "Get file by id",
        "description": "Returns the file which has the given id. Returns 'null' if no file with the given id exists.",
        "operationId": "GETFileById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Files": {
      "get": {
        "tags": [
          "Files"
        ],
        "summary": "Get all files",
        "description": "Returns all files as a multipart response.",
        "operationId": "GETFiles",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Files"
        ],
        "summary": "Add a new file",
        "description": "Reads the uploaded parts and reports their content type, disposition and size.",
        "operationId": "POSTFile",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Files"
        ],
        "summary": "Update an existing file",
        "description": "Updates the content and content type of an existing file (identified by its id). If no file with the given id exists, nothing is updated.",
        "operationId": "PUTFile",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.File"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.File"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.File"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.File"
              }
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.File"
              }
            },
            "application/*+xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.File"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Profiles/{id}": {
      "delete": {
        "tags": [
          "Profiles"
        ],
        "summary": "Delete a profile",
        "description": "Deletes the profile with the given id. If no profile with the given id exists, nothing is deleted.",
        "operationId": "DELETEProfileById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Profiles"
        ],
        "summary": "Get profile by id",
        "description": "Returns the profile which has the given id. Returns 'null' if no profile with the given id exists.",
        "operationId": "GETProfileById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Profiles": {
      "get": {
        "tags": [
          "Profiles"
        ],
        "summary": "Get all profiles",
        "description": "Returns all profiles.",
        "operationId": "GETProfiles",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Profiles"
        ],
        "summary": "Add a new profile",
        "description": "Adds a new profile at the end of the list.",
        "operationId": "POSTProfile",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "application/*+xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Profiles"
        ],
        "summary": "Update an existing profile",
        "description": "Updates the name of an existing profile (identified by its id). If no profile with the given id exists, nothing is updated.",
        "operationId": "PUTProfile",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            },
            "application/*+xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Profiles/{id}/Photos": {
      "get": {
        "tags": [
          "Profiles"
        ],
        "summary": "Get all photos from a profile",
        "description": "Returns all photos from a profile which has the given id. Returns 'null' if no profile with the given id exists.",
        "operationId": "GETPhotosByProfileId",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/Protocol/http2": {
      "get": {
        "tags": [
          "Protocol"
        ],
        "summary": "Get HTTP/2 connection info",
        "description": "Returns the current HTTP protocol version. Requires an HTTP/2 connection; HTTP/1.x clients receive 426 Upgrade Required.",
        "operationId": "GETHttp2Info",
        "responses": {
          "200": {
            "description": "HTTP/2 connection confirmed"
          },
          "426": {
            "description": "HTTP/2 is required but the client is using an older protocol version"
          }
        }
      }
    },
    "/api/Shops/{id}": {
      "delete": {
        "tags": [
          "Shops"
        ],
        "summary": "Delete a shop",
        "description": "Deletes the shop with the given id. If no shop with the given id exists, nothing is deleted.",
        "operationId": "DELETEShopById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Shops"
        ],
        "summary": "Get shop by id",
        "description": "Returns the shop which has the given id. Returns 'null' if no shop with the given id exists.",
        "operationId": "GETShopById",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Shops": {
      "get": {
        "tags": [
          "Shops"
        ],
        "summary": "Get all shops",
        "description": "Returns all shops.",
        "operationId": "GETShops",
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "post": {
        "tags": [
          "Shops"
        ],
        "summary": "Add a new shop",
        "description": "Adds a new shop at the end of the list.",
        "operationId": "POSTShop",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "application/*+xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "put": {
        "tags": [
          "Shops"
        ],
        "summary": "Update an existing shop",
        "description": "Updates the name, city and country of an existing shop (identified by its id). If no shop with the given id exists, nothing is updated.",
        "operationId": "PUTShop",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "text/xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            },
            "application/*+xml": {
              "schema": {
                "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Shop"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/Shops/{id}/Coffees": {
      "get": {
        "tags": [
          "Shops"
        ],
        "summary": "Get all coffees in a shop",
        "description": "Returns a random number of the first coffees for the shop with the given id. Returns 'null' if no shop with the given id exists.",
        "operationId": "GETCoffeesByShopId",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Tricentis.Demo.Rest.Models.Address": {
        "type": "object",
        "properties": {
          "city": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "country": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "street": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "zipCode": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Tricentis.Demo.Rest.Models.Coffee": {
        "type": "object",
        "properties": {
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Tricentis.Demo.Rest.Models.Comment": {
        "type": "object",
        "properties": {
          "content": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "profile": {
            "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Profile"
          }
        },
        "additionalProperties": false
      },
      "Tricentis.Demo.Rest.Models.Employee": {
        "type": "object",
        "properties": {
          "address": {
            "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Address"
          },
          "firstName": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "lastName": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Tricentis.Demo.Rest.Models.File": {
        "type": "object",
        "properties": {
          "content": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "contentType": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Tricentis.Demo.Rest.Models.Photo": {
        "type": "object",
        "properties": {
          "comments": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Comment"
            },
            "nullable": true
          },
          "content": {
            "maxLength": 65536,
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "contentType": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Tricentis.Demo.Rest.Models.Profile": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "photos": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tricentis.Demo.Rest.Models.Photo"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Tricentis.Demo.Rest.Models.Shop": {
        "type": "object",
        "properties": {
          "city": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "country": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    }
  },
  "tags": [
    {
      "name": "ClientCertificate"
    },
    {
      "name": "Coffees"
    },
    {
      "name": "EchoService"
    },
    {
      "name": "Employee"
    },
    {
      "name": "Files"
    },
    {
      "name": "Profiles"
    },
    {
      "name": "Protocol"
    },
    {
      "name": "Shops"
    }
  ]
}