{
  "swagger" : "2.0",
  "info" : {
    "description" : "This is a sample server Petstore server.  You can find out more about Swagger at <a href=\"http://swagger.io\">http://swagger.io</a> or on irc.freenode.net, #swagger.  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",
  "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/json", "application/xml" ],
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "description" : "Pet object that needs to be added to the store",
          "required" : false,
          "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/json", "application/xml" ],
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "description" : "Pet object that needs to be added to the store",
          "required" : false,
          "schema" : {
            "$ref" : "#/definitions/Pet"
          }
        } ],
        "responses" : {
          "405" : {
            "description" : "Validation exception"
          },
          "404" : {
            "description" : "Pet not found"
          },
          "400" : {
            "description" : "Invalid ID supplied"
          }
        },
        "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 seperated strings",
        "operationId" : "findPetsByStatus",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "status",
          "in" : "query",
          "description" : "Status values that need to be considered for filter",
          "required" : false,
          "type" : "array",
          "items" : {
            "type" : "string"
          },
          "collectionFormat" : "multi",
          "default" : "available"
        } ],
        "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 seperated strings. Use tag1, tag2, tag3 for testing.",
        "operationId" : "findPetsByTags",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "tags",
          "in" : "query",
          "description" : "Tags to filter by",
          "required" : false,
          "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" ]
        } ]
      }
    },
    "/pet/{petId}" : {
      "get" : {
        "tags" : [ "pet" ],
        "summary" : "Find pet by ID",
        "description" : "Returns a pet when ID < 10.  ID > 10 or nonintegers will simulate API error conditions",
        "operationId" : "getPetById",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "petId",
          "in" : "path",
          "description" : "ID of pet that needs to be fetched",
          "required" : true,
          "type" : "integer",
          "format" : "int64"
        } ],
        "responses" : {
          "404" : {
            "description" : "Pet not found"
          },
          "200" : {
            "description" : "successful operation",
            "schema" : {
              "$ref" : "#/definitions/Pet"
            }
          },
          "400" : {
            "description" : "Invalid ID supplied"
          }
        },
        "security" : [ {
          "api_key" : [ ]
        }, {
          "petstore_auth" : [ "write:pets", "read:pets" ]
        } ]
      },
      "post" : {
        "tags" : [ "pet" ],
        "summary" : "Updates a pet in the store with form data",
        "description" : "",
        "operationId" : "updatePetWithForm",
        "consumes" : [ "application/x-www-form-urlencoded" ],
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "petId",
          "in" : "path",
          "description" : "ID of pet that needs to be updated",
          "required" : true,
          "type" : "string"
        }, {
          "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/json", "application/xml" ],
        "parameters" : [ {
          "name" : "api_key",
          "in" : "header",
          "description" : "",
          "required" : false,
          "type" : "string"
        }, {
          "name" : "petId",
          "in" : "path",
          "description" : "Pet id to delete",
          "required" : true,
          "type" : "integer",
          "format" : "int64"
        } ],
        "responses" : {
          "400" : {
            "description" : "Invalid pet value"
          }
        },
        "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", "application/xml" ],
        "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" : {
          "default" : {
            "description" : "successful operation"
          }
        },
        "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", "application/xml" ],
        "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/json", "application/xml" ],
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "description" : "order placed for purchasing the pet",
          "required" : false,
          "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 <= 5 or > 10. Other values will generated exceptions",
        "operationId" : "getOrderById",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "orderId",
          "in" : "path",
          "description" : "ID of pet that needs to be fetched",
          "required" : true,
          "type" : "string"
        } ],
        "responses" : {
          "404" : {
            "description" : "Order not found"
          },
          "200" : {
            "description" : "successful operation",
            "schema" : {
              "$ref" : "#/definitions/Order"
            }
          },
          "400" : {
            "description" : "Invalid ID supplied"
          }
        }
      },
      "delete" : {
        "tags" : [ "store" ],
        "summary" : "Delete purchase order by ID",
        "description" : "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors",
        "operationId" : "deleteOrder",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "orderId",
          "in" : "path",
          "description" : "ID of the order that needs to be deleted",
          "required" : true,
          "type" : "string"
        } ],
        "responses" : {
          "404" : {
            "description" : "Order not found"
          },
          "400" : {
            "description" : "Invalid ID supplied"
          }
        }
      }
    },
    "/user" : {
      "post" : {
        "tags" : [ "user" ],
        "summary" : "Create user",
        "description" : "This can only be done by the logged in user.",
        "operationId" : "createUser",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "description" : "Created user object",
          "required" : false,
          "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/json", "application/xml" ],
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "description" : "List of user object",
          "required" : false,
          "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/json", "application/xml" ],
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "description" : "List of user object",
          "required" : false,
          "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/json", "application/xml" ],
        "parameters" : [ {
          "name" : "username",
          "in" : "query",
          "description" : "The user name for login",
          "required" : false,
          "type" : "string"
        }, {
          "name" : "password",
          "in" : "query",
          "description" : "The password for login in clear text",
          "required" : false,
          "type" : "string"
        } ],
        "responses" : {
          "200" : {
            "description" : "successful operation",
            "schema" : {
              "type" : "string"
            }
          },
          "400" : {
            "description" : "Invalid username/password supplied"
          }
        }
      }
    },
    "/user/logout" : {
      "get" : {
        "tags" : [ "user" ],
        "summary" : "Logs out current logged in user session",
        "description" : "",
        "operationId" : "logoutUser",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ ],
        "responses" : {
          "default" : {
            "description" : "successful operation"
          }
        }
      }
    },
    "/user/{username}" : {
      "get" : {
        "tags" : [ "user" ],
        "summary" : "Get user by user name",
        "description" : "",
        "operationId" : "getUserByName",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "username",
          "in" : "path",
          "description" : "The name that needs to be fetched. Use user1 for testing. ",
          "required" : true,
          "type" : "string"
        } ],
        "responses" : {
          "404" : {
            "description" : "User not found"
          },
          "200" : {
            "description" : "successful operation",
            "schema" : {
              "$ref" : "#/definitions/User"
            },
            "examples" : {
              "application/json" : {
                "id" : 1,
                "username" : "johnp",
                "firstName" : "John",
                "lastName" : "Public",
                "email" : "johnp@swagger.io",
                "password" : "-secret-",
                "phone" : "0123456789",
                "userStatus" : 0
              }
            }
          },
          "400" : {
            "description" : "Invalid username supplied"
          }
        }
      },
      "put" : {
        "tags" : [ "user" ],
        "summary" : "Updated user",
        "description" : "This can only be done by the logged in user.",
        "operationId" : "updateUser",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "username",
          "in" : "path",
          "description" : "name that need to be deleted",
          "required" : true,
          "type" : "string"
        }, {
          "in" : "body",
          "name" : "body",
          "description" : "Updated user object",
          "required" : false,
          "schema" : {
            "$ref" : "#/definitions/User"
          }
        } ],
        "responses" : {
          "404" : {
            "description" : "User not found"
          },
          "400" : {
            "description" : "Invalid user supplied"
          }
        }
      },
      "delete" : {
        "tags" : [ "user" ],
        "summary" : "Delete user",
        "description" : "This can only be done by the logged in user.",
        "operationId" : "deleteUser",
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "username",
          "in" : "path",
          "description" : "The name that needs to be deleted",
          "required" : true,
          "type" : "string"
        } ],
        "responses" : {
          "404" : {
            "description" : "User not found"
          },
          "400" : {
            "description" : "Invalid username supplied"
          }
        }
      }
    }
  },
  "securityDefinitions" : {
    "api_key" : {
      "type" : "apiKey",
      "name" : "api_key",
      "in" : "header"
    },
    "petstore_auth" : {
      "type" : "oauth2",
      "authorizationUrl" : "http://petstore.swagger.io/api/oauth/dialog",
      "flow" : "implicit",
      "scopes" : {
        "write:pets" : "modify pets in your account",
        "read:pets" : "read your pets"
      }
    }
  },
  "definitions" : {
    "User" : {
      "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"
      }
    },
    "Category" : {
      "properties" : {
        "id" : {
          "type" : "integer",
          "format" : "int64"
        },
        "name" : {
          "type" : "string"
        }
      },
      "xml" : {
        "name" : "Category"
      }
    },
    "Pet" : {
      "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"
      }
    },
    "Tag" : {
      "properties" : {
        "id" : {
          "type" : "integer",
          "format" : "int64"
        },
        "name" : {
          "type" : "string"
        }
      },
      "xml" : {
        "name" : "Tag"
      }
    },
    "Order" : {
      "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"
        }
      },
      "xml" : {
        "name" : "Order"
      }
    }
  }
}