{
  "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":{
          "200":{
            "description":"Pet created"
          },
          "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":{
          "200":{
            "description": "Pet deleted"
          },
          "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"
      }
    },
    "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"
      }
    },
    "ApiResponse":{
      "type":"object",
      "properties":{
        "code":{
          "type":"integer",
          "format":"int32"
        },
        "type":{
          "type":"string"
        },
        "message":{
          "type":"string"
        }
      }
    },
    "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"
      }
    }
  },
  "externalDocs":{
    "description":"Find out more about Swagger",
    "url":"http://swagger.io"
  }
}
