Untitled

mail@pastecode.io avatar
unknown
json
2 years ago
108 kB
2
Indexable
Never
{
  "swagger": "2.0",
  "info": {
    "description": "",
    "version": "1.0.0",
    "title": "Swagger GTMS"
  },
  "host": "master.geotags.pl",
  "basePath": "/api/v1",
  "tags": [
    {
      "name": "Auth",
      "description": "User login and registration service"
    },
    {
      "name": "Groups",
      "description": "Groups service"
    },
    {
      "name": "Notifications",
      "description": "Email and web push notifications service"
    },
    {
      "name": "Tags",
      "description": "Tags service"
    },
    {
      "name": "Files",
      "description": "Files service"
    },
    {
      "name": "Posts",
      "description": "Posts service"
    },
    {
      "name": "Comments",
      "description": "Comments service"
    }
  ],
  "schemes": ["https"],
  "paths": {
    "/auth/users/count": {
      "get": {
        "tags": ["Auth"],
        "summary": "Returns the current number of registered users",
        "description": "",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "counter": {
                  "type": "number"
                }
              },
              "example": {
                "counter": 510
              }
            }
          }
        }
      }
    },
    "/auth/users/username": {
      "post": {
        "tags": ["Auth"],
        "summary": "Checks if username exists in database",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "username": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Username exists"
          },
          "400": {
            "description": "Invalid payload"
          },
          "404": {
            "description": "Username does not exist"
          }
        }
      }
    },
    "/auth/username/find": {
      "get": {
        "tags": ["Auth"],
        "summary": "Finds users by username",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "limit",
            "type": "number"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/User"
              }
            }
          },
          "400": {
            "description": "Invalid params"
          }
        }
      }
    },
    "/auth/users": {
      "post": {
        "tags": ["Auth"],
        "summary": "Register a new user",
        "description": "",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "surname": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "format": "email"
                },
                "phone": {
                  "type": "string"
                },
                "password": {
                  "type": "string"
                },
                "countryCode": {
                  "type": "string"
                },
                "languageCode": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/User"
            }
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          }
        }
      },
      "get": {
        "tags": ["Auth"],
        "summary": "Returns list of users",
        "description": "",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/User"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/auth/users/tag": {
      "get": {
        "tags": ["Auth"],
        "summary": "Find users by tag(-s)",
        "description": "",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "type": "string",
            "description": "Coma separated list of tags to find (max 10 tags)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/User"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Tags are invalid"
          }
        }
      }
    },
    "/auth/users/{id}": {
      "get": {
        "tags": ["Auth"],
        "summary": "Returns details about user",
        "description": "",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "basic",
            "in": "query",
            "required": false,
            "type": "boolean",
            "description": "If true returns only basic user info"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "User's id"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/definitions/User"
                },
                {
                  "type": "object",
                  "properties": {
                    "groupsMember": {
                      "type": "array",
                      "items": {
                        "$ref": "#/definitions/Group"
                      }
                    },
                    "groupsAdmin": {
                      "type": "array",
                      "items": {
                        "$ref": "#/definitions/Group"
                      }
                    },
                    "groupsOwner": {
                      "type": "array",
                      "items": {
                        "$ref": "#/definitions/Group"
                      }
                    }
                  }
                }
              ]
            }
          },
          "404": {
            "description": "User not found"
          }
        }
      }
    },
    "/auth/authenticate": {
      "post": {
        "tags": ["Auth"],
        "summary": "Login into an account",
        "description": "",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "email": {
                  "type": "string",
                  "format": "email"
                },
                "password": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/JWT"
            }
          },
          "401": {
            "description": "Invalid email/password"
          },
          "403": {
            "description": "Account is not active"
          }
        }
      }
    },
    "/auth/refresh-token": {
      "post": {
        "tags": ["Auth"],
        "summary": "Refreshes access token",
        "description": "",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "token": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "accessToken": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Token is invalid"
          }
        }
      }
    },
    "/auth/activate-account/{code}": {
      "get": {
        "tags": ["Auth"],
        "summary": "Actives user account",
        "description": "",
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Activation code"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "404": {
            "description": "Activation code not found"
          }
        }
      }
    },
    "/auth/remind-password": {
      "post": {
        "tags": ["Auth"],
        "summary": "Generates remind password email",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "email": {
                  "type": "string",
                  "format": "email"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Email has been sent"
          },
          "400": {
            "description": "Address email is invalid"
          },
          "404": {
            "description": "Email not found in DB"
          }
        }
      }
    },
    "/auth/reset-passord": {
      "post": {
        "tags": ["Auth"],
        "summary": "Resets user's password",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string"
                },
                "password": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Payload is invalid"
          },
          "404": {
            "description": "Code not found"
          }
        }
      }
    },
    "/auth/delete-account": {
      "delete": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Sends delete user account email",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation"
          }
        }
      }
    },
    "/auth/delete-account-confirm": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Sends delete user account email",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Account has been deleted"
          },
          "400": {
            "description": "Code is invalid"
          },
          "401": {
            "description": "Code does not belong to the current user"
          },
          "404": {
            "description": "Code or account does not exist"
          }
        }
      }
    },
    "/auth/me/groups": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Returns groups that somehow belongs to the user",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "admin": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Group"
                  }
                },
                "member": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Group"
                  }
                },
                "owner": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Group"
                  }
                },
                "favs": {
                  "type": "object",
                  "properties": {
                    "total": {
                      "type": "number"
                    },
                    "limit": {
                      "type": "number"
                    },
                    "offset": {
                      "type": "number"
                    },
                    "docs": {
                      "type": "array",
                      "items": {
                        "$ref": "#/definitions/Group"
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "User does not exist"
          }
        }
      }
    },
    "/auth/me": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Returns info about current user",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "schema": {
              "$ref": "#/definitions/User"
            },
            "description": "Successful operation"
          },
          "404": {
            "description": "User does not exist"
          }
        }
      },
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Returns info about current user",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "surname": {
                  "type": "string"
                },
                "email": {
                  "type": "string"
                },
                "phone": {
                  "type": "string"
                },
                "countryCode": {
                  "type": "string"
                },
                "languageCode": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Account has been updated"
          },
          "400": {
            "description": "Payload has errors"
          },
          "401": {
            "description": "JWT token in header is invalid"
          },
          "404": {
            "description": "JTW user does not exist in DB"
          }
        }
      }
    },
    "/auth/me/favs/groups": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Returns info about current user fav groups",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Group"
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Updates order of favs group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Invalid payload"
          }
        }
      }
    },
    "/auth/me/favs/groups/status": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Checks if groups are in user favs",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "query",
            "description": "User's id",
            "name": "id[]",
            "type": "array",
            "items": {
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          }
        }
      }
    },
    "/auth/me/favs/users": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Creates a new fav user",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "user": {
                  "type": "string"
                },
                "order": {
                  "type": "number"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          }
        }
      },
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Returns info about current user fav users",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/User"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/auth/favs/groups/user/{id}": {
      "get": {
        "tags": ["Auth"],
        "summary": "Returns info about user's fav groups",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "type": "string",
            "in": "path",
            "description": "User's id"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Group"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/auth/favs/users/user/{id}": {
      "get": {
        "tags": ["Auth"],
        "summary": "Returns info about user's fav users",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "type": "string",
            "in": "path",
            "description": "User's id"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/User"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/auth/favs/groups": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Creates a new fav group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "group": {
                  "type": "string"
                },
                "order": {
                  "type": "number"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          }
        }
      }
    },
    "/auth/me/favs/groups/{id}": {
      "delete": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Removes group from favs",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "id",
            "required": true,
            "type": "string",
            "in": "path",
            "description": "Group's id"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "404": {
            "description": "Group is not in favs"
          }
        }
      }
    },
    "/auth/me/favs/users/{id}": {
      "delete": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Removes user from favs",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "id",
            "required": true,
            "type": "string",
            "in": "path",
            "description": "User's id"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "404": {
            "description": "Post is not in favs"
          }
        }
      }
    },
    "/auth/login-history": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Returns user's login history",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/LoginHistory"
              }
            }
          },
          "404": {
            "description": "User not found"
          }
        }
      }
    },
    "/auth/sessions": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Returns user's active sessions",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/ActiveSession"
              }
            }
          }
        }
      }
    },
    "/auth/sessions/{id}": {
      "delete": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Auth"],
        "summary": "Deletes user's active session",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "id",
            "required": true,
            "type": "string",
            "in": "path",
            "description": "Session's id"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "404": {
            "description": "Session's id not found"
          }
        }
      }
    },
    "/groups": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Groups"],
        "summary": "Creates a new group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "visibility": {
                  "type": "string"
                },
                "avatar": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "members": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/Group"
            }
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          }
        }
      },
      "get": {
        "tags": ["Groups"],
        "summary": "Returns public groups list, sorted by creation date",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Group"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/groups/tag": {
      "get": {
        "tags": ["Groups"],
        "summary": "Find groups by tag(-s)",
        "description": "",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "type": "string",
            "description": "Coma separated list of tags to find (max 10)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Group"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Tags are invalid"
          }
        }
      }
    },
    "/groups/{slug}/join": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Groups"],
        "summary": "Allow user to join a group",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "User is already a group member"
          },
          "403": {
            "description": "User has no rights to join the group"
          },
          "404": {
            "description": "Group does not exist in db"
          }
        }
      }
    },
    "/groups/{slug}/leave": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Groups"],
        "summary": "Allow user to leave a group",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "400": {
            "description": "User is not group's member, can not leave"
          },
          "404": {
            "description": "Group does not exist in db"
          }
        }
      }
    },
    "/groups/{slug}": {
      "get": {
        "tags": ["Groups"],
        "summary": "Returns group data",
        "description": "",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug or group id"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/Group"
            }
          },
          "404": {
            "description": "Group does not exist in db"
          }
        }
      },
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Groups"],
        "summary": "Updates group data",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          },
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "visibility": {
                  "type": "string"
                },
                "avatar": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "members": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ],
        "description": "",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/Group"
            }
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          },
          "404": {
            "description": "Group does not exist or user has no permission to change it"
          }
        }
      }
    },
    "/groups/{slug}/members": {
      "get": {
        "tags": ["Groups"],
        "summary": "Returns paginated list of group's members",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/User"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Group not found"
          }
        }
      }
    },
    "/groups/{slug}/members/{user}": {
      "delete": {
        "tags": ["Groups"],
        "security": [
          {
            "user_auth": []
          }
        ],
        "summary": "Deletes group's member",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          },
          {
            "name": "user",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "User's id"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Validation error"
          },
          "403": {
            "description": "Current user is not group's owner or admin"
          },
          "404": {
            "description": "Group not found"
          }
        }
      }
    },
    "/groups/{slug}/admins": {
      "get": {
        "tags": ["Groups"],
        "summary": "Returns list of group's admins",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          },
          {
            "name": "onlyIds",
            "in": "query",
            "description": "Defines if endpoint should return only ids of admins or entire user's objects",
            "required": false,
            "type": "boolean"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/User"
              }
            }
          },
          "404": {
            "description": "Group not found"
          }
        }
      },
      "post": {
        "tags": ["Groups"],
        "security": [
          {
            "user_auth": []
          }
        ],
        "summary": "Adds a new group's admin",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          },
          {
            "name": "payload",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "user": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Validation error"
          },
          "403": {
            "description": "Current user is not group's owner"
          },
          "404": {
            "description": "Group not found"
          }
        }
      }
    },
    "/groups/{slug}/admins/{user}": {
      "delete": {
        "tags": ["Groups"],
        "security": [
          {
            "user_auth": []
          }
        ],
        "summary": "Deletes group's admin",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          },
          {
            "name": "user",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "User's id"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Validation error"
          },
          "403": {
            "description": "Current user is not group's owner"
          },
          "404": {
            "description": "Group not found"
          }
        }
      }
    },
    "/groups/check-admin-rights": {
      "get": {
        "tags": ["Groups"],
        "summary": "Checks if user has right to modify group",
        "parameters": [
          {
            "name": "user",
            "in": "query",
            "required": true,
            "type": "string",
            "description": "User's id"
          },
          {
            "name": "group",
            "in": "query",
            "required": true,
            "type": "string",
            "description": "Group's id"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "User has admin rights"
          },
          "401": {
            "description": "User does not have admin rights"
          },
          "404": {
            "description": "Group does not exist in db"
          }
        }
      }
    },
    "/groups/find-by-ids": {
      "post": {
        "tags": ["Groups"],
        "summary": "Returns groups by ids",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "ids": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Group"
              }
            }
          }
        }
      }
    },
    "/groups/{slug}/invitations": {
      "post": {
        "tags": ["Groups"],
        "summary": "Creates a new inviatation to the group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          },
          {
            "name": "payload",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "user": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "security": [
          {
            "user_auth": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Validation errors"
          },
          "404": {
            "description": "Group not found"
          }
        }
      },
      "get": {
        "tags": ["Groups"],
        "summary": "Returns list of invitations to the group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          }
        ],
        "security": [
          {
            "user_auth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Invitation"
                  }
                }
              }
            }
          },
          "403": {
            "description": "User is not group's owner or group's admin"
          },
          "404": {
            "description": "Group does not exist"
          }
        }
      }
    },
    "/groups/{slug}/requests": {
      "post": {
        "tags": ["Groups"],
        "summary": "Creates a new request to the group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          }
        ],
        "security": [
          {
            "user_auth": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Validation errors"
          },
          "404": {
            "description": "Group not found"
          }
        }
      },
      "get": {
        "tags": ["Groups"],
        "summary": "Returns list of requests to the group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Unique group's slug"
          }
        ],
        "security": [
          {
            "user_auth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Invitation"
                  }
                }
              }
            }
          },
          "403": {
            "description": "User is not group's owner or group's admin"
          },
          "404": {
            "description": "Group does not exist"
          }
        }
      }
    },
    "/groups/invitations/my": {
      "get": {
        "tags": ["Groups"],
        "summary": "Returns list of requests and invitations to groups for current user",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "security": [
          {
            "user_auth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Invitation"
              }
            }
          }
        }
      }
    },
    "/groups/invitations/{id}": {
      "delete": {
        "tags": ["Groups"],
        "summary": "Deletes group's inviatation/request by id",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Invitation's id"
          }
        ],
        "security": [
          {
            "user_auth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "403": {
            "description": "User is not group's owner, group's admin and invitation owner"
          },
          "404": {
            "description": "Group does not exist"
          }
        }
      }
    },
    "/groups/can-add-post": {
      "get": {
        "tags": ["Groups"],
        "summary": "Checks if user is allowed to add a post to the group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "user",
            "in": "query",
            "required": true,
            "type": "string",
            "description": "User's id"
          },
          {
            "name": "group",
            "in": "query",
            "required": true,
            "type": "string",
            "description": "Group's id"
          }
        ],
        "responses": {
          "200": {
            "description": "User can add a post"
          },
          "400": {
            "description": "Query params are invalid"
          },
          "401": {
            "description": "User can not add any posts to the group"
          },
          "404": {
            "description": "Group does not exist"
          }
        }
      }
    },
    "/notifications": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Returns unread notifications",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation"
          }
        }
      }
    },
    "/notifications/recent": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Returns recent notifications",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation"
          }
        }
      }
    },
    "/notifications/web-push": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Creates a new web push subscription",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "subscription": {
                  "type": "string",
                  "description": "Base64 encoded subscription object"
                },
                "userAgent": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          }
        }
      }
    },
    "/notifications/web-push/{subscription}": {
      "delete": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Deletes subscription",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "subscription",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Base64 encoded subscription object"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "404": {
            "description": "Subscription does not exist"
          }
        }
      }
    },
    "/notifications/web-push/check": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Checks if subscription exists",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "subscription": {
                  "type": "string"
                },
                "userAgent": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Subscription exists"
          },
          "404": {
            "description": "Subscription does not exist"
          }
        }
      }
    },
    "/notifications/settings": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Updates user's notification settings",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "invitation": {
                  "type": "boolean"
                },
                "newPostInOwnedGroup": {
                  "type": "boolean"
                },
                "newMembershipRequestInOwnedGroup": {
                  "type": "boolean"
                },
                "newMemberInOwnedGroup": {
                  "type": "boolean"
                },
                "newPostInAdminnedGroup": {
                  "type": "boolean"
                },
                "newMembershipRequestInAdminnedGroup": {
                  "type": "boolean"
                },
                "newMemberInAdminnedGroup": {
                  "type": "boolean"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          }
        }
      },
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Returns user's notification settings",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "invitation": {
                  "type": "boolean"
                },
                "newPostInOwnedGroup": {
                  "type": "boolean"
                },
                "newMembershipRequestInOwnedGroup": {
                  "type": "boolean"
                },
                "newMemberInOwnedGroup": {
                  "type": "boolean"
                },
                "newPostInAdminnedGroup": {
                  "type": "boolean"
                },
                "newMembershipRequestInAdminnedGroup": {
                  "type": "boolean"
                },
                "newMemberInAdminnedGroup": {
                  "type": "boolean"
                }
              }
            }
          }
        }
      }
    },
    "/notifications/follow": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Checks if current user follows group or user",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "user",
            "in": "query",
            "required": false,
            "type": "string",
            "description": "User's id to check"
          },
          {
            "name": "group",
            "in": "query",
            "required": false,
            "type": "string",
            "description": "Group's id to check"
          }
        ],
        "responses": {
          "200": {
            "description": "User follows"
          },
          "400": {
            "description": "Query param is missing, or both are present"
          },
          "404": {
            "description": "User does not follow"
          }
        }
      },
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Subscribes for group or user notifications",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "user": {
                  "type": "string"
                },
                "group": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Invalid payload"
          }
        }
      },
      "delete": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Notifications"],
        "summary": "Unsubscribes from group or user notifications",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "query",
            "description": "User's id",
            "name": "user",
            "type": "string",
            "required": true
          },
          {
            "in": "query",
            "description": "Group's id",
            "name": "group",
            "type": "string",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Invalid payload"
          }
        }
      }
    },
    "/tags/find": {
      "get": {
        "tags": ["Tags"],
        "summary": "Allow to find tags by name",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "type": "string",
            "description": "Term to search"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "400": {
            "description": "Query param is missing"
          }
        }
      }
    },
    "/tags/suggested": {
      "post": {
        "tags": ["Tags"],
        "summary": "Return suggested tags",
        "security": [
          {
            "user_auth": []
          }
        ],
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "payload",
            "in": "body",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "400": {
            "description": "Query param is missing"
          }
        }
      }
    },
    "/tags/promoted": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Tags"],
        "summary": "Creates a new promoted tag for a group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "description": {
                  "type": "string"
                },
                "tag": {
                  "type": "string"
                },
                "group": {
                  "type": "string"
                },
                "order": {
                  "type": "number"
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/PromotedTag"
            }
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          },
          "403": {
            "description": "User does not have group's admin rights"
          }
        }
      }
    },
    "/tags/promoted/group/{id}": {
      "put": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Tags"],
        "summary": "Bulk update group's promoted tags",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Group's id"
          },
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "op": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string"
                  },
                  "value": {
                    "type": "object",
                    "properties": {
                      "description": {
                        "type": "string"
                      },
                      "tag": {
                        "type": "string"
                      },
                      "group": {
                        "type": "string"
                      },
                      "order": {
                        "type": "number"
                      }
                    }
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string"
                  },
                  "value": {
                    "$ref": "#/definitions/PromotedTag"
                  }
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": ["Tags"],
        "summary": "Returns promoted tags for a group",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Group's id"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/PromotedTag"
              }
            }
          }
        }
      }
    },
    "/tags/promoted/{id}": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Tags"],
        "summary": "Updates promoted tag",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Tag's id"
          },
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "descripiotn": {
                  "type": "string"
                },
                "order": {
                  "type": "integer"
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/PromotedTag"
            }
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          },
          "403": {
            "description": "User does not have rights to update record"
          }
        }
      },
      "delete": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Tags"],
        "summary": "Deletes promoted tag",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Tag's id"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          },
          "403": {
            "description": "User does not have rights to delete record"
          },
          "404": {
            "description": "Group tag does not exist"
          }
        }
      }
    },
    "/files/groups/logo": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Files"],
        "summary": "Uploads group's logo",
        "consumes": ["multipart/form-data"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "formData",
            "name": "file",
            "required": true,
            "type": "file"
          },
          {
            "in": "formData",
            "name": "relatedRecord",
            "type": "string",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Invalid payload"
          }
        }
      }
    },
    "/files/groups/bg": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Files"],
        "summary": "Uploads group's background",
        "consumes": ["multipart/form-data"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "formData",
            "name": "file",
            "required": true,
            "type": "file"
          },
          {
            "in": "formData",
            "name": "relatedRecord",
            "type": "string",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Invalid payload"
          }
        }
      }
    },
    "/files/avatar": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Files"],
        "summary": "Uploads user's avatar",
        "consumes": ["multipart/form-data"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "formData",
            "name": "file",
            "required": true,
            "type": "file"
          },
          {
            "in": "formData",
            "name": "relatedRecord",
            "type": "string",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Invalid payload"
          }
        }
      }
    },
    "/files/gallery": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Files"],
        "summary": "Uploads user's gallery image",
        "consumes": ["multipart/form-data"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "formData",
            "name": "file",
            "required": true,
            "type": "file"
          },
          {
            "in": "formData",
            "name": "relatedRecord",
            "type": "string",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Invalid payload"
          }
        }
      }
    },
    "/files/tags/promoted": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Files"],
        "summary": "Uploads promoted tag's logo",
        "consumes": ["multipart/form-data"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "formData",
            "name": "file",
            "required": true,
            "type": "file"
          },
          {
            "in": "formData",
            "name": "relatedRecord",
            "type": "string",
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          },
          "400": {
            "description": "Invalid payload"
          }
        }
      }
    },
    "/posts": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Posts"],
        "summary": "Creates a new post",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "group": {
                  "type": "string"
                },
                "text": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/Post"
            }
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          },
          "403": {
            "description": "User has no rights to create a post in provided group"
          }
        }
      }
    },
    "/posts/{id}": {
      "get": {
        "tags": ["Posts"],
        "summary": "Returns a post",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Post's id"
          },
          {
            "in": "query",
            "name": "group",
            "required": false,
            "type": "boolean",
            "description": "Defines if together with post info about group should be returned"
          },
          {
            "in": "query",
            "name": "owner",
            "required": false,
            "type": "boolean",
            "description": "Defines if together with post info about owner should be returned"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "allOf": [
                {
                  "$ref": "#/definitions/Post"
                },
                {
                  "type": "object",
                  "properties": {
                    "group": {
                      "$ref": "#/definitions/Group"
                    },
                    "owner": {
                      "$ref": "#/definitions/User"
                    }
                  }
                }
              ]
            }
          },
          "404": {
            "description": "Post does not exist"
          }
        }
      },
      "post": {
        "tags": ["Posts"],
        "security": [
          {
            "user_auth": []
          }
        ],
        "summary": "Updates a post",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Post's id"
          },
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/Post"
            }
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          },
          "403": {
            "description": "Edition timeout passed"
          },
          "404": {
            "description": "Post does not exist"
          }
        }
      }
    },
    "/posts/group/{id}": {
      "get": {
        "tags": ["Posts"],
        "summary": "Returns group's posts",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Group's id"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "type": "string",
            "description": "popular | latest | active"
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "name": "users",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Post"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/posts/find": {
      "get": {
        "tags": ["Posts"],
        "summary": "Allows to search in posts",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          },
          {
            "name": "tags",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Post"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/posts/user/{id}": {
      "get": {
        "tags": ["Posts"],
        "summary": "Returns users's posts",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "User's id"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Post"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/posts/my": {
      "get": {
        "tags": ["Posts"],
        "security": [
          {
            "user_auth": []
          }
        ],
        "summary": "Returns current user's posts",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Post"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/posts/find-by-ids": {
      "post": {
        "tags": ["Posts"],
        "summary": "Returns posts by ids",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "ids": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          {
            "in": "query",
            "description": "Defines if together with post group info should be returned",
            "name": "groups",
            "type": "boolean",
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Post"
              }
            }
          }
        }
      }
    },
    "/posts/{id}/favs": {
      "get": {
        "tags": ["Posts"],
        "summary": "Returns list of users which added post to favs",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Posts's id"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/User"
              }
            }
          }
        }
      },
      "post": {
        "tags": ["Posts"],
        "security": [
          {
            "user_auth": []
          }
        ],
        "summary": "Adds a post to user's favs",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Posts's id"
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation"
          }
        }
      },
      "delete": {
        "tags": ["Posts"],
        "security": [
          {
            "user_auth": []
          }
        ],
        "summary": "Removes a post from user's favs",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Post's id"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation"
          }
        }
      }
    },
    "/posts/my/favs": {
      "get": {
        "tags": ["Posts"],
        "security": [
          {
            "user_auth": []
          }
        ],
        "summary": "Return user's favs posts",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/User"
              }
            }
          }
        }
      }
    },
    "/comments": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Comments"],
        "summary": "Creates a comment to a post",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "post": {
                  "type": "string"
                },
                "parent": {
                  "type": "string"
                },
                "text": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/Comment"
            }
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          }
        }
      }
    },
    "/comments/{id}": {
      "post": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Comments"],
        "summary": "Updates a comment",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Comment's id"
          },
          {
            "in": "body",
            "name": "payload",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/Comment"
            }
          },
          "400": {
            "description": "Validation errors",
            "schema": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/definitions/ValidationError"
              }
            }
          },
          "403": {
            "description": "Edition timeout passed"
          }
        }
      }
    },
    "/comments/{id}/nested": {
      "get": {
        "tags": ["Comments"],
        "summary": "Returns subComments related to comment",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Comment's id"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Comment"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/comments/my": {
      "get": {
        "security": [
          {
            "user_auth": []
          }
        ],
        "tags": ["Comments"],
        "summary": "Returns subComments related to comment",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Comment"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/comments/post/{id}": {
      "get": {
        "tags": ["Comments"],
        "summary": "Returns comments related to post",
        "consumes": ["application/json"],
        "produces": ["application/json"],
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string",
            "description": "Post's id"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records limit (no more than 50)"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "number",
            "description": "Returned records offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "total": {
                  "type": "number"
                },
                "limit": {
                  "type": "number"
                },
                "offset": {
                  "type": "number"
                },
                "docs": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/Comment"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "definitions": {
    "User": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "surname": {
          "type": "string"
        },
        "email": {
          "type": "string",
          "format": "email"
        },
        "phone": {
          "type": "string",
          "format": "phone-number"
        },
        "countryCode": {
          "type": "string"
        },
        "languageCode": {
          "type": "string"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "roles": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "avatar": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "files": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "postsCounter": {
          "type": "number"
        }
      }
    },
    "Group": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "visibility": {
          "type": "string"
        },
        "avatar": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "files": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "owner": {
          "type": "string"
        },
        "postsCounter": {
          "type": "number"
        },
        "membersCounter": {
          "type": "number"
        }
      }
    },
    "PromotedTag": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "tag": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "order": {
          "type": "number"
        },
        "logo": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string"
            },
            "files": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "Post": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "text": {
          "type": "string"
        },
        "firstComments": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Comment"
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "lastTags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "owner": {
          "type": "string"
        },
        "commentsCounter": {
          "type": "number"
        },
        "createdAt": {
          "type": "string"
        },
        "updatedAt": {
          "type": "string"
        }
      }
    },
    "Comment": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "text": {
          "type": "string"
        },
        "lastSubComments": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "owner": {
                "type": "string"
              },
              "createdAt": {
                "type": "string"
              },
              "updatedAt": {
                "type": "string"
              },
              "text": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "lastTags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "lastTags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "owner": {
          "type": "string"
        },
        "createdAt": {
          "type": "string"
        },
        "updatedAt": {
          "type": "string"
        }
      }
    },
    "Invitation": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "from": {
          "$ref": "#/definitions/User"
        },
        "user": {
          "$ref": "#/definitions/User"
        },
        "code": {
          "type": "string"
        },
        "createdAt": {
          "type": "string"
        },
        "updatedAt": {
          "type": "string"
        }
      }
    },
    "LoginHistory": {
      "type": "object",
      "properties": {
        "ipAddress": {
          "type": "string"
        },
        "date": {
          "type": "string"
        },
        "userAgent": {
          "type": "string"
        }
      }
    },
    "ActiveSession": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "ipAddress": {
          "type": "string"
        },
        "userAgent": {
          "type": "string"
        },
        "createdAt": {
          "type": "string"
        }
      }
    },
    "JWT": {
      "type": "object",
      "properties": {
        "accessToken": {
          "type": "string"
        },
        "refreshToken": {
          "type": "string"
        }
      }
    },
    "ValidationErrorProperty": {
      "type": "object",
      "properties": {
        "message": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "path": {
          "type": "string"
        }
      }
    },
    "ValidationError": {
      "type": "object",
      "properties": {
        "message": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "properties": {
          "$ref": "#/definitions/ValidationErrorProperty"
        },
        "kind": {
          "type": "string"
        },
        "path": {
          "type": "string"
        }
      }
    }
  },
  "securityDefinitions": {
    "user_auth": {
      "type": "apiKey",
      "in": "header",
      "name": "x-access-token"
    }
  }
}