// ***************************************************************************************************************************
// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
// * with the License.  You may obtain a copy of the License at                                                              *
// *                                                                                                                         *
// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
// *                                                                                                                         *
// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
// * specific language governing permissions and limitations under the License.                                              *
// ***************************************************************************************************************************

{
	"swagger": "2.0",
	"info": {
		"description": "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.",
		"version": "1.0.0",
		"title": "Swagger Petstore",
		"termsOfService": "http://swagger.io/terms/",
		"contact": {
			"email": "apiteam@swagger.io"
		},
		"license": {
			"name": "Apache 2.0",
			"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
		}
	},
	"host": "petstore.swagger.io",
	"basePath": "/v2",
	"tags": [
		{
			"name": "pet",
			"description": "Everything about your Pets",
			"externalDocs": {
				"description": "Find out more",
				"url": "http://swagger.io"
			}
		},
		{
			"name": "store",
			"description": "Access to Petstore orders"
		},
		{
			"name": "user",
			"description": "Operations about user",
			"externalDocs": {
				"description": "Find out more about our store",
				"url": "http://swagger.io"
			}
		}
	],
	"schemes": [
		"http"
	],
	"paths": {
		"/pet": {
			"post": {
				"tags": [
					"pet"
				],
				"summary": "Add a new pet to the store",
				"description": "",
				"operationId": "addPet",
				"consumes": [
					"application/json",
					"application/xml"
				],
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"in": "body",
						"name": "body",
						"description": "Pet object that needs to be added to the store",
						"required": true,
						"schema": {
							"$ref": "#/definitions/Pet"
						}
					}
				],
				"responses": {
					"405": {
						"description": "Invalid input"
					}
				},
				"security": [
					{
						"petstore_auth": [
							"write:pets",
							"read:pets"
						]
					}
				]
			},
			"put": {
				"tags": [
					"pet"
				],
				"summary": "Update an existing pet",
				"description": "",
				"operationId": "updatePet",
				"consumes": [
					"application/json",
					"application/xml"
				],
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"in": "body",
						"name": "body",
						"description": "Pet object that needs to be added to the store",
						"required": true,
						"schema": {
							"$ref": "#/definitions/Pet"
						}
					}
				],
				"responses": {
					"400": {
						"description": "Invalid ID supplied"
					},
					"404": {
						"description": "Pet not found"
					},
					"405": {
						"description": "Validation exception"
					}
				},
				"security": [
					{
						"petstore_auth": [
							"write:pets",
							"read:pets"
						]
					}
				]
			}
		},
		"/pet/findByStatus": {
			"get": {
				"summary": "Finds Pets by status",
				"description": "Multiple status values can be provided with comma separated strings",
				"operationId": "findPetsByStatus",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "status",
						"in": "query",
						"description": "Status values that need to be considered for filter",
						"required": true,
						"type": "array",
						"items": {
							"type": "string",
							"enum": [
								"available",
								"pending",
								"sold"
							],
							"default": "available"
						},
						"collectionFormat": "multi"
					}
				],
				"responses": {
					"200": {
						"description": "successful operation",
						"schema": {
							"type": "array",
							"items": {
								"$ref": "#/definitions/Pet"
							}
						}
					},
					"400": {
						"description": "Invalid status value"
					}
				},
				"security": [
					{
						"petstore_auth": [
							"write:pets",
							"read:pets"
						]
					}
				]
			}
		},
		"/pet/findByTags": {
			"get": {
				"tags": [
					"pet"
				],
				"summary": "Finds Pets by tags",
				"description": "Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.",
				"operationId": "findPetsByTags",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "tags",
						"in": "query",
						"description": "Tags to filter by",
						"required": true,
						"type": "array",
						"items": {
							"type": "string"
						},
						"collectionFormat": "multi"
					}
				],
				"responses": {
					"200": {
						"description": "successful operation",
						"schema": {
							"type": "array",
							"items": {
								"$ref": "#/definitions/Pet"
							}
						}
					},
					"400": {
						"description": "Invalid tag value"
					}
				},
				"security": [
					{
						"petstore_auth": [
							"write:pets",
							"read:pets"
						]
					}
				],
				"deprecated": true
			}
		},
		"/pet/{petId}": {
			"get": {
				"tags": [
					"pet"
				],
				"summary": "Find pet by ID",
				"description": "Returns a single pet",
				"operationId": "getPetById",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "petId",
						"in": "path",
						"description": "ID of pet to return",
						"required": true,
						"type": "integer",
						"format": "int64"
					}
				],
				"responses": {
					"200": {
						"description": "successful operation",
						"schema": {
							"$ref": "#/definitions/Pet"
						}
					},
					"400": {
						"description": "Invalid ID supplied"
					},
					"404": {
						"description": "Pet not found"
					}
				},
				"security": [
					{
						"api_key": []
					}
				]
			},
			"post": {
				"tags": [
					"pet"
				],
				"summary": "Updates a pet in the store with form data",
				"description": "",
				"operationId": "updatePetWithForm",
				"consumes": [
					"application/x-www-form-urlencoded"
				],
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "petId",
						"in": "path",
						"description": "ID of pet that needs to be updated",
						"required": true,
						"type": "integer",
						"format": "int64"
					},
					{
						"name": "name",
						"in": "formData",
						"description": "Updated name of the pet",
						"required": false,
						"type": "string"
					},
					{
						"name": "status",
						"in": "formData",
						"description": "Updated status of the pet",
						"required": false,
						"type": "string"
					}
				],
				"responses": {
					"405": {
						"description": "Invalid input"
					}
				},
				"security": [
					{
						"petstore_auth": [
							"write:pets",
							"read:pets"
						]
					}
				]
			},
			"delete": {
				"tags": [
					"pet"
				],
				"summary": "Deletes a pet",
				"description": "",
				"operationId": "deletePet",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "api_key",
						"in": "header",
						"required": false,
						"type": "string"
					},
					{
						"name": "petId",
						"in": "path",
						"description": "Pet id to delete",
						"required": true,
						"type": "integer",
						"format": "int64"
					}
				],
				"responses": {
					"400": {
						"description": "Invalid ID supplied"
					},
					"404": {
						"description": "Pet not found"
					}
				},
				"security": [
					{
						"petstore_auth": [
							"write:pets",
							"read:pets"
						]
					}
				]
			}
		},
		"/pet/{petId}/uploadImage": {
			"post": {
				"tags": [
					"pet"
				],
				"summary": "uploads an image",
				"description": "",
				"operationId": "uploadFile",
				"consumes": [
					"multipart/form-data"
				],
				"produces": [
					"application/json"
				],
				"parameters": [
					{
						"name": "petId",
						"in": "path",
						"description": "ID of pet to update",
						"required": true,
						"type": "integer",
						"format": "int64"
					},
					{
						"name": "additionalMetadata",
						"in": "formData",
						"description": "Additional data to pass to server",
						"required": false,
						"type": "string"
					},
					{
						"name": "file",
						"in": "formData",
						"description": "file to upload",
						"required": false,
						"type": "file"
					}
				],
				"responses": {
					"200": {
						"description": "successful operation",
						"schema": {
							"$ref": "#/definitions/ApiResponse"
						}
					}
				},
				"security": [
					{
						"petstore_auth": [
							"write:pets",
							"read:pets"
						]
					}
				]
			}
		},
		"/store/inventory": {
			"get": {
				"tags": [
					"store"
				],
				"summary": "Returns pet inventories by status",
				"description": "Returns a map of status codes to quantities",
				"operationId": "getInventory",
				"produces": [
					"application/json"
				],
				"parameters": [],
				"responses": {
					"200": {
						"description": "successful operation",
						"schema": {
							"type": "object",
							"additionalProperties": {
								"type": "integer",
								"format": "int32"
							}
						}
					}
				},
				"security": [
					{
						"api_key": []
					}
				]
			}
		},
		"/store/order": {
			"post": {
				"tags": [
					"store"
				],
				"summary": "Place an order for a pet",
				"description": "",
				"operationId": "placeOrder",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"in": "body",
						"name": "body",
						"description": "order placed for purchasing the pet",
						"required": true,
						"schema": {
							"$ref": "#/definitions/Order"
						}
					}
				],
				"responses": {
					"200": {
						"description": "successful operation",
						"schema": {
							"$ref": "#/definitions/Order"
						}
					},
					"400": {
						"description": "Invalid Order"
					}
				}
			}
		},
		"/store/order/{orderId}": {
			"get": {
				"tags": [
					"store"
				],
				"summary": "Find purchase order by ID",
				"description": "For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions",
				"operationId": "getOrderById",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "orderId",
						"in": "path",
						"description": "ID of pet that needs to be fetched",
						"required": true,
						"type": "integer",
						"maximum": 10.0,
						"minimum": 1.0,
						"format": "int64"
					}
				],
				"responses": {
					"200": {
						"description": "successful operation",
						"schema": {
							"$ref": "#/definitions/Order"
						}
					},
					"400": {
						"description": "Invalid ID supplied"
					},
					"404": {
						"description": "Order not found"
					}
				}
			},
			"delete": {
				"tags": [
					"store"
				],
				"summary": "Delete purchase order by ID",
				"description": "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors",
				"operationId": "deleteOrder",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "orderId",
						"in": "path",
						"description": "ID of the order that needs to be deleted",
						"required": true,
						"type": "integer",
						"minimum": 1.0,
						"format": "int64"
					}
				],
				"responses": {
					"400": {
						"description": "Invalid ID supplied"
					},
					"404": {
						"description": "Order not found"
					}
				}
			}
		},
		"/user": {
			"post": {
				"tags": [
					"user"
				],
				"summary": "Create user",
				"description": "This can only be done by the logged in user.",
				"operationId": "createUser",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"in": "body",
						"name": "body",
						"description": "Created user object",
						"required": true,
						"schema": {
							"$ref": "#/definitions/User"
						}
					}
				],
				"responses": {
					"default": {
						"description": "successful operation"
					}
				}
			}
		},
		"/user/createWithArray": {
			"post": {
				"tags": [
					"user"
				],
				"summary": "Creates list of users with given input array",
				"description": "",
				"operationId": "createUsersWithArrayInput",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"in": "body",
						"name": "body",
						"description": "List of user object",
						"required": true,
						"schema": {
							"type": "array",
							"items": {
								"$ref": "#/definitions/User"
							}
						}
					}
				],
				"responses": {
					"default": {
						"description": "successful operation"
					}
				}
			}
		},
		"/user/createWithList": {
			"post": {
				"tags": [
					"user"
				],
				"summary": "Creates list of users with given input array",
				"description": "",
				"operationId": "createUsersWithListInput",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"in": "body",
						"name": "body",
						"description": "List of user object",
						"required": true,
						"schema": {
							"type": "array",
							"items": {
								"$ref": "#/definitions/User"
							}
						}
					}
				],
				"responses": {
					"default": {
						"description": "successful operation"
					}
				}
			}
		},
		"/user/login": {
			"get": {
				"tags": [
					"user"
				],
				"summary": "Logs user into the system",
				"description": "",
				"operationId": "loginUser",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "username",
						"in": "query",
						"description": "The user name for login",
						"required": true,
						"type": "string"
					},
					{
						"name": "password",
						"in": "query",
						"description": "The password for login in clear text",
						"required": true,
						"type": "string"
					}
				],
				"responses": {
					"200": {
						"description": "successful operation",
						"schema": {
							"type": "string"
						},
						"headers": {
							"X-Rate-Limit": {
								"type": "integer",
								"format": "int32",
								"description": "calls per hour allowed by the user"
							},
							"X-Expires-After": {
								"type": "string",
								"format": "date-time",
								"description": "date in UTC when token expires"
							}
						}
					},
					"400": {
						"description": "Invalid username/password supplied"
					}
				}
			}
		},
		"/user/logout": {
			"get": {
				"tags": [
					"user"
				],
				"summary": "Logs out current logged in user session",
				"description": "",
				"operationId": "logoutUser",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [],
				"responses": {
					"default": {
						"description": "successful operation"
					}
				}
			}
		},
		"/user/{username}": {
			"get": {
				"tags": [
					"user"
				],
				"summary": "Get user by user name",
				"description": "",
				"operationId": "getUserByName",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "username",
						"in": "path",
						"description": "The name that needs to be fetched. Use user1 for testing. ",
						"required": true,
						"type": "string"
					}
				],
				"responses": {
					"200": {
						"description": "successful operation",
						"schema": {
							"$ref": "#/definitions/User"
						}
					},
					"400": {
						"description": "Invalid username supplied"
					},
					"404": {
						"description": "User not found"
					}
				}
			},
			"put": {
				"tags": [
					"user"
				],
				"summary": "Updated user",
				"description": "This can only be done by the logged in user.",
				"operationId": "updateUser",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "username",
						"in": "path",
						"description": "name that need to be updated",
						"required": true,
						"type": "string"
					},
					{
						"in": "body",
						"name": "body",
						"description": "Updated user object",
						"required": true,
						"schema": {
							"$ref": "#/definitions/User"
						}
					}
				],
				"responses": {
					"400": {
						"description": "Invalid user supplied"
					},
					"404": {
						"description": "User not found"
					}
				}
			},
			"delete": {
				"tags": [
					"user"
				],
				"summary": "Delete user",
				"description": "This can only be done by the logged in user.",
				"operationId": "deleteUser",
				"produces": [
					"application/xml",
					"application/json"
				],
				"parameters": [
					{
						"name": "username",
						"in": "path",
						"description": "The name that needs to be deleted",
						"required": true,
						"type": "string"
					}
				],
				"responses": {
					"400": {
						"description": "Invalid username supplied"
					},
					"404": {
						"description": "User not found"
					}
				}
			}
		}
	},
	"securityDefinitions": {
		"petstore_auth": {
			"type": "oauth2",
			"authorizationUrl": "http://petstore.swagger.io/oauth/dialog",
			"flow": "implicit",
			"scopes": {
				"write:pets": "modify pets in your account",
				"read:pets": "read your pets"
			}
		},
		"api_key": {
			"type": "apiKey",
			"name": "api_key",
			"in": "header"
		}
	},
	"definitions": {
		"Order": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"format": "int64"
				},
				"petId": {
					"type": "integer",
					"format": "int64"
				},
				"quantity": {
					"type": "integer",
					"format": "int32"
				},
				"shipDate": {
					"type": "string",
					"format": "date-time"
				},
				"status": {
					"type": "string",
					"description": "Order Status",
					"enum": [
						"placed",
						"approved",
						"delivered"
					]
				},
				"complete": {
					"type": "boolean",
					"default": false
				}
			},
			"xml": {
				"name": "Order"
			},
			"x-examples": {
				"application/json": "{\n\tfoo: 'bar',\n\tbaz: 123\n}",
				"text/xml": "<foo>bar</foo>",
				"text/html": "<table>foo</table>",
				"octal-messagepack": "12 34 56 AB CD EF"
			}
		},
		"User": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"format": "int64"
				},
				"username": {
					"type": "string"
				},
				"firstName": {
					"type": "string"
				},
				"lastName": {
					"type": "string"
				},
				"email": {
					"type": "string"
				},
				"password": {
					"type": "string"
				},
				"phone": {
					"type": "string"
				},
				"userStatus": {
					"type": "integer",
					"format": "int32",
					"description": "User Status"
				}
			},
			"xml": {
				"name": "User"
			},
			"x-examples": {
				"application/json": "{\n\tfoo: 'bar',\n\tbaz: 123\n}",
				"text/xml": "<foo>bar</foo>",
				"text/html": "<table>foo</table>",
				"octal-messagepack": "12 34 56 AB CD EF"
			}
		},
		"Category": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"format": "int64"
				},
				"name": {
					"type": "string"
				}
			},
			"xml": {
				"name": "Category"
			},
			"x-examples": {
				"application/json": "{\n\tfoo: 'bar',\n\tbaz: 123,\n\tflags:[\n\t\t'f1',\n\t\t'f1',\n\t\t'f3'\n\t]\n}",
				"text/xml": "<foo>bar</foo>",
				"text/html": "<table>foo</table>",
				"octal-messagepack": "12 34 56 AB CD EF"
			}
		},
		"Tag": {
			"type": "object",
			"properties": {
				"id": {
					"type": "integer",
					"format": "int64"
				},
				"name": {
					"type": "string"
				}
			},
			"xml": {
				"name": "Tag"
			},
			"x-examples": {
				"application/json": "{\n\tfoo: 'bar',\n\tbaz: 123\n}",
				"text/xml": "<foo>bar</foo>",
				"text/html": "<table>foo</table>",
				"octal-messagepack": "12 34 56 AB CD EF"
			}
		},
		"Pet": {
			"type": "object",
			"required": [
				"name",
				"photoUrls"
			],
			"properties": {
				"id": {
					"type": "integer",
					"format": "int64"
				},
				"category": {
					"$ref": "#/definitions/Category"
				},
				"name": {
					"type": "string",
					"example": "doggie"
				},
				"photoUrls": {
					"type": "array",
					"xml": {
						"name": "photoUrl",
						"wrapped": true
					},
					"items": {
						"type": "string"
					}
				},
				"tags": {
					"type": "array",
					"xml": {
						"name": "tag",
						"wrapped": true
					},
					"items": {
						"$ref": "#/definitions/Tag"
					}
				},
				"status": {
					"type": "string",
					"description": "pet status in the store",
					"enum": [
						"available",
						"pending",
						"sold"
					]
				}
			},
			"xml": {
				"name": "Pet"
			},
			"x-examples": {
				"application/json": "{\n\tfoo: 'bar',\n\tbaz: 123,\n\tflags:[\n\t\t'f1',\n\t\t'f1',\n\t\t'f3'\n\t]\n}",
				"text/xml": "<foo>bar</foo>",
				"text/html": "<table>foo</table>",
				"octal-messagepack": "12 34 56 AB CD EF"
			},
		},
		"ApiResponse": {
			"type": "object",
			"properties": {
				"code": {
					"type": "integer",
					"format": "int32"
				},
				"type": {
					"type": "string"
				},
				"message": {
					"type": "string"
				}
			},
			"x-examples": {
				"application/json": "{\n\tfoo: 'bar',\n\tbaz: 123\n}",
				"text/xml": "<foo>bar</foo>",
				"text/html": "<table>foo</table>",
				"octal-messagepack": "12 34 56 AB CD EF"
			}
		}
	},
	"externalDocs": {
		"description": "Find out more about Swagger",
		"url": "http://swagger.io"
	}
}