{
  "openapi": "3.0.0",
  "info": {
    "title": "wheno-api",
    "version": "0.0.1",
    "description": "wheno-api",
    "contact": {
      "name": "horasikus",
      "email": "hglagan@gmail.com"
    }
  },
  "paths": {
    "/auth/admin/users/{userId}/roles/{role}": {
      "delete": {
        "x-controller-name": "AuthAdminController",
        "x-operation-name": "revoke",
        "tags": [
          "AuthAdminController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthAdminController.revoke"
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "role",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "AuthAdminController.revoke",
        "security": [
          {
            "bigboomJwt": []
          }
        ]
      }
    },
    "/auth/admin/users/{userId}/roles": {
      "post": {
        "x-controller-name": "AuthAdminController",
        "x-operation-name": "grant",
        "tags": [
          "AuthAdminController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthAdminController.grant"
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "role"
                ],
                "properties": {
                  "role": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "AuthAdminController.grant",
        "security": [
          {
            "bigboomJwt": []
          }
        ]
      }
    },
    "/auth/apple/code": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "appleCode",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.appleCode"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "code",
                  "challengeId",
                  "nonce"
                ],
                "properties": {
                  "code": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  },
                  "challengeId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  },
                  "nonce": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.appleCode"
      }
    },
    "/auth/apple": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "apple",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.apple"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "idToken",
                  "challengeId",
                  "nonce"
                ],
                "properties": {
                  "idToken": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  },
                  "challengeId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  },
                  "nonce": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.apple"
      }
    },
    "/auth/forgot-password": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "forgot",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.forgot"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "email"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 254
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.forgot"
      }
    },
    "/auth/google": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "google",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.google"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "idToken",
                  "challengeId",
                  "nonce"
                ],
                "properties": {
                  "idToken": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  },
                  "challengeId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  },
                  "nonce": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.google"
      }
    },
    "/auth/identities/{provider}/link": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "link",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.link"
          }
        },
        "parameters": [
          {
            "name": "provider",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "idToken",
                  "challengeId",
                  "nonce"
                ],
                "properties": {
                  "idToken": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  },
                  "challengeId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  },
                  "nonce": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  }
                }
              }
            }
          },
          "required": true,
          "x-parameter-index": 1
        },
        "operationId": "AuthController.link",
        "security": [
          {
            "bigboomJwt": []
          }
        ]
      }
    },
    "/auth/login": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "login",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.login"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "email",
                  "password"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 254
                  },
                  "password": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10000
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.login"
      }
    },
    "/auth/logout": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "logout",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.logout"
          }
        },
        "operationId": "AuthController.logout",
        "security": [
          {
            "bigboomJwt": []
          }
        ]
      }
    },
    "/auth/logout-all": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "logoutAll",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.logoutAll"
          }
        },
        "operationId": "AuthController.logoutAll",
        "security": [
          {
            "bigboomJwt": []
          }
        ]
      }
    },
    "/auth/me/locale": {
      "patch": {
        "x-controller-name": "AuthController",
        "x-operation-name": "updateLocale",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.updateLocale"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "locale"
                ],
                "properties": {
                  "locale": {
                    "type": "string",
                    "enum": [
                      "en",
                      "es"
                    ]
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.updateLocale",
        "security": [
          {
            "bigboomJwt": []
          }
        ]
      }
    },
    "/auth/me": {
      "get": {
        "x-controller-name": "AuthController",
        "x-operation-name": "me",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.me"
          }
        },
        "operationId": "AuthController.me",
        "security": [
          {
            "bigboomJwt": []
          }
        ]
      }
    },
    "/auth/refresh": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "refresh",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.refresh"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "refreshToken"
                ],
                "properties": {
                  "refreshToken": {
                    "type": "string",
                    "minLength": 30,
                    "maxLength": 200
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.refresh"
      }
    },
    "/auth/register": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "register",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.register"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "email",
                  "password"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 254
                  },
                  "password": {
                    "type": "string",
                    "minLength": 12,
                    "maxLength": 200
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.register"
      }
    },
    "/auth/resend-verification": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "resend",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.resend"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "email"
                ],
                "properties": {
                  "email": {
                    "type": "string",
                    "format": "email",
                    "maxLength": 254
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.resend"
      }
    },
    "/auth/reset-password": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "reset",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.reset"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "token",
                  "password"
                ],
                "properties": {
                  "token": {
                    "type": "string",
                    "minLength": 30,
                    "maxLength": 200
                  },
                  "password": {
                    "type": "string",
                    "minLength": 12,
                    "maxLength": 200
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.reset"
      }
    },
    "/auth/social/challenge": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "challenge",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.challenge"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "provider"
                ],
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "google",
                      "apple"
                    ]
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.challenge"
      }
    },
    "/auth/verify-email": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "verify",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AuthController.verify"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "token"
                ],
                "properties": {
                  "token": {
                    "type": "string",
                    "minLength": 30,
                    "maxLength": 200
                  }
                }
              }
            }
          },
          "required": true
        },
        "operationId": "AuthController.verify"
      }
    },
    "/ping": {
      "get": {
        "x-controller-name": "PingController",
        "x-operation-name": "ping",
        "tags": [
          "PingController"
        ],
        "responses": {
          "200": {
            "description": "Ping Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PingResponse"
                }
              }
            }
          }
        },
        "operationId": "PingController.ping"
      }
    }
  },
  "servers": [
    {
      "url": "https://api.wheno.me"
    }
  ],
  "components": {
    "schemas": {
      "PingResponse": {
        "type": "object",
        "title": "PingResponse",
        "properties": {
          "greeting": {
            "type": "string"
          },
          "date": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "headers": {
            "type": "object",
            "properties": {
              "Content-Type": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        }
      }
    },
    "securitySchemes": {
      "bigboomJwt": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Access token returned by POST /auth/login"
      }
    }
  }
}