{
	"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" : {
				"tags" : ["pet"],
				"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",
						"format": "password"
					}
				],
				"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"
			}
		},
		"Category" : {
			"type" : "object",
			"properties" : {
				"id" : {
					"type" : "integer",
					"format" : "int64"
				},
				"name" : {
					"type" : "string"
				}
			},
			"xml" : {
				"name" : "Category"
			}
		},
		"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"
			}
		},
		"Tag" : {
			"type" : "object",
			"properties" : {
				"id" : {
					"type" : "integer",
					"format" : "int64"
				},
				"name" : {
					"type" : "string"
				}
			},
			"xml" : {
				"name" : "Tag"
			}
		},
		"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"
			}
		},
		"ApiResponse" : {
			"type" : "object",
			"properties" : {
				"code" : {
					"type" : "integer",
					"format" : "int32"
				},
				"type" : {
					"type" : "string"
				},
				"message" : {
					"type" : "string"
				}
			}
		}
	},
	"externalDocs" : {
		"description" : "Find out more about Swagger",
		"url" : "http://swagger.io"
	}
}
