{
    "swagger": "2.0",
    "info": {
        "title": "SaaS Example API",
        "contact": {},
        "license": {
            "name": "Apache 2.0",
            "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
        }
    },
    "paths": {
        "/accounts": {
            "patch": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Update updates the specified account in the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "account"
                ],
                "summary": "Update account by ID",
                "parameters": [
                    {
                        "description": "Update fields",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/account.AccountUpdateRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/accounts/{id}": {
            "get": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Read returns the specified account from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "account"
                ],
                "summary": "Get account by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Account ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/account.AccountResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/oauth/token": {
            "post": {
                "description": "Token generates an oauth2 accessToken using Basic Auth with a user's email and password.",
                "consumes": [
                    "application/x-www-form-urlencoded"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Token handles a request to authenticate a user.",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Email",
                        "name": "username",
                        "in": "formData",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Password",
                        "name": "password",
                        "in": "formData",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Account ID",
                        "name": "account_id",
                        "in": "formData"
                    },
                    {
                        "enum": [
                            "user",
                            "admin"
                        ],
                        "type": "string",
                        "description": "Scope",
                        "name": "scope",
                        "in": "formData"
                    }
                ],
                "responses": {
                    "200": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/projects": {
            "get": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Find returns the existing projects in the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "project"
                ],
                "summary": "List projects",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Filter string, example: name = 'Moon Launch'",
                        "name": "where",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Order columns separated by comma, example: created_at desc",
                        "name": "order",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Limit, example: 10",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Offset, example: 20",
                        "name": "offset",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "Included Archived, example: false",
                        "name": "include-archived",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/project.ProjectResponse"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Create inserts a new project into the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "project"
                ],
                "summary": "Create new project.",
                "parameters": [
                    {
                        "description": "Project details",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/project.ProjectCreateRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/project.ProjectResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Update updates the specified project in the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "project"
                ],
                "summary": "Update project by ID",
                "parameters": [
                    {
                        "description": "Update fields",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/project.ProjectUpdateRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/projects/archive": {
            "patch": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Archive soft-deletes the specified project from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "project"
                ],
                "summary": "Archive project by ID",
                "parameters": [
                    {
                        "description": "Update fields",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/project.ProjectArchiveRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/projects/{id}": {
            "get": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Read returns the specified project from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "project"
                ],
                "summary": "Get project by ID.",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Project ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/project.ProjectResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Delete removes the specified project from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "project"
                ],
                "summary": "Delete project by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Project ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/signup": {
            "post": {
                "description": "Signup creates a new account and user in the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "signup"
                ],
                "summary": "Signup handles new account creation.",
                "parameters": [
                    {
                        "description": "Signup details",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/signup.SignupRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/signup.SignupResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/user_accounts": {
            "get": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Find returns the existing user accounts in the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user_account"
                ],
                "summary": "List user accounts",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Filter string, example: account_id = 'c4653bf9-5978-48b7-89c5-95704aebb7e2'",
                        "name": "where",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Order columns separated by comma, example: created_at desc",
                        "name": "order",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Limit, example: 10",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Offset, example: 20",
                        "name": "offset",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "Included Archived, example: false",
                        "name": "include-archived",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/user_account.UserAccountResponse"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Create inserts a new user account into the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user_account"
                ],
                "summary": "Create new user account.",
                "parameters": [
                    {
                        "description": "User Account details",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/user_account.UserAccountCreateRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/user_account.UserAccountResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Delete removes the specified user account from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Delete user account by user ID and account ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "UserAccount ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Update updates the specified user account in the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Update user account by user ID and account ID",
                "parameters": [
                    {
                        "description": "Update fields",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/user_account.UserAccountUpdateRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/user_accounts/archive": {
            "patch": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Archive soft-deletes the specified user account from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Archive user account by user ID and account ID",
                "parameters": [
                    {
                        "description": "Update fields",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/user_account.UserAccountArchiveRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/user_accounts/{user_id}/{account_id}": {
            "get": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Read returns the specified user account from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user_account"
                ],
                "summary": "Get user account by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "UserAccount ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/user_account.UserAccountResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/users": {
            "get": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Find returns the existing users in the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "List users",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Filter string, example: name = 'Company Name' and email = 'gabi.may@geeksinthewoods.com'",
                        "name": "where",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Order columns separated by comma, example: created_at desc",
                        "name": "order",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Limit, example: 10",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Offset, example: 20",
                        "name": "offset",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "Included Archived, example: false",
                        "name": "include-archived",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/user.UserResponse"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Create inserts a new user into the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Create new user.",
                "parameters": [
                    {
                        "description": "User details",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/user.UserCreateRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/user.UserResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Update updates the specified user in the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Update user by ID",
                "parameters": [
                    {
                        "description": "Update fields",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/user.UserUpdateRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/users/archive": {
            "patch": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Archive soft-deletes the specified user from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Archive user by ID",
                "parameters": [
                    {
                        "description": "Update fields",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/user.UserArchiveRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/users/password": {
            "patch": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Update updates the password for a specified user in the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Update user password by ID",
                "parameters": [
                    {
                        "description": "Update fields",
                        "name": "data",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "$ref": "#/definitions/user.UserUpdatePasswordRequest"
                        }
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/users/switch-account/{account_id}": {
            "patch": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "SwitchAccount updates the auth claims to a new account.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Switch account.",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Account ID",
                        "name": "account_id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/users/{id}": {
            "get": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Read returns the specified user from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Get user by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/user.UserResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "OAuth2Password": []
                    }
                ],
                "description": "Delete removes the specified user from the system.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Delete user by ID",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {},
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/weberror.ErrorResponse"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "account.AccountResponse": {
            "type": "object",
            "properties": {
                "address1": {
                    "type": "string",
                    "example": "221 Tatitlek Ave"
                },
                "address2": {
                    "type": "string",
                    "example": "Box #1832"
                },
                "archived_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "billing_user_id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                },
                "city": {
                    "type": "string",
                    "example": "Valdez"
                },
                "country": {
                    "type": "string",
                    "example": "USA"
                },
                "created_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "id": {
                    "type": "string",
                    "example": "c4653bf9-5978-48b7-89c5-95704aebb7e2"
                },
                "name": {
                    "type": "string",
                    "example": "Company Name"
                },
                "region": {
                    "type": "string",
                    "example": "AK"
                },
                "signup_user_id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                },
                "status": {
                    "type": "object",
                    "$ref": "#/definitions/web.EnumResponse"
                },
                "timezone": {
                    "type": "string",
                    "example": "America/Anchorage"
                },
                "updated_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "zipcode": {
                    "type": "string",
                    "example": "99686"
                }
            }
        },
        "account.AccountUpdateRequest": {
            "type": "object",
            "required": [
                "id"
            ],
            "properties": {
                "address1": {
                    "type": "string",
                    "example": "221 Tatitlek Ave"
                },
                "address2": {
                    "type": "string",
                    "example": "Box #1832"
                },
                "billing_user_id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                },
                "city": {
                    "type": "string",
                    "example": "Valdez"
                },
                "country": {
                    "type": "string",
                    "example": "USA"
                },
                "id": {
                    "type": "string",
                    "example": "c4653bf9-5978-48b7-89c5-95704aebb7e2"
                },
                "name": {
                    "type": "string",
                    "example": "Company Name"
                },
                "region": {
                    "type": "string",
                    "example": "AK"
                },
                "signup_user_id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                },
                "timezone": {
                    "type": "string",
                    "example": "America/Anchorage"
                },
                "zipcode": {
                    "type": "string",
                    "example": "99686"
                }
            }
        },
        "project.ProjectArchiveRequest": {
            "type": "object",
            "required": [
                "id"
            ],
            "properties": {
                "id": {
                    "type": "string",
                    "example": "985f1746-1d9f-459f-a2d9-fc53ece5ae86"
                }
            }
        },
        "project.ProjectCreateRequest": {
            "type": "object",
            "required": [
                "account_id",
                "name"
            ],
            "properties": {
                "account_id": {
                    "type": "string",
                    "example": "c4653bf9-5978-48b7-89c5-95704aebb7e2"
                },
                "name": {
                    "type": "string",
                    "example": "Rocket Launch"
                }
            }
        },
        "project.ProjectResponse": {
            "type": "object",
            "required": [
                "account_id",
                "id",
                "name"
            ],
            "properties": {
                "account_id": {
                    "type": "string",
                    "example": "c4653bf9-5978-48b7-89c5-95704aebb7e2"
                },
                "archived_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "created_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "id": {
                    "type": "string",
                    "example": "985f1746-1d9f-459f-a2d9-fc53ece5ae86"
                },
                "name": {
                    "type": "string",
                    "example": "Rocket Launch"
                },
                "status": {
                    "type": "object",
                    "$ref": "#/definitions/web.EnumResponse"
                },
                "updated_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                }
            }
        },
        "project.ProjectUpdateRequest": {
            "type": "object",
            "required": [
                "id"
            ],
            "properties": {
                "id": {
                    "type": "string",
                    "example": "985f1746-1d9f-459f-a2d9-fc53ece5ae86"
                },
                "name": {
                    "type": "string",
                    "example": "Rocket Launch to Moon"
                }
            }
        },
        "signup.SignupAccount": {
            "type": "object",
            "required": [
                "address1",
                "city",
                "country",
                "name",
                "region",
                "zipcode"
            ],
            "properties": {
                "address1": {
                    "type": "string",
                    "example": "221 Tatitlek Ave"
                },
                "address2": {
                    "type": "string",
                    "example": "Box #1832"
                },
                "city": {
                    "type": "string",
                    "example": "Valdez"
                },
                "country": {
                    "type": "string",
                    "example": "USA"
                },
                "name": {
                    "type": "string",
                    "example": "Company {RANDOM_UUID}"
                },
                "region": {
                    "type": "string",
                    "example": "AK"
                },
                "timezone": {
                    "type": "string",
                    "example": "America/Anchorage"
                },
                "zipcode": {
                    "type": "string",
                    "example": "99686"
                }
            }
        },
        "signup.SignupRequest": {
            "type": "object",
            "properties": {
                "account": {
                    "type": "object",
                    "$ref": "#/definitions/signup.SignupAccount"
                },
                "user": {
                    "type": "object",
                    "$ref": "#/definitions/signup.SignupUser"
                }
            }
        },
        "signup.SignupResponse": {
            "type": "object",
            "properties": {
                "account": {
                    "type": "object",
                    "$ref": "#/definitions/account.AccountResponse"
                },
                "user": {
                    "type": "object",
                    "$ref": "#/definitions/user.UserResponse"
                }
            }
        },
        "signup.SignupUser": {
            "type": "object",
            "required": [
                "email",
                "first_name",
                "last_name",
                "password",
                "password_confirm"
            ],
            "properties": {
                "email": {
                    "type": "string",
                    "example": "{RANDOM_EMAIL}"
                },
                "first_name": {
                    "type": "string",
                    "example": "Gabi"
                },
                "last_name": {
                    "type": "string",
                    "example": "May"
                },
                "password": {
                    "type": "string",
                    "example": "SecretString"
                },
                "password_confirm": {
                    "type": "string",
                    "example": "SecretString"
                }
            }
        },
        "user.UserArchiveRequest": {
            "type": "object",
            "required": [
                "id"
            ],
            "properties": {
                "force": {
                    "type": "boolean"
                },
                "id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                }
            }
        },
        "user.UserCreateRequest": {
            "type": "object",
            "required": [
                "email",
                "first_name",
                "last_name",
                "password",
                "password_confirm"
            ],
            "properties": {
                "email": {
                    "type": "string",
                    "example": "gabi@geeksinthewoods.com"
                },
                "first_name": {
                    "type": "string",
                    "example": "Gabi"
                },
                "last_name": {
                    "type": "string",
                    "example": "May"
                },
                "password": {
                    "type": "string",
                    "example": "SecretString"
                },
                "password_confirm": {
                    "type": "string",
                    "example": "SecretString"
                },
                "timezone": {
                    "type": "string",
                    "example": "America/Anchorage"
                }
            }
        },
        "user.UserResponse": {
            "type": "object",
            "properties": {
                "archived_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "created_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "email": {
                    "type": "string",
                    "example": "gabi@geeksinthewoods.com"
                },
                "first_name": {
                    "type": "string",
                    "example": "Gabi"
                },
                "gravatar": {
                    "type": "string"
                },
                "id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                },
                "last_name": {
                    "type": "string",
                    "example": "May"
                },
                "name": {
                    "type": "string",
                    "example": "Gabi"
                },
                "timezone": {
                    "type": "string",
                    "example": "America/Anchorage"
                },
                "updated_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                }
            }
        },
        "user.UserUpdatePasswordRequest": {
            "type": "object",
            "required": [
                "id",
                "password",
                "password_confirm"
            ],
            "properties": {
                "id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                },
                "password": {
                    "type": "string",
                    "example": "NeverTellSecret"
                },
                "password_confirm": {
                    "type": "string",
                    "example": "NeverTellSecret"
                }
            }
        },
        "user.UserUpdateRequest": {
            "type": "object",
            "required": [
                "id"
            ],
            "properties": {
                "email": {
                    "type": "string",
                    "example": "gabi.may@geeksinthewoods.com"
                },
                "first_name": {
                    "type": "string",
                    "example": "Gabi May Not"
                },
                "id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                },
                "last_name": {
                    "type": "string",
                    "example": "Gabi May Not"
                },
                "timezone": {
                    "type": "string",
                    "example": "America/Anchorage"
                }
            }
        },
        "user_account.UserAccountArchiveRequest": {
            "type": "object",
            "required": [
                "account_id",
                "user_id"
            ],
            "properties": {
                "account_id": {
                    "type": "string",
                    "example": "c4653bf9-5978-48b7-89c5-95704aebb7e2"
                },
                "user_id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                }
            }
        },
        "user_account.UserAccountCreateRequest": {
            "type": "object",
            "required": [
                "account_id",
                "roles",
                "user_id"
            ],
            "properties": {
                "account_id": {
                    "type": "string",
                    "example": "c4653bf9-5978-48b7-89c5-95704aebb7e2"
                },
                "roles": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "enum": [
                            "admin",
                            "user"
                        ]
                    },
                    "example": [
                        "admin"
                    ]
                },
                "user_id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                }
            }
        },
        "user_account.UserAccountResponse": {
            "type": "object",
            "required": [
                "roles"
            ],
            "properties": {
                "account_id": {
                    "type": "string",
                    "example": "c4653bf9-5978-48b7-89c5-95704aebb7e2"
                },
                "archived_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "created_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "roles": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "enum": [
                            "admin",
                            "user"
                        ]
                    },
                    "example": [
                        "admin"
                    ]
                },
                "status": {
                    "type": "object",
                    "$ref": "#/definitions/web.EnumResponse"
                },
                "updated_at": {
                    "type": "object",
                    "$ref": "#/definitions/web.TimeResponse"
                },
                "user_id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                }
            }
        },
        "user_account.UserAccountUpdateRequest": {
            "type": "object",
            "required": [
                "account_id",
                "user_id"
            ],
            "properties": {
                "account_id": {
                    "type": "string",
                    "example": "c4653bf9-5978-48b7-89c5-95704aebb7e2"
                },
                "roles": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "enum": [
                            "admin",
                            "user"
                        ]
                    },
                    "example": [
                        "user"
                    ]
                },
                "user_id": {
                    "type": "string",
                    "example": "d69bdef7-173f-4d29-b52c-3edc60baf6a2"
                }
            }
        },
        "web.EnumMultiResponse": {
            "type": "object",
            "properties": {
                "options": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/web.EnumOption"
                    }
                },
                "values": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "active_etc"
                    ]
                }
            }
        },
        "web.EnumOption": {
            "type": "object",
            "properties": {
                "selected": {
                    "type": "boolean",
                    "example": true
                },
                "title": {
                    "type": "string",
                    "example": "Active Etc"
                },
                "value": {
                    "type": "string",
                    "example": "active_etc"
                }
            }
        },
        "web.EnumResponse": {
            "type": "object",
            "properties": {
                "options": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/web.EnumOption"
                    }
                },
                "title": {
                    "type": "string",
                    "example": "Active Etc"
                },
                "value": {
                    "type": "string",
                    "example": "active_etc"
                }
            }
        },
        "web.TimeResponse": {
            "type": "object",
            "properties": {
                "date": {
                    "type": "string",
                    "example": "2019-06-25"
                },
                "kitchen": {
                    "type": "string",
                    "example": "3:00AM"
                },
                "local": {
                    "type": "string",
                    "example": "Tue Jun 25 3:00AM"
                },
                "local_date": {
                    "type": "string",
                    "example": "Tue Jun 25"
                },
                "local_time": {
                    "type": "string",
                    "example": "3:00AM"
                },
                "now_rel_time": {
                    "type": "string",
                    "example": "15 hours from now"
                },
                "now_time": {
                    "type": "string",
                    "example": "5 hours ago"
                },
                "rfc1123": {
                    "type": "string",
                    "example": "Tue, 25 Jun 2019 03:00:53 AKDT"
                },
                "time": {
                    "type": "string",
                    "example": "03:00:53"
                },
                "timezone": {
                    "type": "string",
                    "example": "America/Anchorage"
                },
                "value": {
                    "type": "string",
                    "example": "2019-06-25T03:00:53.284-08:00"
                },
                "value_utc": {
                    "type": "string",
                    "example": "2019-06-25T11:00:53.284Z"
                }
            }
        },
        "weberror.ErrorResponse": {
            "type": "object",
            "properties": {
                "details": {
                    "type": "string"
                },
                "error": {
                    "type": "string"
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/weberror.FieldError"
                    }
                },
                "stack_trace": {
                    "type": "string"
                },
                "status_code": {
                    "type": "integer"
                }
            }
        },
        "weberror.FieldError": {
            "type": "object",
            "properties": {
                "display": {
                    "type": "string"
                },
                "error": {
                    "type": "string"
                },
                "field": {
                    "type": "string"
                },
                "tag": {
                    "type": "string"
                },
                "value": {
                    "type": "object"
                }
            }
        }
    },
    "securityDefinitions": {
        "BasicAuth": {
            "type": "basic"
        },
        "OAuth2Password": {
            "type": "oauth2",
            "flow": "password",
            "tokenUrl": "/v1/oauth/token",
            "scopes": {
                "admin": " Grants administrative privileges with role of admin.",
                "user": " Grants basic privileges with role of user."
            }
        }
    }
}