{
  "openapi": "3.0.4",
  "info": {
    "title": "RMuseum API",
    "description": "RMuseum API",
    "termsOfService": "https://ganjoor.net/contact",
    "contact": {
      "name": "Ganjoor",
      "url": "https://ganjoor.net",
      "email": "ganjoor@ganjoor.net"
    },
    "version": "v1"
  },
  "paths": {
    "/api/users/login": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "login",
        "requestBody": {
          "description": "loginViewModel",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoggedOnUserModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/relogin/{sessionId}": {
      "put": {
        "tags": [
          "AppUser"
        ],
        "summary": "renew an expired session",
        "parameters": [
          {
            "name": "sessionId",
            "in": "path",
            "description": "user session id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoggedOnUserModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/delsession": {
      "delete": {
        "tags": [
          "AppUser"
        ],
        "summary": "Logout user (users need user:delothersession to logout other users) (Auth)",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "sessionId",
            "in": "query",
            "description": "User Session Id",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/checkmysession": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "Check if my session is valid (Auth)",
        "parameters": [
          {
            "name": "sessionId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/securableitems": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "get logged on user securableitems (permissions) (Auth)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SecurableItem"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "Paginated Users Information (if user does not have user:view permission list only contains him/her information) (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "filterByEmail",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filterByNickName",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicRAppUser"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "add a new user (if you are trying to add an admin user you yourself should be admin) (Auth policies: user:add)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRAppUser"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRAppUser"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRAppUser"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterRAppUser"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "user:add"
            ]
          }
        ]
      }
    },
    "/api/users/{id}": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "returns user information (if user does not have user:view permission trying to view other users' information fails with a forbidden error) (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "user id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicRAppUser"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "AppUser"
        ],
        "summary": "update existing user (if you are trying to update an admin user you yourself should be admin) (if user does not have user:modify permission trying to modify other users' information fails with a forbidden error) (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "user id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "existingUserInfo.id could be passed empty and it is ignored completely, if password is sent empty it does not has effect",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRAppUser"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRAppUser"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRAppUser"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "AppUser"
        ],
        "summary": "delete user (only admin users can delete other admin users, a user cannot delete himself/herself) (Auth policies: user:delete)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "user id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "user:delete"
            ]
          }
        ]
      }
    },
    "/api/users/setmypassword": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "set my password (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPasswordModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPasswordModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SetPasswordModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/selfdelete/start": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "start user self delete process (send a verification email to user) (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SelfDeleteViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SelfDeleteViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SelfDeleteViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/selfdelete/finalize/{code}": {
      "delete": {
        "tags": [
          "AppUser"
        ],
        "summary": "finalize user self delete (Auth)",
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/isadmin": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "Checks if user is admin (Auth)",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/sessions": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "View User Sessions (user needs user:sessions permission to view other users sessions) (Auth)",
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicRUserSession"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/image": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "Set User Image (via FormData, specifying userId as 'id' in formData ) - if Files.count is 0 image would be removed - (users need user:modify to change other users image) (Auth)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "Get User Image (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/base64image": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "Get User Image in base 64 (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/{id}/roles": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "returns user roles (if user does not have user:view permission trying to view other users' information fails with a forbidden error) (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "user id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/{id}/roles/{role}": {
      "delete": {
        "tags": [
          "AppUser"
        ],
        "summary": "remove user from role (Auth policies: user:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "user id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "role",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "user:modify"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "add user to role (Auth policies: user:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "user id",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "role",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "user:modify"
            ]
          }
        ]
      }
    },
    "/api/users/captchaimage": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "get a captcha image for signup or forgot password",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/signup": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "signup",
        "requestBody": {
          "description": "signUpViewModel",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnverifiedSignUpViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UnverifiedSignUpViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UnverifiedSignUpViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/verify": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "verify signup / forgot password / self delete user",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/RVerifyQueueType"
            }
          },
          {
            "name": "secret",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/users/finalizesignup": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "finalize signup process",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VerifiedSignUpViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VerifiedSignUpViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VerifiedSignUpViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/users/forgotpassword": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "start forgot password process by email",
        "requestBody": {
          "description": "signUpViewModel",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnverifiedSignUpViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UnverifiedSignUpViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UnverifiedSignUpViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/users/email/request/change/{newmail}": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": " (Auth)",
        "parameters": [
          {
            "name": "newmail",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeEmailViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeEmailViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeEmailViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/email/change/{newmail}/{secret}": {
      "put": {
        "tags": [
          "AppUser"
        ],
        "summary": " (Auth)",
        "parameters": [
          {
            "name": "newmail",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "secret",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/users/resetpassword": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "reset password",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/users/behaviour/log": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "log user bad behaviuor (Auth policies: user:administer)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCauseViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCauseViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserCauseViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserBehaviourLog"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "user:administer"
            ]
          }
        ]
      }
    },
    "/api/users/behaviour/log/{userId}": {
      "get": {
        "tags": [
          "AppUser"
        ],
        "summary": "get user behaviour logs (Auth policies: user:administer)",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserBehaviourLog"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "user:administer"
            ]
          }
        ]
      }
    },
    "/api/users/kickout": {
      "post": {
        "tags": [
          "AppUser"
        ],
        "summary": "kick out a user (Auth policies: user:administer)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCauseViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCauseViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserCauseViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserBehaviourLog"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "user:administer"
            ]
          }
        ]
      }
    },
    "/api/artifacts/{artifactUrl}/{itemUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "gets specified publish artifact item info (including images + attributes)",
        "parameters": [
          {
            "name": "artifactUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "itemUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactItemRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/artifacts": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get all published artifacts (including CoverImage info but not items info)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RArtifactMasterRecord"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "Add new artifact (multipart/form-data)\r\n\r\n\r\n    const data = new FormData();\r\n    data.append('name', 'تست');\r\n    data.append('description', '');\r\n    data.append('srcUrl', '');\r\n    data.append('picTitle', 'تست');\r\n    data.append('picDescription', '');\r\n    data.append('file', this.file);\r\n    data.append('picSrcUrl', ''); (Auth policies: artifact:add)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecord"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:add"
            ]
          }
        ]
      }
    },
    "/api/artifacts/secure": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get all artifacts visible by user (including CoverImage info but not items info) (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RArtifactMasterRecord"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/tagged/{tagUrl}/{valueUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "parameters": [
          {
            "name": "tagUrl",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "valueUrl",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RArtifactMasterRecord"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/{friendlyUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "gets specified publish artifact info (including CoverImage + images)",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/artifacts/limited/{friendlyUrl}/{count}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get specific artifact info with limited number of images",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "count",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 21
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/artifacts/itemsof/{id}/{start}/{count}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get artifact images according to start and count params",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "start",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 21
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/artifacts/{artifactId}": {
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "remove unpublished artifact having no notes and not bookmarked (Auth policies: artifact:delete)",
        "parameters": [
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:delete"
            ]
          }
        ]
      }
    },
    "/api/artifacts/{friendlyUrl}/filteritemsbytag/{tagFriendlyUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagFriendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/artifacts/{friendlyUrl}/filteritemsbytag/{tagFriendlyUrl}/{valueFriendlyUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagFriendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "valueFriendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/artifacts/secure/{friendlyUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "gets specified publish artifact info (including CoverImage + images) (Auth)",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/secure/limited/{friendlyUrl}/{count}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "gets specified publish artifact info (including CoverImage + images) (Auth)",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "count",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 21
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/secure/{friendlyUrl}/filteritemsbytag/{tagFriendlyUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag (Auth)",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagFriendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/secure/{friendlyUrl}/filteritemsbytag/{tagFriendlyUrl}/{valueFriendlyUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "gets specified publish artifact info (including CoverImage + images) where its items are filteted by tag (Auth)",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tagFriendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "valueFriendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactMasterRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/{id}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "edit artifactt master record (user should have additional permissions artifact:awaiting and artifact:publish to change status of artifact) (Auth policies: artifact:modify)",
        "description": "editing related collections such as images and attributed or complex properties such as CoverImage is ignored",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RArtifactMasterRecord"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RArtifactMasterRecord"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RArtifactMasterRecord"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:modify"
            ]
          }
        ]
      }
    },
    "/api/artifacts/{id}/cover": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "Set Artifact Cover Item Index (Auth policies: artifact:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            },
            "text/json": {
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:modify"
            ]
          }
        ]
      }
    },
    "/api/artifacts/tagbundle/{friendlyUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get tag bundle by frindly url",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RTagBundleViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/artifacts/tag": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "add new tag (Auth policies: tag:modify)",
        "requestBody": {
          "description": "only name is processed",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RTag"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "tag:modify"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get all tags",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RTag"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/tag/{friendlyUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RTag"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/tag/{tagid}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "edit tag (Auth policies: tag:modify)",
        "description": "editable fields are limited",
        "parameters": [
          {
            "name": "tagid",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "tag:modify"
            ]
          }
        ]
      }
    },
    "/api/artifacts/tag/move/{tagid}/in/{artifactId}/{upordown}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "changes order of tags based on their position in artifacts (Auth policies: tag:modify)",
        "parameters": [
          {
            "name": "tagId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "upordown",
            "in": "path",
            "description": "up / down",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "tag:modify"
            ]
          }
        ]
      }
    },
    "/api/artifacts/tag/move/{tagid}/in/item/{itemId}/{upordown}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "changes order of tags based on their position in artifact items (Auth policies: tag:modify)",
        "parameters": [
          {
            "name": "tagId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "upordown",
            "in": "path",
            "description": "up / down",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "tag:modify"
            ]
          }
        ]
      }
    },
    "/api/artifacts/tagbundle/{friendlyUrl}/{valueUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get tag value bundle by frindly url",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "valueUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactTagViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/artifacts/tagvalue/{tagId}/{friendlyUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get tag value by frindly url",
        "parameters": [
          {
            "name": "tagId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RTagValue"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/tagvalue/{artifactid}": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "add new tag value to artifact (Auth policies: artifact:edittag)",
        "parameters": [
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "only name is processed",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RTagValue"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:edittag"
            ]
          }
        ]
      }
    },
    "/api/artifacts/tagvalue/{artifactid}/{global}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "edit artifact attribute value (Auth policies: artifact:edittag)",
        "description": "editable fields are limited",
        "parameters": [
          {
            "name": "artifactid",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "global",
            "in": "query",
            "description": "apply on all same value tags",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RTagValue"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RTagValue"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RTagValue"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:edittag"
            ]
          }
        ]
      }
    },
    "/api/artifacts/tagvalue/{artifactId}/{tagValueId}": {
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "remove tag from artifact (Auth policies: artifact:edittag)",
        "parameters": [
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "tagValueId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:edittag"
            ]
          }
        ]
      }
    },
    "/api/artifacts/itemtagvalue/{itemId}": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "add new tag value to item (Auth policies: artifact:edittag)",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "only tag.id is processed",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RTag"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RTagValue"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:edittag"
            ]
          }
        ]
      }
    },
    "/api/artifacts/itemtagvalue/{itemId}/{global}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "edit item attribute value (Auth policies: artifact:edittag)",
        "description": "editable fields are limited",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "global",
            "in": "query",
            "description": "apply on all same value tags",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RTagValue"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RTagValue"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RTagValue"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:edittag"
            ]
          }
        ]
      }
    },
    "/api/artifacts/itemtagvalue/{itemId}/{tagValueId}": {
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "remove tag from item (Auth policies: artifact:edittag)",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "tagValueId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:edittag"
            ]
          }
        ]
      }
    },
    "/api/artifacts/tagvalue/{artifactid}/{tagId}/{valueId}/move/{upordown}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "changes order of tag values based on their position in an artifact (Auth policies: artifact:edittag)",
        "parameters": [
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "tagId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "valueId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "upordown",
            "in": "path",
            "description": "up / down",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:edittag"
            ]
          }
        ]
      }
    },
    "/api/artifacts/itemtagvalue/{itemId}/{tagId}/{valueId}/move/{upordown}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "changes order of tag values based on their position in an item (Auth policies: artifact:edittag)",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "tagId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "valueId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "upordown",
            "in": "path",
            "description": "up / down",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:edittag"
            ]
          }
        ]
      }
    },
    "/api/artifacts/item": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "update an artifact item info",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RArtifactItemRecord"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RArtifactItemRecord"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RArtifactItemRecord"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/artifacts/secure/{artifactUrl}/{itemUrl}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "gets specified publish artifact item info (including images + attributes) (Auth)",
        "parameters": [
          {
            "name": "artifactUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "itemUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactItemRecordViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/import": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "import from external resources (Auth policies: artifact:import)",
        "parameters": [
          {
            "name": "srcType",
            "in": "query",
            "description": "pdf/loc/princeton/harvard/qajarwomen/hathitrust/penn/cam/bl/folder/walters/cbl/append/iiif",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceNumber",
            "in": "query",
            "description": "119/foldername",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "friendlyUrl",
            "in": "query",
            "description": "golestan-baysonghori/artifact id",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourcePrefix",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skipUpload",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:import"
            ]
          }
        ]
      }
    },
    "/api/artifacts/keep-alive": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "keep alive (for import background service)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/retryimport": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "retry import (Auth policies: artifact:import)",
        "parameters": [
          {
            "name": "jobType",
            "in": "query",
            "description": "Job Type",
            "schema": {
              "$ref": "#/components/schemas/JobType"
            }
          },
          {
            "name": "skipUpload",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:import"
            ]
          }
        ]
      }
    },
    "/api/artifacts/reexamineimport": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "due to a bug in loc json outputs some artifacts with more than 1000 pages were downloaded incompletely (Auth policies: artifact:import)",
        "parameters": [
          {
            "name": "pass",
            "in": "query",
            "description": "123456",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skipUpload",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:import"
            ]
          }
        ]
      }
    },
    "/api/artifacts/jobs": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": " (Auth policies: artifact:add)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ImportJob"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:add"
            ]
          }
        ]
      }
    },
    "/api/artifacts/bookmark/{artifactId}": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "bookmark artifact (Auth)",
        "parameters": [
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserBookmark"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "artifact bookmarks info (Auth)",
        "parameters": [
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserBookmark"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/bookmark/item/{itemId}": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "bookmark item (Auth)",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserBookmark"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "item bookmarks info (Auth)",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserBookmark"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/bookmark/{bookmarkId}": {
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "item bookmarks info (Auth)",
        "parameters": [
          {
            "name": "bookmarkId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/fav/{artifactId}": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "fav artifact (Auth)",
        "parameters": [
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserBookmark"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/fav/item/{itemId}": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "fav item (Auth)",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserBookmark"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/bookmark": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "user bookmarks (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserBookmark"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/fav": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "user favorites (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserBookmarkViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/note": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "add note for artifact (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostUserNote"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PostUserNote"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PostUserNote"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserNoteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/note/item": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "add note for artifact item (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostUserNote"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PostUserNote"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PostUserNote"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserNoteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/note/{noteId}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "Edit User Notes (Auth)",
        "description": "a note can not be edited by a user other than its owner or another using having note:moderate permission",
        "parameters": [
          {
            "name": "noteId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "only htmlContent is processed",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostUserNote"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PostUserNote"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PostUserNote"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserNoteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "delete user notes (Auth)",
        "description": "1. a note can not be deleted by a user other than its owner or another using having note:moderate permission\r\n2. all notes which have refernce to deleting note (sent in reply to it) would be deleted irrelevant of their ownership",
        "parameters": [
          {
            "name": "noteId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uuid"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/note/private/{artifactId}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get private notes for artifact (Auth)",
        "parameters": [
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNoteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/note/{artifactId}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get private notes for artifact",
        "parameters": [
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNoteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/note/item/private/{itemId}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get private notes for artifact item (Auth)",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNoteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/note/item/{itemId}": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get public notes for artifact item",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNoteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/note/public": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "user public notes (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNoteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/note/private": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "user public notes (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNoteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/note/all": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "all users public notes",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNoteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/note/report": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "report a public note (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostRUserNoteAbuseReportViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PostRUserNoteAbuseReportViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PostRUserNoteAbuseReportViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/notes/reported": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "Get a list of reported notes (Auth policies: note:moderate)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNoteAbuseReportViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "note:moderate"
            ]
          }
        ]
      }
    },
    "/api/artifacts/note/report/{id}": {
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "delete a report for abuse in public user notes (Auth policies: note:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "note:moderate"
            ]
          }
        ]
      }
    },
    "/api/artifacts/note/reported/moderate/{reportid}": {
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "delete a reported user note (accept the complaint) (Auth policies: note:moderate)",
        "parameters": [
          {
            "name": "reportid",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "note:moderate"
            ]
          }
        ]
      }
    },
    "/api/artifacts/ganjoor": {
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "suggest ganjoor link (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkSuggestion"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkSuggestion"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LinkSuggestion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorLinkViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get suggested ganjoor links (Auth)",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/ReviewResult"
            }
          },
          {
            "name": "notSynced",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorLinkViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "remove ganjoor link (Auth policies: artifact:ganjoor)",
        "parameters": [
          {
            "name": "linkId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "removeItemLink",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:ganjoor"
            ]
          }
        ]
      }
    },
    "/api/artifacts/ganjoor/nextunsychedimage": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "finds next unsynchronized suggested link with an aleady synched one from the artificat if exists,\r\nreturn value might be null or an array with length  1 or 2 (has paging-headers) (Auth)",
        "description": "has paging-headers",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorLinkViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/artifacts/ganjoor/review/{linkId}/{result}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "review suggested ganjoor link (Auth policies: artifact:ganjoor)",
        "parameters": [
          {
            "name": "linkId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "result",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ReviewResult"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:ganjoor"
            ]
          }
        ]
      }
    },
    "/api/artifacts/ganjoor/sync/{linkId}/{displayOnPage}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "mark suggested ganjoor link as synchronized (Auth policies: artifact:ganjoor)",
        "parameters": [
          {
            "name": "linkId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "displayOnPage",
            "in": "path",
            "description": "display ogn page",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:ganjoor"
            ]
          }
        ]
      }
    },
    "/api/artifacts/ganjoor/toc": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "toc / temporary one time api / to be removed (Auth policies: artifact:ganjoor)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:ganjoor"
            ]
          }
        ]
      }
    },
    "/api/artifacts/pinterest": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "get suggested pinterest links (Auth)",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/ReviewResult"
            }
          },
          {
            "name": "notSynced",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PinterestLinkViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Artifact"
        ],
        "summary": "suggest pinterest link for ganjoor (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PinterestSuggestion"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PinterestSuggestion"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PinterestSuggestion"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PinterestLinkViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "remove pinterest link (Auth policies: artifact:ganjoor)",
        "parameters": [
          {
            "name": "linkId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:ganjoor"
            ]
          }
        ]
      }
    },
    "/api/artifacts/pinterest/review/{linkId}/{result}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "review suggested ganjoor pinterest link (Auth policies: artifact:ganjoor)",
        "parameters": [
          {
            "name": "linkId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "altText",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "result",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/ReviewResult"
            }
          },
          {
            "name": "reviewDesc",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "imageUrl",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:ganjoor"
            ]
          }
        ]
      }
    },
    "/api/artifacts/pinterest/sync/{linkId}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "mark suggested pinterest ganjoor link as synchronized (Auth policies: artifact:ganjoor)",
        "parameters": [
          {
            "name": "linkId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:ganjoor"
            ]
          }
        ]
      }
    },
    "/api/artifacts/ganjoorlink/fillsource": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "start filling GanjoorLink table OriginalSource values (Auth policies: artifact:ganjoor)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:ganjoor"
            ]
          }
        ]
      }
    },
    "/api/artifacts/originalimages/remove": {
      "delete": {
        "tags": [
          "Artifact"
        ],
        "summary": "start removing original images (Auth policies: artifact:import)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:import"
            ]
          }
        ]
      }
    },
    "/api/artifacts/search": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "search artifacts",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "term",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RArtifactMasterRecord"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/search/items": {
      "get": {
        "tags": [
          "Artifact"
        ],
        "summary": "search artifact items",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "term",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RArtifactItemRecordViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/artifacts/ganjoorlink/settextorigin/{ganjoorCatId}/{artifactId}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "start setting an artifact items as a category poems text original source (Auth policies: artifact:ganjoor)",
        "parameters": [
          {
            "name": "ganjoorCatId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "artifactId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:ganjoor"
            ]
          }
        ]
      }
    },
    "/api/artifacts/upload/external/{friendlyUrl}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "upload artifact to external server (Auth policies: artifact:modify)",
        "parameters": [
          {
            "name": "friendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "skipUpload",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:modify"
            ]
          }
        ]
      }
    },
    "/api/artifacts/ai/create/images": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "create images for ganjoor (Auth policies: artifact:modify)",
        "parameters": [
          {
            "name": "startPoetId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:modify"
            ]
          }
        ]
      }
    },
    "/api/artifacts/ai/create/images/offline": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "create images for ganjoor - offline (Auth policies: artifact:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:modify"
            ]
          }
        ]
      }
    },
    "/api/artifacts/item/{artifactFriendlyUrl}": {
      "put": {
        "tags": [
          "Artifact"
        ],
        "summary": "add a new item to an artifact (Auth policies: artifact:modify)",
        "parameters": [
          {
            "name": "artifactFriendlyUrl",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "jpeg": {
                    "type": "string",
                    "description": "",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "jpeg": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RArtifactItemRecord"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:modify"
            ]
          }
        ]
      }
    },
    "/api/auditlogs": {
      "get": {
        "tags": [
          "AuditLog"
        ],
        "summary": "get all  audit logs ordered by time (Auth policies: audit:view)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userName",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderByTimeDescending",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/REvent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "audit:view"
            ]
          }
        ]
      }
    },
    "/api/contributions/{userId}": {
      "get": {
        "tags": [
          "ContributionStats"
        ],
        "summary": "user contribution",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserContributionsViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/contributions/{dataType}/daily": {
      "get": {
        "tags": [
          "ContributionStats"
        ],
        "summary": "daily stats",
        "parameters": [
          {
            "name": "dataType",
            "in": "path",
            "description": "poemcorrections\r\nsectioncorrections\r\ncatcorrections\r\nsuggestedsongs\r\nquoteds\r\ndiscussions\r\nrecitations\r\nmuseumlinks\r\npinterestlinks\r\npoetspeclines\r\npoetpix\r\nusernotes,\r\nusers",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupedByDateViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/contributions/{dataType}/by/user": {
      "get": {
        "tags": [
          "ContributionStats"
        ],
        "summary": "datatype grouped by user",
        "parameters": [
          {
            "name": "dataType",
            "in": "path",
            "description": "poemcorrections\r\nsectioncorrections\r\ncatcorrections\r\nsuggestedsongs\r\nquoteds\r\ndiscussions\r\nrecitations\r\nmuseumlinks\r\npinterestlinks\r\npoetspeclines\r\npoetpix\r\nusernotes",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "day",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GroupedByUserViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/contributions/{dataType}/summary": {
      "get": {
        "tags": [
          "ContributionStats"
        ],
        "summary": "summed up stats of data",
        "parameters": [
          {
            "name": "dataType",
            "in": "path",
            "description": "poemcorrections\r\nsectioncorrections\r\ncatcorrections\r\nsuggestedsongs\r\nquoteds\r\ndiscussions\r\nrecitations\r\nmuseumlinks\r\npinterestlinks\r\npoetspeclines\r\npoetpix\r\nusernotes\r\nusers (Days and UserIds are invalid)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SummedUpViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/donations": {
      "get": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "returns all donations",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorDonationViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "add donation + regenerate donations page (Auth policies: ganjoor:donations)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorDonationViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorDonationViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorDonationViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorDonationViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:donations"
            ]
          }
        ]
      }
    },
    "/api/donations/{id}": {
      "get": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "donation by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorDonationViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "update donation date and donorname + regenerate donations page (Auth policies: ganjoor:donations)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDateDescriptionViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDateDescriptionViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDateDescriptionViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:donations"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "delete donation + regenerate donations page (Auth policies: ganjoor:donations)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:donations"
            ]
          }
        ]
      }
    },
    "/api/donations/expense": {
      "get": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "returns all expenses",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorExpense"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "add expense + regenerate donations page (Auth policies: ganjoor:donations)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorExpense"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorExpense"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorExpense"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorDonationViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:donations"
            ]
          }
        ]
      }
    },
    "/api/donations/expense/{id}": {
      "get": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "expense by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorExpense"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "update expense date and description + regenerate donations page (Auth policies: ganjoor:donations)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDateDescriptionViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDateDescriptionViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDateDescriptionViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:donations"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "delete expense (Auth policies: ganjoor:donations)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:donations"
            ]
          }
        ]
      }
    },
    "/api/donations/onetimeimport": {
      "post": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "one time import (Auth policies: ganjoor:donations)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:donations"
            ]
          }
        ]
      }
    },
    "/api/donations/page": {
      "put": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "regenerate donations page (Auth policies: ganjoor:donations)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:donations"
            ]
          }
        ]
      }
    },
    "/api/donations/accountinfo/visible": {
      "get": {
        "tags": [
          "DonationAccounting"
        ],
        "summary": "is account info settings is on or off (for deciding to regenerate donations page based on it) (Auth policies: ganjoor:donations)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:donations"
            ]
          }
        ]
      }
    },
    "/api/ftp": {
      "get": {
        "tags": [
          "ExternalFTP"
        ],
        "summary": "queued ftp uploads (Auth policies: ftp:moderate)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QueuedFTPUpload"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ftp:moderate"
            ]
          }
        ]
      }
    },
    "/api/ftp/start": {
      "post": {
        "tags": [
          "ExternalFTP"
        ],
        "summary": "process ftp queue (Auth policies: ftp:moderate)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ftp:moderate"
            ]
          }
        ]
      }
    },
    "/api/ftp/reset": {
      "post": {
        "tags": [
          "ExternalFTP"
        ],
        "summary": "reset ftp queue (Auth policies: ftp:moderate)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ftp:moderate"
            ]
          }
        ]
      }
    },
    "/api/faq/cat": {
      "get": {
        "tags": [
          "FAQ"
        ],
        "summary": "get published categories",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FAQCategory"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "FAQ"
        ],
        "summary": "add a new faq category (Auth policies: faq:moderate)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FAQCategory"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FAQCategory"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FAQCategory"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQCategory"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "FAQ"
        ],
        "summary": "update an existing faq category (Auth policies: faq:moderate)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FAQCategory"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FAQCategory"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FAQCategory"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQCategory"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      }
    },
    "/api/faq/cat/secure": {
      "get": {
        "tags": [
          "FAQ"
        ],
        "summary": "get all categories (Auth policies: faq:moderate)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FAQCategory"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      }
    },
    "/api/faq/cat/secure/{id}": {
      "get": {
        "tags": [
          "FAQ"
        ],
        "summary": "get category by id (Auth policies: faq:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQCategory"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      }
    },
    "/api/faq/cat/{id}": {
      "delete": {
        "tags": [
          "FAQ"
        ],
        "summary": "delete a faq category (Auth policies: faq:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      }
    },
    "/api/faq/pinned": {
      "get": {
        "tags": [
          "FAQ"
        ],
        "summary": "get published pinned items",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FAQCategory"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/faq/cat/items": {
      "get": {
        "tags": [
          "FAQ"
        ],
        "summary": "get published category items",
        "parameters": [
          {
            "name": "catId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FAQItem"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/faq/cat/items/secure": {
      "get": {
        "tags": [
          "FAQ"
        ],
        "summary": "get all category items (Auth policies: faq:moderate)",
        "parameters": [
          {
            "name": "catId",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FAQItem"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      }
    },
    "/api/faq/secure/{id}": {
      "get": {
        "tags": [
          "FAQ"
        ],
        "summary": "get item by id (Auth policies: faq:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQItem"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      }
    },
    "/api/faq/{id}": {
      "get": {
        "tags": [
          "FAQ"
        ],
        "summary": "get published item by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQItem"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "FAQ"
        ],
        "summary": "delete a faq item (Auth policies: faq:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      }
    },
    "/api/faq": {
      "post": {
        "tags": [
          "FAQ"
        ],
        "summary": "add a new faq item (Auth policies: faq:moderate)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FAQItem"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FAQItem"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FAQItem"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQCategory"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "FAQ"
        ],
        "summary": "update an existing faq item (Auth policies: faq:moderate)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FAQItem"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/FAQItem"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/FAQItem"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQCategory"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "faq:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poets": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of published poets without their biography",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoetViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/centuries": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "gets list of poets grouped by centuries (first one is the pinned ones)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCenturyViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poets/secure": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of all poets (including unpublished ones) with their bio (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoetViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poet/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "poet by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "catPoems",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      },
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "update poet info (except for image) (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "starts deleting poet job\r\n` (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poet": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "poet by url",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      },
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "create new poet (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/periods": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "regenerate half centuries (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poet/image/{url}.png": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poet image with png ext",
        "parameters": [
          {
            "name": "url",
            "in": "path",
            "description": "sample: hafez",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poet/image/{url}.gif": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poet image",
        "parameters": [
          {
            "name": "url",
            "in": "path",
            "description": "sample: hafez",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "nocache",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poet/image/{id}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "set poet image (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "poet image",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "cat by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "poems",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "mainSections",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      },
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete a category (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPageCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "cat by full url",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "poems",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "mainSections",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/cat/extra/{id}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "set category extra info (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorCatViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/generatemissingbookcovers": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "generate missing book covers (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/books": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "list of books",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCatViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/cat/recaptionpoems/{id}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "batch rename cat poems (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorBatchNamingModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorBatchNamingModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorBatchNamingModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPageCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/reslugpoems/{id}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "batch resulg category poems (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/startassigningrhymes/{id}/{retag}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": " (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "retag",
            "in": "path",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/language/{id}/{language}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "set category poems language tag (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "language",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/poemformat/{id}/{poemformat}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "set category poems language tag (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "poemformat",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/GanjoorPoemFormat"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poemformats/fillmissing": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "fill missing poem formats (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/startassigningrhythms/{id}/{retag}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start assigning poem rhythms (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "retag",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "rhythm",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/startfindingmissingrhythms": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "Start Finding Missing Rhythms (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "onlyPoemsWithRhymes",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "poemsNum",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1000
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/toc/{id}/{options}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "generate category toc (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "options",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/GanjoorTOC"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "directly insert generated TOC (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "options",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/GanjoorTOC"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/subcats/startgentoc/{id}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start generating sub cats TOC (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "ganjoorTOC",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/GanjoorTOC"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/toc/regen": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "regenerate TOCs (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/page": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "page by url",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "catPoems",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPageCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      },
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "add new page (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPage"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPage"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPage"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/page/{id}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "modify page (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorModifyPageViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorModifyPageViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorModifyPageViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPageCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete page (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPageCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/adminedit/{id}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "modify poem => only these fields: NoIndex, RedirectFromFullUrl, MixedModeOrder (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorModifyPageViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorModifyPageViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorModifyPageViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPageCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/page/cache/{id}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "clean cache by id (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPageCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/page/oldversions/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "older versions of a page (modifications history except for current version) (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPageSnapshotSummaryViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/oldversion/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get old version of page (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorModifyPageViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/pageurl": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "page url by id",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/redirecturl": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get redirect url for a url",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/poem/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poem by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "catInfo",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "catPoems",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "rhymes",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "recitations",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "images",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "songs",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "comments",
            "in": "query",
            "description": "not implemented yet",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "verseDetails",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "navigation",
            "in": "query",
            "description": "next/previous",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "relatedpoems",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      },
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete a poem (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPageCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/{id}/verses": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poem verses by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "coupletIndex",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": -1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorVerseViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/poem": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poem by url",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "catInfo",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "catPoems",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "rhymes",
            "in": "query",
            "description": "not implemented yet",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "recitations",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "images",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "songs",
            "in": "query",
            "description": "not implemented yet",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "comments",
            "in": "query",
            "description": "not implemented yet",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "verseDetails",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "navigation",
            "in": "query",
            "description": "next/previous",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/poem/{id}/recitations": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poem recitations  (PlainText/HtmlText are intentionally empty)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicRecitationViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poem/{id}/recitations/upvotes": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get user upvoted recitations of a poem (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "format": "int32"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/{id}/images": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poem images  (PlainText/HtmlText are intentionally empty)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PoemRelatedImage"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poem/{id}/songs": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poem songs",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "approved",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "trackType",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/PoemMusicTrackType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PoemMusicTrackViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poem/{id}/comments": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "Get Poem Comments",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "coupletIndex",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCommentSummaryViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/section/{poemId}/{sectionIndex}/related": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "Get Section Related ones",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "sectionIndex",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "itemsCount",
            "in": "query",
            "description": "zero or less than it means all",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCachedRelatedSection"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/section/analyserhyme/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "find poem section rhyming letters",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjooRhymeAnalysisResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/section/{poemId}/{sectionIndex}/{convertVerses}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete a poem section (section should not be linked to a poem verse of types other than paragraphs or comments) (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "sectionIndex",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "convertVerses",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/correction": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "send poem corrections (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/correction/{id}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete unreviewed user corrections for a poem (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/correction/last/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "returns last unreviewed correction from the user for a poem (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/corrections/mine": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of user suggested corrections (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/corrections/all": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of all suggested corrections (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "userId",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/{id}/corrections/effective": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "effective corrections for poem",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/correction/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get correction by id (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/correction/next": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get next unreviewed correction (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "onlyUserCorrections",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/correction/moderate": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "moderate poem correction (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/break": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "break a poem from a verse forward (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemVerseOrder"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemVerseOrder"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PoemVerseOrder"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/song": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "suggest song for poem (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoemMusicTrackViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get next unreviewed song (Auth)",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "onlyMine",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoemMusicTrackViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "review song (Auth policies: ganjoor:songrevu)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoemMusicTrackViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:songrevu"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete a poem song by id (Auth policies: ganjoor:songrevu)",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:songrevu"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/song/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get song by id (Auth policies: ganjoor:songrevu)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoemMusicTrackViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:songrevu"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/song/user/stats/{userId}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "history of suggested songs by a user (Auth policies: ganjoor:songrevu)",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserSongSuggestionsHistory"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:songrevu"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/song/mysuggestions": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "user suggested songs (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PoemMusicTrackViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/song/update": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "modify a published song (Auth policies: ganjoor:songrevu)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoemMusicTrackViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:songrevu"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/song/add": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "directly insert a poem related song (Auth policies: ganjoor:songadd)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PoemMusicTrackViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoemMusicTrackViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:songadd"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/hafez/faal": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get a random poem from hafez",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poem/random": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get a random poem from a poet (c.ganjoor.net replacement), 0 means random poet, \r\nحافظ (2)، خیام (3)، ابوسعید ابوالخیر (26)، صائب (22)، سعدی (7)، باباطاهر (28)، مولوی (5)، اوحدی (19)، خواجو (20)، شهریار (35)، عراقی (21)، فروغی بسطامی (32)، سلمان ساوجی (40)، محتشم کاشانی (29)، امیرخسرو دهلوی (34)، سیف فرغانی (31)، عبید زاکانی (33)، هاتف اصفهانی (25) یا رهی معیری (41)",
        "parameters": [
          {
            "name": "poetId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/comments/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get a single comment information (only published comments, replies are not included)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorCommentFullViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/comments": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get recent comments",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "filterUserId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "term",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCommentFullViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/comments/mine": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get logged on users recent comments (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCommentFullViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/comments/awaiting": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get awaiting comments (Auth policies: ganjoor:moderate)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCommentFullViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/comment/awaiting/delete": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete awaiting comment (Auth policies: ganjoor:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/comment/awaiting/publish": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "publish awaiting comment (Auth policies: ganjoor:moderate)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            },
            "text/json": {
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/comment": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "post new comment (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorCommentPostViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorCommentPostViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorCommentPostViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorCommentSummaryViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete user's own comment (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/comment/{id}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "edit user's own comment (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/json": {
              "schema": {
                "type": "string"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/comment/{id}/editlink/{coupletIndex}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "link or unlink user's own comment to a coupletIndex (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "coupletIndex",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/comment/report": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "report a comment (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPostReportCommentViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPostReportCommentViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPostReportCommentViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/comment/report/{id}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete a report (without deleting corresponding comment) (Auth policies: ganjoor:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/comments/reported": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of reported comments (Auth policies: ganjoor:moderate)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCommentAbuseReportViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/comment/reported/moderate/{reportid}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete reported other users comment (Auth policies: ganjoor:moderate)",
        "parameters": [
          {
            "name": "reportid",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/sqlite/import/{poetId}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "imports data from ganjoor SQLite database (form file) (Auth policies: ganjoor:import)",
        "parameters": [
          {
            "name": "poetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/sqlite/import/cat/{catId}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "import category data from ganjoor SQLite database (form file) (Auth policies: ganjoor:import)",
        "parameters": [
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/sqlite/update/{poetId}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "Apply corrections from sqlite (Auth policies: ganjoor:import)",
        "parameters": [
          {
            "name": "poetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "note",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/sqlite/export/{poetId}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "export a poet to sqlite database (Auth policies: ganjoor:import)",
        "parameters": [
          {
            "name": "poetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/sqlite/batchexport": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start exporting all poets (Auth policies: ganjoor:songrevu)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:songrevu"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/user/profile/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "Get user public profile",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorUserPublicProfile"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/poems/similar": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "Get Similar Poems accroding to prosody and rhyme informations",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "metre",
            "in": "query",
            "description": "cannot be empty",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rhyme",
            "in": "query",
            "description": "can be empty",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "poetId",
            "in": "query",
            "description": "send 0 for all",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "catId",
            "in": "query",
            "description": "send 0 for all",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "language",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": "fa-IR"
            }
          },
          {
            "name": "format",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/GanjoorPoemFormat"
            }
          },
          {
            "name": "term",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "coupletCountsFrom",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "coupletCountsTo",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "e",
            "in": "query",
            "description": "",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemCompleteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/sections/tagged/language": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "language tagged poem sections",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "language",
            "in": "query",
            "description": "fa-IR, ar, ...",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "poetId",
            "in": "query",
            "description": "0 means all poets",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemCompleteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poems/search": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "search",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "term",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "poetId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "catId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "e",
            "in": "query",
            "description": "",
            "schema": {
              "type": "array",
              "items": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemCompleteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/rhythms": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "returns ganjoor metre list ordered by rhythm",
        "parameters": [
          {
            "name": "sortOnVerseCount",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorMetre"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poem/analysisrhyme/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "find poem rhyme",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjooRhymeAnalysisResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poem/analysisrhythm/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "analysis poem to find its prosody information",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/healthcheck": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "examine site pages for broken links (Auth policies: ganjoor:import)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/fixlongurlsincomments": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "examine comments for long links (Auth policies: ganjoor:import)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/fillpoemscoupletindices": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start filling poems couplet indices (Auth policies: ganjoor:import)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/refillcoupletindices/{poemId}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "refill couplet indices for poem (Auth policies: ganjoor:import)",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/fillsectioncoupletcounts": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "fill section couplet counts (Auth policies: ganjoor:import)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/maintenance/regenfulltitles": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "regenerate poem full titles to fix an old bug (Auth policies: ganjoor:import)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/singlecouplets/startfindingrhymes": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start finding rhymes (Auth policies: ganjoor:import)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/regenplaintext/{catId}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "separate verses in poem.PlainText with  Environment.NewLine instead of SPACE (Auth policies: ganjoor:import)",
        "parameters": [
          {
            "name": "catId",
            "in": "path",
            "description": "if it is 0 it is ignored",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/sitemap": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start building sitemap (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/sitemap/tajik": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "build tj.ganjoor.net site map (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/rebuild/stats": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "regenerate stats page (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/rebuild/mundex": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start updating mundex page (Auth policies: ganjoor:songrevu)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:songrevu"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/bookmark/switch/{poemId}/{coupletIndex}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "switch bookmark (Auth)",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "coupletIndex",
            "in": "path",
            "description": "if you send a negative number it means you are trying to bookmark a comment",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/bookmark/switch/ret/{poemId}/{coupletIndex}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "switch bookmark and return bookmark id ('0' for switching off a bookmark) (Auth)",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "coupletIndex",
            "in": "path",
            "description": "if you send a negative number it means you are trying to bookmark a comment",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/bookmark/{poemId}/{coupletIndex}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "Bookmark couplet if it is not (Auth)",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "coupletIndex",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "is the poem couplet is bookmarked by user (Auth)",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "coupletIndex",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/bookmark/{bookmarkId}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete bookmark (Auth)",
        "parameters": [
          {
            "name": "bookmarkId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "modify bookmark private note (Auth)",
        "parameters": [
          {
            "name": "bookmarkId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/json": {
              "schema": {
                "type": "string"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/bookmark/{poemId}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poem user bookmarks (only Id, CoupletIndex and DateTime are valid in the output view model) (Auth)",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorUserBookmarkViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/bookmark": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "user bookmarks (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "a phrase to be searched through user private notes",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorUserBookmarkViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/generaterelatedsectionsinfo": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start generating related sections info for wholepoem sections (Auth policies: ganjoor:import)",
        "parameters": [
          {
            "name": "regenerate",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/probablemetre/next": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get next ganjoor poem probable metre",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemSection"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/probablemetre/list": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get a list of ganjoor poems probable metres",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemSection"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/probablemetre/save/{id}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "save ganjoor poem probable metre (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/json": {
              "schema": {
                "type": "string"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/probablemetre/dismiss/{id}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "dismiss ganjoor poem probable metre (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/duplicates/{srcCatId}/{destCatId}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "Finding Category Poems Duplicates (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "srcCatId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "destCatId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "hardTry",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/duplicates/manual/{srcCatId}/{srcPoemId}/{destPoemId}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "manually add a duplicate for a poems (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "srcCatId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "srcPoemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "destPoemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/duplicates/{id}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete a duplicate (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/duplicates/{catId}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "list of category saved duplicated poems (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorDuplicateViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/duplicates/finish/{srcCatId}/{destCatId}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start removing category duplicates (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "srcCatId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "destCatId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/couplet/{poemId}/{coupletIndex}/sections": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get couplet sections",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "coupletIndex",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/GanjoorPoemSection"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/sections/{poemId}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get all poem sections",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/GanjoorPoemSection"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/poem/{id}/sections/regenerate": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "regenerate poem sections (dangerous: wipes out existing data) (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/sections/updaterelated": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "update related sections manually (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "metreId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "rhyme",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/{id}/regenrelatedsections": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "regenerate category related sections (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "category id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/section/{sectionId}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get a specific poem section",
        "parameters": [
          {
            "name": "sectionId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemSection"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/ontime/fixbandcouplets": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "start band couplets fix (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/section/correction/last/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "returns last unreviewed correction from the user for a section (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "section id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/section/correction": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "send a correction for a section (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/section/moderate": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "moderate poem section correction (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/section/correction/{id}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete unreviewed user corrections for a poem section (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get section correction by id (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/section/correction/next": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get next unreviewed correction for poem sections (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "deletedUserSections",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/section/corrections/mine": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of user suggested corrections (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/section/corrections/all": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of all suggested corrections (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/section/{id}/corrections/effective": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "effective corrections for section",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemSectionCorrectionViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/prosody/transfer/{srcId}/{destId}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "transfer poems and sections from a meter to another one and delete the source meter (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "srcId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "destId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/{id}/geotag": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get poem tags ordered by LunarDateTotalNumber then by Id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PoemGeoDateTag"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/poem/geotag": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "add poem geo tag (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemGeoDateTag"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemGeoDateTag"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PoemGeoDateTag"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoemGeoDateTag"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "update poem tag (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemGeoDateTag"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PoemGeoDateTag"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PoemGeoDateTag"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/geotag/{id}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete poem tag (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/{id}/geotag": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get a categoty poem tags",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PoemGeoDateTag"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/naskban": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "synchronize https:://naskban.ir links (logs in and then out to naskban.ir using auth info) (Auth policies: ganjoor:moderate)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": " (Auth policies: ganjoor:moderate)",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete poem related naskban images by url (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "naskbanUrl",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/naskban/humanreviewed/{naskbanBookId}/{catId}/{humanReviewed}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "mark naskban links for poems of a categiory and its children as human reviewed (Auth policies: ganjoor:moderate)",
        "parameters": [
          {
            "name": "naskbanBookId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "humanReviewed",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/naskban/textoriginal/{naskbanBookId}/{catId}/{textOriginal}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "mark naskban links a text original for a category (Auth policies: ganjoor:moderate)",
        "parameters": [
          {
            "name": "naskbanBookId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "textOriginal",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/naskban/import/matchingbooks": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "import naskban ganjoor matchings (Auth policies: ganjoor:moderate)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/naskban/import/poetbooks/{poetId}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "discover poet naskban paper sources (Auth policies: ganjoor:moderate)",
        "parameters": [
          {
            "name": "poetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LoginViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/papersources/import/{poetid}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "import paper sources from museum (Auth policies: ganjoor:moderate)",
        "parameters": [
          {
            "name": "poetid",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:moderate"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/{id}/papersources": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get paper sources for a catgeory",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPaperSource"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/cat/{id}/images": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get category poem related images",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PoemRelatedImageEx"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/quoted/extract": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "extracting quoted poems (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/quoted/pages/generate": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "regenerate related poems pages (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/quoted/pages/generate/{poetId}/{relatedPoetId}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "regenerate two poets similar page (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "poetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "relatedPoetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/quoted/discover/{poetId}/{relatedPoetId}/{breakOnFirstSimilar}/{relatedSubCatId}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "discover related poems (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "poetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "relatedPoetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "breakOnFirstSimilar",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "relatedSubCatId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "insertReverse",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/poem/{id}/quoteds": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get quoted poems for a poem",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "itemsCount",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "onlyClaimedByBothPoets",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "published",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "chosenForMainList",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/poem/{id}/quoteds/{relatedId}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "two poems quoted records",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "relatedId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "published",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/quoted": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get quoted poems",
        "parameters": [
          {
            "name": "poetId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "relatedPoetId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "chosen",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "published",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "claimed",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "indirect",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "insert quoted (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "update quoted (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete quoted (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/quoted/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get quoted by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/quoted/suggest": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "suggest new quote (for normal users) (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of user suggested corrections (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/quoted/suggestion/next": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "next unmoderated quoted poem (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/quoted/moderate": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "moderate quoted poems (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemModerationViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemModerationViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorQuotedPoemModerationViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/source": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "digital source from tag",
        "parameters": [
          {
            "name": "sourceUrlSlug",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalSource"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/source/{catId}": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "tag category with source (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalSource"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalSource"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalSource"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/source/stats/rebuild": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "update digital sources stats (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/wordcounts/rebuild/{poetId}": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "build word counts (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "reset",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "poetId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/wordcounts/fillwordcounts": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "one time fixer for word counts new RowNmbrInCat fields (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/wordcounts/fillwordcountsummeries": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "one time fixer for category word count summries (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/wordcounts/{catId}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "category word counts",
        "parameters": [
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "term",
            "in": "query",
            "description": "can be empty",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CategoryWordCount"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/wordsums/{catId}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "category words summary",
        "parameters": [
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryWordCountSummary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/wordcounts/bycat": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "comparison of word counts for poets",
        "parameters": [
          {
            "name": "term",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "catId",
            "in": "query",
            "description": "can be null or can be extracted from poetId",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "poetId",
            "in": "query",
            "description": "is not necessary unless you mean a specific poet and do not provide catId",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PoetOrCatWordStat"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/wordcounts/bycat/count": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "CategoryWordCount for a specific term in a category",
        "parameters": [
          {
            "name": "term",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "catId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "poetId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CategoryWordCount"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/tajik/sqlite/onetime/import": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": " (Auth policies: ganjoor:import)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:import"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/tajik/poets": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "tajik poets",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorTajikPoet"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/tajik/page": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "tajik page by url",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "catPoems",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPageCompleteViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/tajik/search": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "search tajik poems",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "term",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "poetId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "catId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoemCompleteViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/ganjoor/ai/generate/summaries": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "fill couplet summaries using open ai (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "startFrom",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "count",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/ai/generate/poem/summaries": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "fill poem summaries using open ai (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "startFrom",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "count",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/ai/generate/poem/geo": {
      "put": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "geo tag poems using AI (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "startFrom",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "count",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/correction": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "send cat corrections (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/correction/{id}": {
      "delete": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "delete unreviewed user cat corrections for a poem (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get cat correction by id (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/correction/last/{id}": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "returns last unreviewed correction from the user for a cat (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/corrections/mine": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of user suggested cat corrections (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/corrections/all": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get list of all suggested cat corrections (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "userId",
            "in": "query",
            "description": "userId",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/{id}/corrections/effective": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "effective corrections for a cat",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/ganjoor/cat/correction/next": {
      "get": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "get next unreviewed cat correction (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "onlyUserCorrections",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/ganjoor/cat/correction/moderate": {
      "post": {
        "tags": [
          "Ganjoor"
        ],
        "summary": "moderate cat correction (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorCatCorrectionViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/poetphotos/poet/{id}": {
      "get": {
        "tags": [
          "GanjoorPoetSuggestedPhotos"
        ],
        "summary": "returns list of suggested photos for a poet",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "poet id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoetSuggestedPictureViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/poetphotos/{id}": {
      "get": {
        "tags": [
          "GanjoorPoetSuggestedPhotos"
        ],
        "summary": "returns a single suggested photo (Auth policies: ganjoor:photos)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetSuggestedPictureViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "GanjoorPoetSuggestedPhotos"
        ],
        "summary": "delete published suggested photo (Auth policies: ganjoor:photos)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      }
    },
    "/api/poetphotos/unpublished/next": {
      "get": {
        "tags": [
          "GanjoorPoetSuggestedPhotos"
        ],
        "summary": "return the next unpublished suggested line for poets (Auth policies: ganjoor:photos)",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetSuggestedPictureViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      }
    },
    "/api/poetphotos": {
      "post": {
        "tags": [
          "GanjoorPoetSuggestedPhotos"
        ],
        "summary": "add a suggestion for poets photos (send form) with these fields: poetId, title, description, srcUrl and an image attachment (Auth)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetSuggestedPictureViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "GanjoorPoetSuggestedPhotos"
        ],
        "summary": "modify a suggestion for poets photos (Auth policies: ganjoor:photos)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetSuggestedPictureViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetSuggestedPictureViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetSuggestedPictureViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      }
    },
    "/api/poetphotos/reject/{id}": {
      "put": {
        "tags": [
          "GanjoorPoetSuggestedPhotos"
        ],
        "summary": "reject  a suggestion for poets photos (Auth policies: ganjoor:photos)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/json": {
              "schema": {
                "type": "string"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      }
    },
    "/api/poetspecs/poet/{id}": {
      "get": {
        "tags": [
          "GanjoorPoetSuggestedSpecLines"
        ],
        "summary": "returns list of suggested spec lines for a poet",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "poet id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/poetspecs/{id}": {
      "get": {
        "tags": [
          "GanjoorPoetSuggestedSpecLines"
        ],
        "summary": "returns specific suggested line for poets (Auth policies: ganjoor:photos)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "GanjoorPoetSuggestedSpecLines"
        ],
        "summary": "delete published suggested spec line (Auth policies: ganjoor:photos)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      }
    },
    "/api/poetspecs/unpublished/next": {
      "get": {
        "tags": [
          "GanjoorPoetSuggestedSpecLines"
        ],
        "summary": "return the next unpublished suggested line for poets (Auth policies: ganjoor:photos)",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      }
    },
    "/api/poetspecs": {
      "post": {
        "tags": [
          "GanjoorPoetSuggestedSpecLines"
        ],
        "summary": "add a suggestion for poets spec lines (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "GanjoorPoetSuggestedSpecLines"
        ],
        "summary": "modify a suggestion for poets spec lines (Auth policies: ganjoor:photos)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorPoetSuggestedSpecLineViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      }
    },
    "/api/poetspecs/reject/{id}": {
      "put": {
        "tags": [
          "GanjoorPoetSuggestedSpecLines"
        ],
        "summary": "reject  a suggestion for poets spec lines (Auth policies: ganjoor:photos)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/json": {
              "schema": {
                "type": "string"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:photos"
            ]
          }
        ]
      }
    },
    "/api/locations": {
      "get": {
        "tags": [
          "GeoLocation"
        ],
        "summary": "get all locations",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorGeoLocation"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "GeoLocation"
        ],
        "summary": "add new location (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorGeoLocation"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorGeoLocation"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorGeoLocation"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorGeoLocation"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "GeoLocation"
        ],
        "summary": "update an existing location (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorGeoLocation"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorGeoLocation"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorGeoLocation"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/locations/{id}": {
      "get": {
        "tags": [
          "GeoLocation"
        ],
        "summary": "get location by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorGeoLocation"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "GeoLocation"
        ],
        "summary": " (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/images/{size}/{id}.jpg": {
      "get": {
        "tags": [
          "Image"
        ],
        "summary": "returns image stream with image/jpeg MIME type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "size",
            "in": "path",
            "description": "norm/orig/thumb",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "mimeForResized",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": "image/jpeg"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/images/{size}/{id}.webp": {
      "get": {
        "tags": [
          "Image"
        ],
        "summary": "returns image stream with image/webp MIME type",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "size",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/images/{id}/{degIn90mul}": {
      "put": {
        "tags": [
          "Image"
        ],
        "summary": "Rotate Image in 90 deg. multiplicants: 90, 180 or 270 (Auth policies: artifact:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "degIn90mul",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RPictureFile"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:modify"
            ]
          }
        ]
      }
    },
    "/api/images/replace/{id}": {
      "put": {
        "tags": [
          "Image"
        ],
        "summary": "replace an image (Auth policies: artifact:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "description": "",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "file": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RPictureFile"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "artifact:modify"
            ]
          }
        ]
      }
    },
    "/api/images/cropped/{id}": {
      "get": {
        "tags": [
          "Image"
        ],
        "summary": "Generate Cropped Image Based On ThumbnailCoordinates For Notes (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "left",
            "in": "query",
            "description": "",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "width",
            "in": "query",
            "description": "",
            "schema": {
              "type": "number",
              "format": "double"
            }
          },
          {
            "name": "height",
            "in": "query",
            "description": "",
            "schema": {
              "type": "number",
              "format": "double"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RImage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/musiccatalogue/golha/collection/{id}/programs": {
      "get": {
        "tags": [
          "MusicCatalogue"
        ],
        "summary": "golha collection programs",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "collection id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GolhaProgramViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/musiccatalogue/golha/program/{id}/tracks": {
      "get": {
        "tags": [
          "MusicCatalogue"
        ],
        "summary": "program tracks",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GolhaTrackViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/notifications": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get User Notifications (Auth)",
        "parameters": [
          {
            "name": "notificationType",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/NotificationType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNotificationViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Notification"
        ],
        "summary": "Delete All Read Notifications (Auth)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/notifications/paginated": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get User Notifications (Paginated Version) (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "notificationType",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/NotificationType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RUserNotificationViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/notifications/unread/count": {
      "get": {
        "tags": [
          "Notification"
        ],
        "summary": "Get unread user notifications count (Auth)",
        "parameters": [
          {
            "name": "notificationType",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/NotificationType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/notifications/{notificationId}": {
      "put": {
        "tags": [
          "Notification"
        ],
        "summary": "Switch Notification Status (Auth)",
        "parameters": [
          {
            "name": "notificationId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserNotificationViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Notification"
        ],
        "summary": "Delete Notification (Auth)",
        "parameters": [
          {
            "name": "notificationId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/notifications/allread": {
      "put": {
        "tags": [
          "Notification"
        ],
        "summary": "Set All User Notifications Status Read (Auth)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/notifications/allunread": {
      "put": {
        "tags": [
          "Notification"
        ],
        "summary": "Set All User Notifications Status Unread (Auth)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/notifications/{userId}": {
      "post": {
        "tags": [
          "Notification"
        ],
        "summary": "notify a sepcific user (Auth policies: notif:add)",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewNotificationViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/NewNotificationViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/NewNotificationViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RUserNotificationViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "notif:add"
            ]
          }
        ]
      }
    },
    "/api/notifications/all/{email}": {
      "post": {
        "tags": [
          "Notification"
        ],
        "summary": "notfy all users (Auth policies: notif:bulk)",
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewNotificationViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/NewNotificationViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/NewNotificationViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "notif:bulk"
            ]
          }
        ]
      }
    },
    "/api/numberings": {
      "get": {
        "tags": [
          "Numbering"
        ],
        "summary": "get all numberings",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorNumbering"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Numbering"
        ],
        "summary": "add new numbering (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorNumbering"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorNumbering"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorNumbering"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorNumbering"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Numbering"
        ],
        "summary": "update an existing numbering (Auth policies: ganjoor:modify)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorNumbering"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorNumbering"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorNumbering"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/numberings/{id}": {
      "get": {
        "tags": [
          "Numbering"
        ],
        "summary": "get numbering by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorNumbering"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Numbering"
        ],
        "summary": " (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/numberings/cat/{id}": {
      "get": {
        "tags": [
          "Numbering"
        ],
        "summary": "get all numberings related to a category",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "category id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorNumbering"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/numberings/couplet/{poemId}/{coupletIndex}": {
      "get": {
        "tags": [
          "Numbering"
        ],
        "summary": "get all numbering patterns for a couplet",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "coupletIndex",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorCoupletNumberViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/numberings/recount/start/{id}": {
      "put": {
        "tags": [
          "Numbering"
        ],
        "summary": "recount a numbering (Auth policies: ganjoor:modify)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/numberings/generatemissing": {
      "post": {
        "tags": [
          "Numbering"
        ],
        "summary": "generate missing default numberings and start counting (Auth policies: ganjoor:modify)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:modify"
            ]
          }
        ]
      }
    },
    "/api/audio/published": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "returns paginated published recitations (if poetId or catId is non-zero its ordered by poemId ascending if not it is ordered by publish date descending)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "searchTerm",
            "in": "query",
            "description": "empty: no search term, non-empty: searches within AudioArtist, AudioTitle, poem.FullTitle and poem.PlainText simultaneously",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "poetId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "catId",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicRecitationViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/published/{id}": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "get published recitation by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicRecitationViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/published/rss": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "creates an RSS file from recent published recitations",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "Gets audio narrations, user must have recitation::moderate permission to be able to see all users narrations (Auth)",
        "description": "additional headers: paging-headers, audio-upload-enabled",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "allUsers",
            "in": "query",
            "description": "default: false, user must have recitation::moderate permission to be able to see all users narrations",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "default: -1, unfiltered",
            "schema": {
              "$ref": "#/components/schemas/AudioReviewStatus"
            }
          },
          {
            "name": "searchTerm",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "mistakes",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "recitationType",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/RecitationType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecitationViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Recitation"
        ],
        "summary": "Reciation Upload (Auth)",
        "parameters": [
          {
            "name": "replace",
            "in": "query",
            "description": "if you send true to replace parameter, if there is an existing recitation for the poem from the user with the same Audio Artist name\r\ncorresponding mp3+xml files are replaced an no other changes is applied (no new post, preserving recitation position)",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "recitationType",
            "in": "query",
            "description": "",
            "schema": {
              "$ref": "#/components/schemas/RecitationType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadSession"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/file/{id}.mp3": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "get the corresponding mp3 file for the narration",
        "description": "it could be protected (Authorized), but I guess I would have problems with available client components support,\r\nso I preferred it to be anonymous, as it does not harm anybody I guess",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/xml/{id}": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "get the corresponding xml file contents (xml) for the narration",
        "description": "it could be protected (Authorized), but I guess I would have problems with available client components support,\r\nso I preferred it to be anonymous, as it does not harm anybody I guess",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/file/{id}.xml": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "get the corresponding xml file for the recitation",
        "description": "it could be protected (Authorized), but I guess I would have problems with available client components support,\r\nso I preferred it to be anonymous, as it does not harm anybody I guess",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/verses/{id}": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "Gets Verse Sync Information",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "narration id",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecitationVerseSync"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/{id}": {
      "put": {
        "tags": [
          "Recitation"
        ],
        "summary": "updates narration metadata (Auth)",
        "description": "reviewstatus cannot be set to Approved or Rejected using this method, use moderate method instead\r\nonly these set of fields are updatable: AudioTitle, AudioArtist, AudioArtistUrl, AudioSrc, AudioSrcUrl, ReviewStatus (Draft to Pending and vice versa and Approved/Rejected to Pending)\r\nonly narrator or a moderator can update the narration",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecitationViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Recitation"
        ],
        "summary": "Delete a recitation (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/moderate/{id}": {
      "put": {
        "tags": [
          "Recitation"
        ],
        "summary": "Moderate pending narration (for moderating other users' recitations you also need recitation:moderate permission) (Auth policies: recitation:publish)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationModerateViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationModerateViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationModerateViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecitationViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "recitation:publish"
            ]
          }
        ]
      }
    },
    "/api/audio/uploads": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "Get User Uploads (Auth)",
        "description": "additional headers: paging-headers, audio-upload-enabled",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "allUsers",
            "in": "query",
            "description": "default: false, user must have recitation::moderate permission to be able to see all users uploads",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UploadedItemViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/uploadenabled": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "upload, update, moderate and delete operations on recitations might temporarily become disabled,\r\nthis method gets the current status\r\nremarks: the value of this flag is provided as a custom header called audio-upload-enabled in some common GET methods\r\nin order to reduce the need for a separate query (Auth)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/profile": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "Get User Profiles (Auth)",
        "parameters": [
          {
            "name": "artistName",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserRecitationProfileViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Recitation"
        ],
        "summary": "Add a narration profile (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserRecitationProfileViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserRecitationProfileViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserRecitationProfileViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRecitationProfileViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Recitation"
        ],
        "summary": "Update a narration profile (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserRecitationProfileViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserRecitationProfileViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserRecitationProfileViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRecitationProfileViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/profile/def": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "Get User Default Profile (Auth)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRecitationProfileViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/profile/{id}": {
      "delete": {
        "tags": [
          "Recitation"
        ],
        "summary": "Delete a narration profile (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/publishqueue": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "publishing tracker data (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "unfinished",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecitationPublishingTracker"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/chown": {
      "put": {
        "tags": [
          "Recitation"
        ],
        "summary": "Transfer Recitations Ownership (for recitations owned by current user) (Auth)",
        "parameters": [
          {
            "name": "targetEmailAddress",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "artistName",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/syncqueue": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "Synchronization Queue (Auth)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecitationViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/errors/report": {
      "post": {
        "tags": [
          "Recitation"
        ],
        "summary": "report an error in a recitation (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationErrorReportViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationErrorReportViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationErrorReportViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecitationErrorReportViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "get errors reported for recitations (Auth policies: recitation:moderate)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecitationErrorReportViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "recitation:moderate"
            ]
          }
        ]
      }
    },
    "/api/audio/errors/report/{id}": {
      "delete": {
        "tags": [
          "Recitation"
        ],
        "summary": "reject a reported error for recitations and notify the reporter (and deletes the report) (Auth policies: recitation:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "rejectionNote",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "default": "عدم تطابق با معیارهای حذف خوانش"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "recitation:moderate"
            ]
          }
        ]
      }
    },
    "/api/audio/errors/report/accept/{id}": {
      "delete": {
        "tags": [
          "Recitation"
        ],
        "summary": "accepts a reported error for recitations, change status of the recitation to rejected and notify the reporter and recitation owner (and deletes the report) (Auth policies: recitation:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "recitation:moderate"
            ]
          }
        ]
      }
    },
    "/api/audio/errors/report/save": {
      "put": {
        "tags": [
          "Recitation"
        ],
        "summary": "accepts a reported error for recitations, add mistake to approve the mistake and notify the reporter and recitation owner (and deletes the report) (Auth policies: recitation:moderate)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationErrorReportViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationErrorReportViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationErrorReportViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "recitation:moderate"
            ]
          }
        ]
      }
    },
    "/api/audio/errors/report/edit": {
      "put": {
        "tags": [
          "Recitation"
        ],
        "summary": "edit approved mistake of a recitation text (Auth policies: recitation:moderate)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationErrorReportViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationErrorReportViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RecitationErrorReportViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "recitation:moderate"
            ]
          }
        ]
      }
    },
    "/api/audio/errors/approved/{id}": {
      "delete": {
        "tags": [
          "Recitation"
        ],
        "summary": "remove approved mistake (Auth policies: recitation:moderate)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "recitation:moderate"
            ]
          }
        ]
      }
    },
    "/api/audio/vote/{id}": {
      "post": {
        "tags": [
          "Recitation"
        ],
        "summary": "up vote a recitation (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Recitation"
        ],
        "summary": "revoke recitaion up vote (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/vote/switch/{id}": {
      "put": {
        "tags": [
          "Recitation"
        ],
        "summary": "revoke recitaion up vote (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/votes": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "get user upvoted recitations (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicRecitationViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/audio/votes/{poemId}/scores": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "compute poem recitations order (no update)",
        "parameters": [
          {
            "name": "poemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecitationOrderingViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/healthcheck": {
      "post": {
        "tags": [
          "Recitation"
        ],
        "summary": "starts checking recitaions with missing files and add them to reported errors list job (Auth policies: recitation:moderate)",
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "recitation:moderate"
            ]
          }
        ]
      }
    },
    "/api/audio/retrypublish": {
      "post": {
        "tags": [
          "Recitation"
        ],
        "summary": "retry publish unpublished narrations",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/ff": {
      "put": {
        "tags": [
          "Recitation"
        ],
        "summary": "Makes recitations of فریدون فرح‌اندوز first recitations (Auth policies: recitation:import)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer",
                  "format": "int32"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "recitation:import"
            ]
          }
        ]
      }
    },
    "/api/audio/cattop1/{catId}": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "get category top one recitations",
        "parameters": [
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includePoemText",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicRecitationViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/catany/{catId}": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "check if a category has any recitations",
        "parameters": [
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/audio/cattop1/{catId}/rss": {
      "get": {
        "tags": [
          "Recitation"
        ],
        "summary": "rss for category top one recitations",
        "parameters": [
          {
            "name": "catId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includePoemText",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/options/{name}": {
      "get": {
        "tags": [
          "RGenericOptions"
        ],
        "summary": "get user level option, if option value is not found it returns empty string (Auth)",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "RGenericOptions"
        ],
        "summary": "get user level option (Auth)",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/json": {
              "schema": {
                "type": "string"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/options/global/{name}": {
      "get": {
        "tags": [
          "RGenericOptions"
        ],
        "summary": "get global option value, Security Warning: every authenticated user could see value of global options, so do not store sensitive data into them  or you can override this behaviour in your derived class (Auth)",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "RGenericOptions"
        ],
        "summary": "set global option value, Security Warning: every authenticated user could change value of global options, so do not store sensitive data into them or you can override this behaviour in your derived class (Auth)",
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/json": {
              "schema": {
                "type": "string"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/options/{workspace}/{name}": {
      "get": {
        "tags": [
          "RGenericOptions"
        ],
        "summary": "get user level option in a workspace, if option value is not found it returns empty string (Auth)",
        "parameters": [
          {
            "name": "workspace",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "name",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "RGenericOptions"
        ],
        "summary": "get user level option in a workspace (Auth)",
        "parameters": [
          {
            "name": "workspace",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "name",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/json": {
              "schema": {
                "type": "string"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/options/global/{workspace}/{name}": {
      "get": {
        "tags": [
          "RGenericOptions"
        ],
        "summary": "get workspace global option value, Security Warning: every authenticated user in a workspace could see value of global options, so do not store sensitive data into them  or you can override this behaviour in your derived class (Auth)",
        "parameters": [
          {
            "name": "workspace",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "name",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "RGenericOptions"
        ],
        "summary": "set global option value, Security Warning: every authenticated user could change value of global options, so do not store sensitive data into them or you can override this behaviour in your derived class (Auth)",
        "parameters": [
          {
            "name": "workspace",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "name",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "string"
              }
            },
            "text/json": {
              "schema": {
                "type": "string"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/rimages/{id}.{ext}": {
      "get": {
        "tags": [
          "RImage"
        ],
        "summary": "return image with custom extension",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "ext",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/rimages": {
      "post": {
        "tags": [
          "RImage"
        ],
        "summary": "temporary api for uploading temporary images (Auth policies: audit:view)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "audit:view"
            ]
          }
        ]
      }
    },
    "/api/rjobs": {
      "get": {
        "tags": [
          "RLongRunningJobs"
        ],
        "summary": "get long running jobs (Auth policies: audit:view)",
        "parameters": [
          {
            "name": "succeeded",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "failed",
            "in": "query",
            "description": "",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RLongRunningJobStatus"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "audit:view"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "RLongRunningJobs"
        ],
        "summary": "delete a specific job record, this could be used for deleting records which are not cleanable using the \"cleanup\" method (Auth policies: audit:view)",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "audit:view"
            ]
          }
        ]
      }
    },
    "/api/rjobs/cleanup": {
      "delete": {
        "tags": [
          "RLongRunningJobs"
        ],
        "summary": "clean up old jobs (Auth policies: audit:view)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RLongRunningJobStatus"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "audit:view"
            ]
          }
        ]
      }
    },
    "/api/roles": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "All Roles Information (Auth policies: role:view)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RAppRole"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "role:view"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Role"
        ],
        "summary": "add a new role (Auth policies: role:add)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RAppRole"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RAppRole"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RAppRole"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RAppRole"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "role:add"
            ]
          }
        ]
      }
    },
    "/api/roles/{roleName}": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "returns role information (Auth policies: role:view)",
        "parameters": [
          {
            "name": "roleName",
            "in": "path",
            "description": "role name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RAppRole"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "role:view"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Role"
        ],
        "summary": "update existing role (Auth policies: role:modify)",
        "parameters": [
          {
            "name": "roleName",
            "in": "path",
            "description": "role name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "existingGroupInfo.id could be passed empty and it is ignored completely",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RAppRole"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RAppRole"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RAppRole"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "role:modify"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Role"
        ],
        "summary": "delete role (Auth policies: role:delete)",
        "parameters": [
          {
            "name": "roleName",
            "in": "path",
            "description": "role name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden"
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "oauth2": [
              "role:delete"
            ]
          }
        ]
      }
    },
    "/api/roles/permissions/{roleName}": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "lists role permissions (Auth policies: role:view)",
        "parameters": [
          {
            "name": "roleName",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/SecurableItem"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "role:view"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Role"
        ],
        "summary": "Saves role permissions (Auth policies: role:modify)",
        "parameters": [
          {
            "name": "roleName",
            "in": "path",
            "description": "role name",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/SecurableItem"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/SecurableItem"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/SecurableItem"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/SecurableItem"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "role:modify"
            ]
          }
        ]
      }
    },
    "/api/roles/securableitems": {
      "get": {
        "tags": [
          "Role"
        ],
        "summary": "Get All SecurableItems",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SecurableItem"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/banners": {
      "post": {
        "tags": [
          "SiteBanners"
        ],
        "summary": "add site banner (send form) with these fields: alt, url and an image attachment (Auth policies: ganjoor:banners)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorSiteBannerViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:banners"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "SiteBanners"
        ],
        "summary": "delete site banner (Auth policies: ganjoor:banners)",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:banners"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "SiteBanners"
        ],
        "summary": "get all defined site banners (Auth policies: ganjoor:banners)",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorSiteBannerViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:banners"
            ]
          }
        ]
      }
    },
    "/api/banners/{id}": {
      "put": {
        "tags": [
          "SiteBanners"
        ],
        "summary": "modify site banner (Auth policies: ganjoor:banners)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorSiteBannerModifyViewModel"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorSiteBannerModifyViewModel"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorSiteBannerModifyViewModel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:banners"
            ]
          }
        ]
      }
    },
    "/api/banners/random": {
      "get": {
        "tags": [
          "SiteBanners"
        ],
        "summary": "get a random active site banner",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorSiteBannerViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Not Found"
          }
        }
      }
    },
    "/api/translations/languages": {
      "get": {
        "tags": [
          "Translation"
        ],
        "summary": "get all languages",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorLanguage"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Translation"
        ],
        "summary": "add new language (Auth policies: ganjoor:translations)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorLanguage"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorLanguage"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorLanguage"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorLanguage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:translations"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Translation"
        ],
        "summary": "update an existing language (Auth policies: ganjoor:translations)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorLanguage"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorLanguage"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/GanjoorLanguage"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:translations"
            ]
          }
        ]
      }
    },
    "/api/translations/languages/{id}": {
      "get": {
        "tags": [
          "Translation"
        ],
        "summary": "get language by id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorLanguage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Translation"
        ],
        "summary": " (Auth policies: ganjoor:translations)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [
              "ganjoor:translations"
            ]
          }
        ]
      }
    },
    "/api/tracking": {
      "get": {
        "tags": [
          "UserVisitsTracking"
        ],
        "summary": "get user history (Auth)",
        "parameters": [
          {
            "name": "PageNumber",
            "in": "query",
            "description": "page number starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "PageSize",
            "in": "query",
            "description": "settable  page size  (-1 == all items, 1000 maxpagesize)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GanjoorUserBookmarkViewModel"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "UserVisitsTracking"
        ],
        "summary": "add a user history track (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            },
            "text/json": {
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GanjoorUserPrePoemVisitViewModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "UserVisitsTracking"
        ],
        "summary": "start or stop tracking user (Auth)",
        "requestBody": {
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "text/json": {
              "schema": {
                "type": "boolean"
              }
            },
            "application/*+json": {
              "schema": {
                "type": "boolean"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    },
    "/api/tracking/{id}": {
      "delete": {
        "tags": [
          "UserVisitsTracking"
        ],
        "summary": "delete a user history track (Auth)",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "oauth2": [ ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AudioReviewStatus": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          -1
        ],
        "type": "integer",
        "description": "Audio Review Status",
        "format": "int32"
      },
      "AudioSyncStatus": {
        "enum": [
          0,
          1,
          2,
          4,
          16
        ],
        "type": "integer",
        "description": "Audio Synchronization Status (binary combination is acceptable)",
        "format": "int32"
      },
      "CategoryWordCount": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "id",
            "format": "uuid"
          },
          "catId": {
            "type": "integer",
            "description": "CatId",
            "format": "int32"
          },
          "word": {
            "type": "string",
            "description": "Word",
            "nullable": true
          },
          "count": {
            "type": "integer",
            "description": "Count",
            "format": "int32"
          },
          "rowNmbrInCat": {
            "type": "integer",
            "description": "row number in category",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "CategoryWordCountSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "id",
            "format": "uuid"
          },
          "catId": {
            "type": "integer",
            "description": "CatId",
            "format": "int32"
          },
          "uniqueWordCount": {
            "type": "integer",
            "description": "unique word count",
            "format": "int32"
          },
          "totalWordCount": {
            "type": "integer",
            "description": "total word count",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ChangeEmailViewModel": {
        "type": "object",
        "properties": {
          "newEmail": {
            "type": "string",
            "nullable": true
          },
          "password": {
            "type": "string",
            "nullable": true
          },
          "callbackUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CorrectionReviewResult": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17
        ],
        "type": "integer",
        "description": "correction review result",
        "format": "int32"
      },
      "DigitalSource": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "urlSlug": {
            "type": "string",
            "description": "source url slug",
            "nullable": true
          },
          "shortName": {
            "type": "string",
            "description": "short name",
            "nullable": true
          },
          "fullName": {
            "type": "string",
            "description": "full name",
            "nullable": true
          },
          "sourceType": {
            "type": "string",
            "description": "source category",
            "nullable": true
          },
          "coupletsCount": {
            "type": "integer",
            "description": "couplets count",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "DonationExpenditure": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "ganjoorDonationId": {
            "type": "integer",
            "description": "GanjoorDonation Id",
            "format": "int32"
          },
          "ganjoorDonation": {
            "$ref": "#/components/schemas/GanjoorDonation"
          },
          "amount": {
            "type": "number",
            "description": "amount",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "donation expenditures"
      },
      "FAQCategory": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "catOrder": {
            "type": "integer",
            "description": "order",
            "format": "int32"
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          },
          "published": {
            "type": "boolean",
            "description": "published"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FAQItem"
            },
            "description": "category items",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "FAQ Category"
      },
      "FAQItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "question": {
            "type": "string",
            "description": "question",
            "nullable": true
          },
          "answerExcerpt": {
            "type": "string",
            "description": "excerpt",
            "nullable": true
          },
          "fullAnswer": {
            "type": "string",
            "description": "answer",
            "nullable": true
          },
          "pinned": {
            "type": "boolean",
            "description": "pinned"
          },
          "pinnedItemOrder": {
            "type": "integer",
            "description": "item order",
            "format": "int32"
          },
          "categoryId": {
            "type": "integer",
            "description": "category id",
            "format": "int32"
          },
          "category": {
            "$ref": "#/components/schemas/FAQCategory"
          },
          "itemOrderInCategory": {
            "type": "integer",
            "description": "item order in category",
            "format": "int32"
          },
          "contentForSearch": {
            "type": "string",
            "description": "content search",
            "nullable": true
          },
          "hashTag1": {
            "type": "string",
            "description": "hashtag 1",
            "nullable": true
          },
          "hashTag2": {
            "type": "string",
            "description": "hashtag 2",
            "nullable": true
          },
          "hashTag3": {
            "type": "string",
            "description": "hashtag 3",
            "nullable": true
          },
          "hashTag4": {
            "type": "string",
            "description": "hashtag 4",
            "nullable": true
          },
          "published": {
            "type": "boolean",
            "description": "published"
          }
        },
        "additionalProperties": false,
        "description": "FAQ Item"
      },
      "GanjooRhymeAnalysisResult": {
        "type": "object",
        "properties": {
          "rhyme": {
            "type": "string",
            "description": "rhyme",
            "nullable": true
          },
          "failVerse": {
            "type": "string",
            "description": "the verse analysis stopped at",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Rhyme Analysis Result"
      },
      "GanjoorBatchNamingModel": {
        "type": "object",
        "properties": {
          "startWithNotIncludingSpaces": {
            "type": "string",
            "description": "Start with (not including required spaces)",
            "nullable": true,
            "example": "\r\n            شمارهٔ \r\n            "
          },
          "removePreviousPattern": {
            "type": "boolean",
            "description": "remove previous pattern from start until any numbers"
          },
          "removeSetOfCharacters": {
            "type": "string",
            "description": "remove set of characters other than spaces from beginning and end",
            "nullable": true,
            "example": ".-"
          },
          "simulate": {
            "type": "boolean",
            "description": "simulate naming"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Batch Naming Model"
      },
      "GanjoorCachedRelatedSection": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "poemId": {
            "type": "integer",
            "description": "poem id",
            "format": "int32"
          },
          "poem": {
            "$ref": "#/components/schemas/GanjoorPoem"
          },
          "sectionIndex": {
            "type": "integer",
            "description": "section index",
            "format": "int32"
          },
          "poetId": {
            "type": "integer",
            "description": "poet id",
            "format": "int32"
          },
          "relationOrder": {
            "type": "integer",
            "description": "order",
            "format": "int32"
          },
          "poetName": {
            "type": "string",
            "description": "poet name",
            "nullable": true
          },
          "poetImageUrl": {
            "type": "string",
            "description": "poet image url",
            "nullable": true
          },
          "fullUrl": {
            "type": "string",
            "description": "poem full url",
            "nullable": true
          },
          "fullTitle": {
            "type": "string",
            "description": "poem full title",
            "nullable": true
          },
          "htmlExcerpt": {
            "type": "string",
            "description": "excerpt",
            "nullable": true
          },
          "targetPoemId": {
            "type": "integer",
            "description": "target poem id",
            "format": "int32"
          },
          "targetSectionIndex": {
            "type": "integer",
            "description": "target section index",
            "format": "int32"
          },
          "poetMorePoemsLikeThisCount": {
            "type": "integer",
            "description": "other poems",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "GanjoorCat": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "poetId": {
            "type": "integer",
            "description": "poet_id",
            "format": "int32"
          },
          "poet": {
            "$ref": "#/components/schemas/GanjoorPoet"
          },
          "title": {
            "type": "string",
            "description": "text",
            "nullable": true
          },
          "parentId": {
            "type": "integer",
            "description": "parent_id",
            "format": "int32",
            "nullable": true
          },
          "parent": {
            "$ref": "#/components/schemas/GanjoorCat"
          },
          "urlSlug": {
            "type": "string",
            "description": "url => slug",
            "nullable": true
          },
          "fullUrl": {
            "type": "string",
            "description": "sample: /hafez/ghazal",
            "nullable": true
          },
          "tableOfContentsStyle": {
            "$ref": "#/components/schemas/GanjoorTOC"
          },
          "catType": {
            "$ref": "#/components/schemas/GanjoorCatType"
          },
          "description": {
            "type": "string",
            "description": "additional description or note",
            "nullable": true
          },
          "descriptionHtml": {
            "type": "string",
            "description": "html mode of additional description or note",
            "nullable": true
          },
          "mixedModeOrder": {
            "type": "integer",
            "description": "order when mixed with poems",
            "format": "int32"
          },
          "published": {
            "type": "boolean",
            "description": "published"
          },
          "bookName": {
            "type": "string",
            "description": "category book name",
            "nullable": true
          },
          "rImage": {
            "$ref": "#/components/schemas/RImage"
          },
          "rImageId": {
            "type": "string",
            "description": "user image id",
            "format": "uuid",
            "nullable": true
          },
          "sumUpSubsGeoLocations": {
            "type": "boolean",
            "description": "sum up sub categories geo locations"
          },
          "mapName": {
            "type": "string",
            "description": "category map name",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Category"
      },
      "GanjoorCatCorrectionViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "correct id",
            "format": "int32"
          },
          "catId": {
            "type": "integer",
            "description": "category id",
            "format": "int32"
          },
          "description": {
            "type": "string",
            "description": "additional description or note",
            "nullable": true
          },
          "descriptionHtml": {
            "type": "string",
            "description": "html mode of additional description or note",
            "nullable": true
          },
          "originalDescription": {
            "type": "string",
            "description": "additional description or note",
            "nullable": true
          },
          "originalDescriptionHtml": {
            "type": "string",
            "description": "html mode of additional description or note",
            "nullable": true
          },
          "note": {
            "type": "string",
            "description": "note",
            "nullable": true
          },
          "date": {
            "type": "string",
            "description": "date",
            "format": "date-time"
          },
          "userId": {
            "type": "string",
            "description": "user Id",
            "format": "uuid"
          },
          "userNickname": {
            "type": "string",
            "description": "nickname",
            "nullable": true
          },
          "reviewed": {
            "type": "boolean",
            "description": "reviewed"
          },
          "reviewDate": {
            "type": "string",
            "description": "reviewdate",
            "format": "date-time"
          },
          "reviewNote": {
            "type": "string",
            "description": "review note",
            "nullable": true
          },
          "result": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "hideMyName": {
            "type": "boolean",
            "description": "hide the editors name"
          },
          "pageId": {
            "type": "integer",
            "description": "page id",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "GanjoorCatType": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "description": "Ganjoor Category Type",
        "format": "int32"
      },
      "GanjoorCatViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "description": "text",
            "nullable": true
          },
          "urlSlug": {
            "type": "string",
            "description": "url => slug",
            "nullable": true
          },
          "fullUrl": {
            "type": "string",
            "description": "full url",
            "nullable": true
          },
          "tableOfContentsStyle": {
            "$ref": "#/components/schemas/GanjoorTOC"
          },
          "catType": {
            "$ref": "#/components/schemas/GanjoorCatType"
          },
          "description": {
            "type": "string",
            "description": "additional description or note",
            "nullable": true
          },
          "descriptionHtml": {
            "type": "string",
            "description": "html mode of additional description or note",
            "nullable": true
          },
          "mixedModeOrder": {
            "type": "integer",
            "description": "order when mixed with poems",
            "format": "int32"
          },
          "published": {
            "type": "boolean",
            "description": "published"
          },
          "bookName": {
            "type": "string",
            "description": "category book name",
            "nullable": true
          },
          "rImageId": {
            "type": "string",
            "description": "user image id",
            "format": "uuid",
            "nullable": true
          },
          "sumUpSubsGeoLocations": {
            "type": "boolean",
            "description": "sum up sub categories geo locations"
          },
          "mapName": {
            "type": "string",
            "description": "category map name",
            "nullable": true
          },
          "next": {
            "$ref": "#/components/schemas/GanjoorCatViewModel"
          },
          "previous": {
            "$ref": "#/components/schemas/GanjoorCatViewModel"
          },
          "ancestors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorCatViewModel"
            },
            "description": "ancestors",
            "nullable": true
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorCatViewModel"
            },
            "description": "cat children",
            "nullable": true
          },
          "poems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorPoemSummaryViewModel"
            },
            "description": "poems",
            "nullable": true
          },
          "paperSources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorPaperSource"
            },
            "description": "paper sources",
            "nullable": true
          },
          "newImage": {
            "type": "string",
            "description": "new image",
            "format": "binary",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "cat view model"
      },
      "GanjoorCenturyViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "name",
            "nullable": true
          },
          "halfCenturyOrder": {
            "type": "integer",
            "description": "order",
            "format": "int32"
          },
          "startYear": {
            "type": "integer",
            "description": "start",
            "format": "int32"
          },
          "endYear": {
            "type": "integer",
            "description": "end",
            "format": "int32"
          },
          "showInTimeLine": {
            "type": "boolean",
            "description": "show in time line"
          },
          "poets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorPoetViewModel"
            },
            "description": "poets",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "GanjoorCentury View Model"
      },
      "GanjoorCommentAbuseReportViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "reasonCode": {
            "type": "string",
            "description": "reason code for better grouping: offensive, bogus, other",
            "nullable": true
          },
          "reasonText": {
            "type": "string",
            "description": "some explanotory text provided by reporter",
            "nullable": true
          },
          "comment": {
            "$ref": "#/components/schemas/GanjoorCommentFullViewModel"
          }
        },
        "additionalProperties": false,
        "description": "GanjoorCommentAbuseReport View Model"
      },
      "GanjoorCommentFullViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "authorName": {
            "type": "string",
            "description": "author name (MySql imported field)",
            "nullable": true
          },
          "authorUrl": {
            "type": "string",
            "description": "author url (MySql imported field)",
            "nullable": true
          },
          "commentDate": {
            "type": "string",
            "description": "comment date",
            "format": "date-time"
          },
          "htmlComment": {
            "type": "string",
            "description": "comment",
            "nullable": true
          },
          "publishStatus": {
            "type": "string",
            "description": "status",
            "nullable": true
          },
          "userId": {
            "type": "string",
            "description": "User Id",
            "format": "uuid",
            "nullable": true
          },
          "inReplyTo": {
            "$ref": "#/components/schemas/GanjoorCommentSummaryViewModel"
          },
          "poem": {
            "$ref": "#/components/schemas/GanjoorPoemSummaryViewModel"
          },
          "myComment": {
            "type": "boolean",
            "description": "this can be used by clients"
          },
          "verse1Id": {
            "type": "integer",
            "description": "verse1 id",
            "format": "int32"
          },
          "verse2Id": {
            "type": "integer",
            "description": "verse2 id",
            "format": "int32"
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet index",
            "format": "int32"
          },
          "coupletSummary": {
            "type": "string",
            "description": "couplet summary",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GanjoorCommentPostViewModel": {
        "type": "object",
        "properties": {
          "poemId": {
            "type": "integer",
            "description": "Poem Id",
            "format": "int32"
          },
          "htmlComment": {
            "type": "string",
            "description": "comment",
            "nullable": true
          },
          "inReplyToId": {
            "type": "integer",
            "description": "in reply to",
            "format": "int32",
            "nullable": true
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet index - send null for unrelated to a couplet comment",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "new comment model"
      },
      "GanjoorCommentSummaryViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "authorName": {
            "type": "string",
            "description": "author name (MySql imported field)",
            "nullable": true
          },
          "authorUrl": {
            "type": "string",
            "description": "author url (MySql imported field)",
            "nullable": true
          },
          "commentDate": {
            "type": "string",
            "description": "comment date",
            "format": "date-time"
          },
          "htmlComment": {
            "type": "string",
            "description": "comment",
            "nullable": true
          },
          "publishStatus": {
            "type": "string",
            "description": "status",
            "nullable": true
          },
          "inReplyToId": {
            "type": "integer",
            "description": "in reply to",
            "format": "int32",
            "nullable": true
          },
          "userId": {
            "type": "string",
            "description": "User Id",
            "format": "uuid",
            "nullable": true
          },
          "replies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorCommentSummaryViewModel"
            },
            "description": "replies",
            "nullable": true
          },
          "myComment": {
            "type": "boolean",
            "description": "this can be used by clients"
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet index",
            "format": "int32"
          },
          "coupletSummary": {
            "type": "string",
            "description": "couplet summary",
            "nullable": true
          },
          "isBookmarked": {
            "type": "boolean",
            "description": "for client"
          }
        },
        "additionalProperties": false,
        "description": "GanjoorComment Summary View Model"
      },
      "GanjoorCoupletNumberViewModel": {
        "type": "object",
        "properties": {
          "numberingName": {
            "type": "string",
            "description": "name",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "number",
            "format": "int32"
          },
          "isPoemVerse": {
            "type": "boolean",
            "description": "is poem verse or paragraph"
          },
          "sameTypeNumber": {
            "type": "integer",
            "description": "number based on type of line: is it a poem verse or a paragraph",
            "format": "int32"
          },
          "totalLines": {
            "type": "integer",
            "description": "total couplets",
            "format": "int32"
          },
          "totalCouplets": {
            "type": "integer",
            "description": "total poem couplets",
            "format": "int32"
          },
          "totalParagraphs": {
            "type": "integer",
            "description": "total paragraphs",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Couplet Number View Model"
      },
      "GanjoorDonation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "dateString": {
            "type": "string",
            "description": "date: (donation dates have been collected in different formats, so instead of keeping their dates in a DateTime field I ought to use a string field)",
            "nullable": true
          },
          "recordDate": {
            "type": "string",
            "description": "record date",
            "format": "date-time"
          },
          "amount": {
            "type": "number",
            "description": "donation amount (0 for old imported records)",
            "format": "double"
          },
          "unit": {
            "type": "string",
            "description": "Amount Unit",
            "nullable": true
          },
          "amountString": {
            "type": "string",
            "description": "amount string (avoiding to parse different formats of old html text)",
            "nullable": true
          },
          "donorName": {
            "type": "string",
            "description": "donor name",
            "nullable": true
          },
          "donorLink": {
            "type": "string",
            "description": "donor link (unused)",
            "nullable": true
          },
          "remaining": {
            "type": "number",
            "description": "remaining (it could be ignored later when our data has been normalized enough and be calculated using related data)",
            "format": "double"
          },
          "expenditureDesc": {
            "type": "string",
            "description": "expenditure desc",
            "nullable": true
          },
          "importedRecord": {
            "type": "boolean",
            "description": "record is imported from old HTML text of donation page"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Donation (based on donation records saved in old html format of https://ganjoor.net/donate/)"
      },
      "GanjoorDonationViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id - null for POST api -",
            "format": "int32"
          },
          "recordDate": {
            "type": "string",
            "description": "record date",
            "format": "date-time"
          },
          "amount": {
            "type": "number",
            "description": "donation amount (0 for old imported records)",
            "format": "double"
          },
          "unit": {
            "type": "string",
            "description": "\"تومان\" is good, Amount Unit, if you send another Unit it would be consumed with EXPENSES of the same Unit, if it send EMPTY it wotld not be consumed!",
            "nullable": true
          },
          "donorName": {
            "type": "string",
            "description": "donor name",
            "nullable": true
          },
          "dateString": {
            "type": "string",
            "description": "null for POST api -  date: (donation dates have been collected in different formats, so instead of keeping their dates in a DateTime field I ought to use a string field)",
            "nullable": true
          },
          "amountString": {
            "type": "string",
            "description": "null for POST api -amount string (avoiding to parse different formats of old html text)",
            "nullable": true
          },
          "remaining": {
            "type": "number",
            "description": "null for POST api -remaining (it could be ignored later when our data has been normalized enough and be calculated using related data)",
            "format": "double"
          },
          "expenditureDesc": {
            "type": "string",
            "description": "null for POST api -expenditure desc",
            "nullable": true
          },
          "importedRecord": {
            "type": "boolean",
            "description": "null for POST api - record is imported from old HTML text of donation page"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Donation View Model"
      },
      "GanjoorDuplicateViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "srcPoemId": {
            "type": "integer",
            "description": "Source Poem Id",
            "format": "int32"
          },
          "srcPoemFullTitle": {
            "type": "string",
            "description": "Source Poem cat + parent cats title + title",
            "nullable": true
          },
          "srcPoemFullUrl": {
            "type": "string",
            "description": "Source Poem sample: /hafez/ghazal/sh1",
            "nullable": true
          },
          "firstVerse": {
            "type": "string",
            "description": "Source Poem First Verse",
            "nullable": true
          },
          "destPoemId": {
            "type": "integer",
            "description": "destination poem id",
            "format": "int32",
            "nullable": true
          },
          "destPoemFullTitle": {
            "type": "string",
            "description": "destination Poem cat + parent cats title + title",
            "nullable": true
          },
          "destPoemFullUrl": {
            "type": "string",
            "description": "destination Poem sample: /hafez/ghazal/sh1",
            "nullable": true
          },
          "destPoemFirstVerse": {
            "type": "string",
            "description": "destination poem first verse",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Duplicate View Model"
      },
      "GanjoorExpense": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "expenseDate": {
            "type": "string",
            "description": "date",
            "format": "date-time"
          },
          "amount": {
            "type": "number",
            "description": "amount",
            "format": "double"
          },
          "unit": {
            "type": "string",
            "description": "unit",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          },
          "donationExpenditures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DonationExpenditure"
            },
            "description": "donation expenitures",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Expenses"
      },
      "GanjoorGeoLocation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "name",
            "nullable": true
          },
          "latitude": {
            "type": "number",
            "description": "Latitude",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "Longitude",
            "format": "double"
          },
          "machineGenerated": {
            "type": "boolean",
            "description": "AI generated"
          }
        },
        "additionalProperties": false,
        "description": "Geo Locations (Cities) referred by Ganjoor Metadata"
      },
      "GanjoorLanguage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "name",
            "nullable": true
          },
          "code": {
            "type": "string",
            "description": "code",
            "nullable": true
          },
          "nativeName": {
            "type": "string",
            "description": "native name",
            "nullable": true
          },
          "rightToLeft": {
            "type": "boolean",
            "description": "is right to left"
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Language or system of writing for translating poems"
      },
      "GanjoorLinkViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "ganjoorPostId": {
            "type": "integer",
            "description": "Ganjoor Post Id",
            "format": "int32"
          },
          "ganjoorUrl": {
            "type": "string",
            "description": "ganjoor url",
            "nullable": true
          },
          "ganjoorTitle": {
            "type": "string",
            "description": "ganjoor title",
            "nullable": true
          },
          "entityName": {
            "type": "string",
            "description": "entity name",
            "nullable": true
          },
          "entityFriendlyUrl": {
            "type": "string",
            "description": "entity friendly url",
            "nullable": true
          },
          "entityImageId": {
            "type": "string",
            "description": "entity image id",
            "format": "uuid"
          },
          "reviewResult": {
            "$ref": "#/components/schemas/ReviewResult"
          },
          "synchronized": {
            "type": "boolean",
            "description": "Synchronized with ganjoor"
          },
          "suggestedBy": {
            "$ref": "#/components/schemas/PublicRAppUser"
          },
          "isTextOriginalSource": {
            "type": "boolean",
            "description": "is text original source"
          },
          "externalNormalSizeImageUrl": {
            "type": "string",
            "description": "url to access this image from THE external host, contains '/norm/' which when\r\nyou replace it with '/thumb/' you would have ExternalThumbnailImageUrl\r\nand if you replace it with '/orig/' you would have a url for ExternalOriginalSizeImageUrl which MIGHT NOT EXIST and end in a 404 error",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Link View Model"
      },
      "GanjoorMetre": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "urlSlug": {
            "type": "string",
            "description": "Url Slug",
            "nullable": true
          },
          "rhythm": {
            "type": "string",
            "description": "Rythm",
            "nullable": true,
            "example": "مفاعیلن مفاعیلن فعولن"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true,
            "example": "\r\n            هزج مسدس محذوف\r\n            "
          },
          "description": {
            "type": "string",
            "description": "Description",
            "nullable": true
          },
          "verseCount": {
            "type": "integer",
            "description": "Total Verse Count (its actually couplet count)",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Poem prosodic Metre"
      },
      "GanjoorModifyPageViewModel": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "urlSlug": {
            "type": "string",
            "description": "url => slug",
            "nullable": true
          },
          "htmlText": {
            "type": "string",
            "description": "Html Text",
            "nullable": true
          },
          "rhythm": {
            "type": "string",
            "description": "Poem Rhythm",
            "nullable": true
          },
          "rhythm2": {
            "type": "string",
            "description": "Second Poem Rhythm",
            "nullable": true
          },
          "rhythm3": {
            "type": "string",
            "description": "Third Poem Rhythm",
            "nullable": true
          },
          "rhymeLetters": {
            "type": "string",
            "description": "rhyme letters",
            "nullable": true
          },
          "sourceName": {
            "type": "string",
            "description": "source name",
            "nullable": true
          },
          "sourceUrlSlug": {
            "type": "string",
            "description": "source url slug",
            "nullable": true
          },
          "oldTag": {
            "type": "string",
            "description": "old collection or book name for Saadi's ghazalyiat (طیبات، خواتیم و ....)",
            "nullable": true
          },
          "oldTagPageUrl": {
            "type": "string",
            "description": "old collection page url e.g /saadi/tayyebat",
            "nullable": true
          },
          "noIndex": {
            "type": "boolean",
            "description": "no index (search engines are blocked to index the page)"
          },
          "redirectFromFullUrl": {
            "type": "string",
            "description": "if a page url is changed, store the old URL here to be redirected automatically",
            "nullable": true
          },
          "mixedModeOrder": {
            "type": "integer",
            "description": "order when mixed with categories",
            "format": "int32"
          },
          "published": {
            "type": "boolean",
            "description": "published"
          },
          "language": {
            "type": "string",
            "description": "language (this is intended to affect html page encodings and not determine actuallly accents and ....)",
            "nullable": true
          },
          "tableOfContentsStyle": {
            "$ref": "#/components/schemas/GanjoorTOC"
          },
          "catType": {
            "$ref": "#/components/schemas/GanjoorCatType"
          },
          "description": {
            "type": "string",
            "description": "additional description or note",
            "nullable": true
          },
          "descriptionHtml": {
            "type": "string",
            "description": "html mode of additional description or note",
            "nullable": true
          },
          "note": {
            "type": "string",
            "description": "a description of the modfication",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "modify page view model"
      },
      "GanjoorNumbering": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "name",
            "nullable": true
          },
          "startCatId": {
            "type": "integer",
            "description": "starting category id",
            "format": "int32"
          },
          "startCat": {
            "$ref": "#/components/schemas/GanjoorCat"
          },
          "endCatId": {
            "type": "integer",
            "description": "ending category id",
            "format": "int32",
            "nullable": true
          },
          "endCat": {
            "$ref": "#/components/schemas/GanjoorCat"
          },
          "totalLines": {
            "type": "integer",
            "description": "lines count",
            "format": "int32"
          },
          "totalVerses": {
            "type": "integer",
            "description": "verse count",
            "format": "int32"
          },
          "totalCouplets": {
            "type": "integer",
            "description": "total poem couplets",
            "format": "int32"
          },
          "totalParagraphs": {
            "type": "integer",
            "description": "total paragraphs",
            "format": "int32"
          },
          "lastCountingDate": {
            "type": "string",
            "description": "last counting date",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Numbering Schema"
      },
      "GanjoorPage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "ganjoorPageType": {
            "$ref": "#/components/schemas/GanjoorPageType"
          },
          "published": {
            "type": "boolean",
            "description": "Published"
          },
          "pageOrder": {
            "type": "integer",
            "description": "page order",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "fullTitle": {
            "type": "string",
            "description": "cat + parent cats title + title",
            "nullable": true
          },
          "urlSlug": {
            "type": "string",
            "description": "url => slug",
            "nullable": true
          },
          "fullUrl": {
            "type": "string",
            "description": "sample: /hafez/ghazal/sh1",
            "nullable": true
          },
          "htmlText": {
            "type": "string",
            "description": "Html Text",
            "nullable": true
          },
          "parentId": {
            "type": "integer",
            "description": "parent id",
            "format": "int32",
            "nullable": true
          },
          "parent": {
            "$ref": "#/components/schemas/GanjoorPage"
          },
          "poetId": {
            "type": "integer",
            "description": "related poet id",
            "format": "int32",
            "nullable": true
          },
          "poet": {
            "$ref": "#/components/schemas/GanjoorPoet"
          },
          "catId": {
            "type": "integer",
            "description": "related category id",
            "format": "int32",
            "nullable": true
          },
          "cat": {
            "$ref": "#/components/schemas/GanjoorCat"
          },
          "poemId": {
            "type": "integer",
            "description": "related poem id",
            "format": "int32",
            "nullable": true
          },
          "poem": {
            "$ref": "#/components/schemas/GanjoorPoem"
          },
          "secondPoetId": {
            "type": "integer",
            "description": "second poet id",
            "format": "int32",
            "nullable": true
          },
          "secondPoet": {
            "$ref": "#/components/schemas/GanjoorPoet"
          },
          "postDate": {
            "type": "string",
            "description": "post date",
            "format": "date-time"
          },
          "noIndex": {
            "type": "boolean",
            "description": "no index (search engines are blocked to index the page)"
          },
          "redirectFromFullUrl": {
            "type": "string",
            "description": "if a page url is changed, store the old URL here to be redirected automatically",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Page"
      },
      "GanjoorPageCompleteViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "ganjoorPageType": {
            "$ref": "#/components/schemas/GanjoorPageType"
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "fullTitle": {
            "type": "string",
            "description": "cat + parent cats title + title",
            "nullable": true
          },
          "urlSlug": {
            "type": "string",
            "description": "url => slug",
            "nullable": true
          },
          "fullUrl": {
            "type": "string",
            "description": "sample: /hafez/ghazal/sh1",
            "nullable": true
          },
          "htmlText": {
            "type": "string",
            "description": "Html Text",
            "nullable": true
          },
          "noIndex": {
            "type": "boolean",
            "description": "no index (search engines are blocked to index the page)"
          },
          "redirectFromFullUrl": {
            "type": "string",
            "description": "if a page url is changed, store the old URL here to be redirected automatically",
            "nullable": true
          },
          "poetOrCat": {
            "$ref": "#/components/schemas/GanjoorPoetCompleteViewModel"
          },
          "poem": {
            "$ref": "#/components/schemas/GanjoorPoemCompleteViewModel"
          },
          "secondPoet": {
            "$ref": "#/components/schemas/GanjoorPoetViewModel"
          },
          "next": {
            "$ref": "#/components/schemas/GanjoorPageSummaryViewModel"
          },
          "previous": {
            "$ref": "#/components/schemas/GanjoorPageSummaryViewModel"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Page View Model"
      },
      "GanjoorPageSnapshotSummaryViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "recordDate": {
            "type": "string",
            "description": "record date",
            "format": "date-time"
          },
          "note": {
            "type": "string",
            "description": "a description of the modfication",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "GanjoorPageSnapshot summary view model"
      },
      "GanjoorPageSummaryViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "fullUrl": {
            "type": "string",
            "description": "FullUrl",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Page: Summary View Model"
      },
      "GanjoorPageType": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7
        ],
        "type": "integer",
        "description": "Ganjoor Page Type",
        "format": "int32"
      },
      "GanjoorPaperSource": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "ganjoorPoetId": {
            "type": "integer",
            "description": "poet id",
            "format": "int32"
          },
          "ganjoorCatId": {
            "type": "integer",
            "description": "cat id",
            "format": "int32"
          },
          "ganjoorCatFullTitle": {
            "type": "string",
            "description": "cat full title",
            "nullable": true
          },
          "ganjoorCatFullUrl": {
            "type": "string",
            "description": "cat full url",
            "nullable": true
          },
          "bookType": {
            "$ref": "#/components/schemas/LinkType"
          },
          "bookFullUrl": {
            "type": "string",
            "description": "book full url",
            "nullable": true
          },
          "naskbanBookId": {
            "type": "integer",
            "description": "naskban book id",
            "format": "int32"
          },
          "bookFullTitle": {
            "type": "string",
            "description": "book title",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          },
          "isTextOriginalSource": {
            "type": "boolean",
            "description": "is the text original source for the category?"
          },
          "coverThumbnailImageUrl": {
            "type": "string",
            "description": "cover thumbnail image url",
            "nullable": true
          },
          "matchPercent": {
            "type": "integer",
            "description": "match percent",
            "format": "int32"
          },
          "humanReviewed": {
            "type": "boolean",
            "description": "reviewed by a human"
          },
          "orderIndicator": {
            "type": "integer",
            "description": "position in sorting",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Paper Source"
      },
      "GanjoorPoem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "catId": {
            "type": "integer",
            "description": "cat-id",
            "format": "int32"
          },
          "cat": {
            "$ref": "#/components/schemas/GanjoorCat"
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "fullTitle": {
            "type": "string",
            "description": "cat + parent cats title + title",
            "nullable": true
          },
          "urlSlug": {
            "type": "string",
            "description": "url => slug",
            "nullable": true
          },
          "fullUrl": {
            "type": "string",
            "description": "sample: /hafez/ghazal/sh1",
            "nullable": true
          },
          "plainText": {
            "type": "string",
            "description": "verses text",
            "nullable": true
          },
          "htmlText": {
            "type": "string",
            "description": "verses text as html (ganjoor.net format)",
            "nullable": true
          },
          "ganjoorMetreId": {
            "type": "integer",
            "description": "prosody information",
            "format": "int32",
            "nullable": true
          },
          "ganjoorMetre": {
            "$ref": "#/components/schemas/GanjoorMetre"
          },
          "rhymeLetters": {
            "type": "string",
            "description": "rhyme letters",
            "nullable": true
          },
          "sourceName": {
            "type": "string",
            "description": "source name",
            "nullable": true
          },
          "sourceUrlSlug": {
            "type": "string",
            "description": "source url slug",
            "nullable": true
          },
          "oldTag": {
            "type": "string",
            "description": "old collection or book name for Saadi's ghazalyiat (طیبات، خواتیم و ....)",
            "nullable": true
          },
          "oldTagPageUrl": {
            "type": "string",
            "description": "old collection page url e.g /saadi/tayyebat",
            "nullable": true
          },
          "mixedModeOrder": {
            "type": "integer",
            "description": "order when mixed with categories",
            "format": "int32"
          },
          "published": {
            "type": "boolean",
            "description": "published"
          },
          "language": {
            "type": "string",
            "description": "language  (this is intended to affect html page encodings and not determine actuallly accents and ....)",
            "nullable": true
          },
          "poemSummary": {
            "type": "string",
            "description": "poem summary",
            "nullable": true
          },
          "claimedByMultiplePoets": {
            "type": "boolean",
            "description": "poem is claimed by multiple poets"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Poem"
      },
      "GanjoorPoemCompleteViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "fullTitle": {
            "type": "string",
            "description": "cat + parent cats title + title",
            "nullable": true
          },
          "urlSlug": {
            "type": "string",
            "description": "url => slug",
            "nullable": true
          },
          "fullUrl": {
            "type": "string",
            "description": "sample: /hafez/ghazal/sh1",
            "nullable": true
          },
          "plainText": {
            "type": "string",
            "description": "verses text",
            "nullable": true
          },
          "htmlText": {
            "type": "string",
            "description": "verses text as html (ganjoor.net format)",
            "nullable": true
          },
          "sourceName": {
            "type": "string",
            "description": "source name",
            "nullable": true
          },
          "sourceUrlSlug": {
            "type": "string",
            "description": "source url slug",
            "nullable": true
          },
          "oldTag": {
            "type": "string",
            "description": "old collection or book name for Saadi's ghazalyiat (طیبات، خواتیم و ....)",
            "nullable": true
          },
          "oldTagPageUrl": {
            "type": "string",
            "description": "old collection page url e.g /saadi/tayyebat",
            "nullable": true
          },
          "mixedModeOrder": {
            "type": "integer",
            "description": "order when mixed with categories",
            "format": "int32"
          },
          "published": {
            "type": "boolean",
            "description": "published"
          },
          "language": {
            "type": "string",
            "description": "language",
            "nullable": true
          },
          "poemSummary": {
            "type": "string",
            "description": "poem summary",
            "nullable": true
          },
          "category": {
            "$ref": "#/components/schemas/GanjoorPoetCompleteViewModel"
          },
          "next": {
            "$ref": "#/components/schemas/GanjoorPoemSummaryViewModel"
          },
          "previous": {
            "$ref": "#/components/schemas/GanjoorPoemSummaryViewModel"
          },
          "verses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorVerseViewModel"
            },
            "description": "verses",
            "nullable": true
          },
          "recitations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicRecitationViewModel"
            },
            "description": "Recitations",
            "nullable": true
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PoemRelatedImage"
            },
            "description": "Images",
            "nullable": true
          },
          "songs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PoemMusicTrackViewModel"
            },
            "description": "Songs",
            "nullable": true
          },
          "comments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorCommentSummaryViewModel"
            },
            "description": "Comments",
            "nullable": true
          },
          "sections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorPoemSection"
            },
            "description": "poem sections",
            "nullable": true
          },
          "geoDateTags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PoemGeoDateTag"
            },
            "description": "geo/date tags",
            "nullable": true
          },
          "top6QuotedPoems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorQuotedPoemViewModel"
            },
            "description": "top 6 quoted poems",
            "nullable": true
          },
          "sectionIndex": {
            "type": "integer",
            "description": "section index",
            "format": "int32",
            "nullable": true
          },
          "claimedByMultiplePoets": {
            "type": "boolean",
            "description": "poem is claimed by multiple poets"
          },
          "coupletsCount": {
            "type": "integer",
            "description": "couplets count",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "a more complete GanjoorPoem View Model"
      },
      "GanjoorPoemCorrectionViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Correction Id",
            "format": "int32"
          },
          "poemId": {
            "type": "integer",
            "description": "poem Id",
            "format": "int32"
          },
          "verseOrderText": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorVerseVOrderText"
            },
            "description": "modified verses",
            "nullable": true
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "originalTitle": {
            "type": "string",
            "description": "original title",
            "nullable": true
          },
          "rhythm": {
            "type": "string",
            "description": "rhythm",
            "nullable": true
          },
          "originalRhythm": {
            "type": "string",
            "description": "original rhythm",
            "nullable": true
          },
          "note": {
            "type": "string",
            "description": "note",
            "nullable": true
          },
          "date": {
            "type": "string",
            "description": "date",
            "format": "date-time"
          },
          "userId": {
            "type": "string",
            "description": "user Id",
            "format": "uuid"
          },
          "userNickname": {
            "type": "string",
            "description": "nickname",
            "nullable": true
          },
          "reviewed": {
            "type": "boolean",
            "description": "reviewed"
          },
          "reviewDate": {
            "type": "string",
            "description": "reviewdate",
            "format": "date-time"
          },
          "reviewNote": {
            "type": "string",
            "description": "review note",
            "nullable": true
          },
          "result": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "rhythmResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "rhythm2": {
            "type": "string",
            "description": "rhythm 2",
            "nullable": true
          },
          "originalRhythm2": {
            "type": "string",
            "description": "original rhythm 2",
            "nullable": true
          },
          "rhythm2Result": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "rhythm3": {
            "type": "string",
            "description": "rhythm 3",
            "nullable": true
          },
          "originalRhythm3": {
            "type": "string",
            "description": "original rhythm 3",
            "nullable": true
          },
          "rhythm3Result": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "rhythm4": {
            "type": "string",
            "description": "rhythm 4",
            "nullable": true
          },
          "originalRhythm4": {
            "type": "string",
            "description": "original rhythm 4",
            "nullable": true
          },
          "rhythm4Result": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "rhymeLetters": {
            "type": "string",
            "description": "rhyme letters",
            "nullable": true
          },
          "originalRhymeLetters": {
            "type": "string",
            "description": "original rhyme letters",
            "nullable": true
          },
          "rhymeLettersReviewResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "language": {
            "type": "string",
            "description": "language",
            "nullable": true
          },
          "originalLanguage": {
            "type": "string",
            "description": "original language",
            "nullable": true
          },
          "languageReviewResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "poemSummary": {
            "type": "string",
            "description": "suggested poem summary",
            "nullable": true
          },
          "originalPoemSummary": {
            "type": "string",
            "description": "original poem summary",
            "nullable": true
          },
          "summaryReviewResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "poemFormat": {
            "$ref": "#/components/schemas/GanjoorPoemFormat"
          },
          "originalPoemFormat": {
            "$ref": "#/components/schemas/GanjoorPoemFormat"
          },
          "poemFormatReviewResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "hideMyName": {
            "type": "boolean",
            "description": "hide the editors name"
          }
        },
        "additionalProperties": false,
        "description": "poem correction view model"
      },
      "GanjoorPoemFormat": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          10,
          11,
          16,
          32,
          40,
          45,
          64,
          128,
          176,
          187,
          256,
          512,
          992,
          1024,
          2032,
          2048
        ],
        "type": "integer",
        "description": "poem format",
        "format": "int32"
      },
      "GanjoorPoemSection": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "record id",
            "format": "int32"
          },
          "poemId": {
            "type": "integer",
            "description": "Poem Id",
            "format": "int32"
          },
          "poem": {
            "$ref": "#/components/schemas/GanjoorPoem"
          },
          "poetId": {
            "type": "integer",
            "description": "poet id might be different from GanjoorPoem.PoetId",
            "format": "int32",
            "nullable": true
          },
          "poet": {
            "$ref": "#/components/schemas/GanjoorPoet"
          },
          "index": {
            "type": "integer",
            "description": "use this field instead of Id for referencing to ease record deletion for verses, Index starts at 0, each poem should have at least one non-virtual part ordered by Index without break",
            "format": "int32"
          },
          "number": {
            "type": "integer",
            "description": "for lots of poems Number equals to Index + 1, but for rare ones such as a paragraph containing multi-band poem this could be different, 0 means no visible numbers",
            "format": "int32"
          },
          "sectionType": {
            "$ref": "#/components/schemas/PoemSectionType"
          },
          "verseType": {
            "$ref": "#/components/schemas/VersePoemSectionType"
          },
          "ganjoorMetreId": {
            "type": "integer",
            "description": "prosody information",
            "format": "int32",
            "nullable": true
          },
          "ganjoorMetre": {
            "$ref": "#/components/schemas/GanjoorMetre"
          },
          "ganjoorMetreRefSectionIndex": {
            "type": "integer",
            "description": "for non WholePoem sections, there must be a reference section for meters in order to make them updatable",
            "format": "int32",
            "nullable": true
          },
          "rhymeLetters": {
            "type": "string",
            "description": "rhyme letters",
            "nullable": true
          },
          "plainText": {
            "type": "string",
            "description": "verses text",
            "nullable": true
          },
          "htmlText": {
            "type": "string",
            "description": "verses text as html (ganjoor.net format)",
            "nullable": true
          },
          "poemFormat": {
            "$ref": "#/components/schemas/GanjoorPoemFormat"
          },
          "cachedFirstCoupletIndex": {
            "type": "integer",
            "description": "first couplet index",
            "format": "int32"
          },
          "language": {
            "type": "string",
            "description": "language, null means farsi",
            "nullable": true
          },
          "coupletsCount": {
            "type": "integer",
            "description": "couplets count",
            "format": "int32"
          },
          "top6RelatedSections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorCachedRelatedSection"
            },
            "description": "top 6 related sections",
            "nullable": true
          },
          "oldGanjoorMetreId": {
            "type": "integer",
            "description": "old metre id to see it needs refreshing related sections",
            "format": "int32",
            "nullable": true
          },
          "oldRhymeLetters": {
            "type": "string",
            "description": "old rhyme letters to see it needs refreshing related sections",
            "nullable": true
          },
          "modified": {
            "type": "boolean",
            "description": "modified"
          },
          "excerpt": {
            "type": "string",
            "description": "excerpt",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Poem Section"
      },
      "GanjoorPoemSectionCorrectionViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Correction Id",
            "format": "int32"
          },
          "sectionId": {
            "type": "integer",
            "description": "section id",
            "format": "int32"
          },
          "rhythm": {
            "type": "string",
            "description": "rhythm",
            "nullable": true
          },
          "originalRhythm": {
            "type": "string",
            "description": "original rhythm",
            "nullable": true
          },
          "rhythmResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "rhythm2": {
            "type": "string",
            "description": "rhythm 2",
            "nullable": true
          },
          "originalRhythm2": {
            "type": "string",
            "description": "original rhythm 2",
            "nullable": true
          },
          "rhythmResult2": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse1VOrder": {
            "type": "integer",
            "description": "break from verse1 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse1VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse2VOrder": {
            "type": "integer",
            "description": "break from verse2 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse2VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse3VOrder": {
            "type": "integer",
            "description": "break from verse3 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse3VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse4VOrder": {
            "type": "integer",
            "description": "break from verse4 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse4VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse5VOrder": {
            "type": "integer",
            "description": "break from verse5 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse5VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse6VOrder": {
            "type": "integer",
            "description": "break from verse6 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse6VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse7VOrder": {
            "type": "integer",
            "description": "break from verse7 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse7VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse8VOrder": {
            "type": "integer",
            "description": "break from verse8 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse8VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse9VOrder": {
            "type": "integer",
            "description": "break from verse9 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse9VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "breakFromVerse10VOrder": {
            "type": "integer",
            "description": "break from verse10 VOrder",
            "format": "int32",
            "nullable": true
          },
          "breakFromVerse10VOrderResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "note": {
            "type": "string",
            "description": "note",
            "nullable": true
          },
          "date": {
            "type": "string",
            "description": "date",
            "format": "date-time"
          },
          "userId": {
            "type": "string",
            "description": "user Id",
            "format": "uuid"
          },
          "userNickname": {
            "type": "string",
            "description": "nickname",
            "nullable": true
          },
          "reviewed": {
            "type": "boolean",
            "description": "reviewed"
          },
          "reviewDate": {
            "type": "string",
            "description": "reviewdate",
            "format": "date-time"
          },
          "reviewNote": {
            "type": "string",
            "description": "review note",
            "nullable": true
          },
          "poemId": {
            "type": "integer",
            "description": "poem Id",
            "format": "int32"
          },
          "sectionIndex": {
            "type": "integer",
            "description": "poem Id",
            "format": "int32"
          },
          "rhymeLetters": {
            "type": "string",
            "description": "rhyme letters",
            "nullable": true
          },
          "originalRhymeLetters": {
            "type": "string",
            "description": "original rhyme letters",
            "nullable": true
          },
          "rhymeLettersReviewResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "language": {
            "type": "string",
            "description": "language",
            "nullable": true
          },
          "originalLanguage": {
            "type": "string",
            "description": "original language",
            "nullable": true
          },
          "languageReviewResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "poemFormat": {
            "$ref": "#/components/schemas/GanjoorPoemFormat"
          },
          "originalPoemFormat": {
            "$ref": "#/components/schemas/GanjoorPoemFormat"
          },
          "poemFormatReviewResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "hideMyName": {
            "type": "boolean",
            "description": "hide the editors name"
          }
        },
        "additionalProperties": false,
        "description": "poem section correction view model"
      },
      "GanjoorPoemSummaryViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "urlSlug": {
            "type": "string",
            "description": "url => slug",
            "nullable": true
          },
          "excerpt": {
            "type": "string",
            "description": "excerpt text",
            "nullable": true
          },
          "mainSections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GanjoorPoemSection"
            },
            "description": "whole poem sections",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "poem summary"
      },
      "GanjoorPoet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "name",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          },
          "nickname": {
            "type": "string",
            "description": "short name",
            "nullable": true
          },
          "rImage": {
            "$ref": "#/components/schemas/RImage"
          },
          "rImageId": {
            "type": "string",
            "description": "user image id",
            "format": "uuid",
            "nullable": true
          },
          "published": {
            "type": "boolean",
            "description": "published on website"
          },
          "birthYearInLHijri": {
            "type": "integer",
            "description": "birth year in lunar hijri",
            "format": "int32"
          },
          "deathYearInLHijri": {
            "type": "integer",
            "description": "death year in lunar hijri",
            "format": "int32"
          },
          "pinOrder": {
            "type": "integer",
            "description": "Home page pin order (zero means not pinned)",
            "format": "int32"
          },
          "validBirthDate": {
            "type": "boolean",
            "description": "BirthYearInLHijri, for some poets it is only indicator of their century of birth and should not be relied as their valid birth date"
          },
          "validDeathDate": {
            "type": "boolean",
            "description": "DeathYearInLHijri, for some poets it is only indicator of their century of death and should not be relied as their valid death date"
          },
          "birthLocationId": {
            "type": "integer",
            "description": "birth location id",
            "format": "int32",
            "nullable": true
          },
          "birthLocation": {
            "$ref": "#/components/schemas/GanjoorGeoLocation"
          },
          "deathLocationId": {
            "type": "integer",
            "description": "death location id",
            "format": "int32",
            "nullable": true
          },
          "deathLocation": {
            "$ref": "#/components/schemas/GanjoorGeoLocation"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Poet"
      },
      "GanjoorPoetCompleteViewModel": {
        "type": "object",
        "properties": {
          "poet": {
            "$ref": "#/components/schemas/GanjoorPoetViewModel"
          },
          "cat": {
            "$ref": "#/components/schemas/GanjoorCatViewModel"
          }
        },
        "additionalProperties": false,
        "description": "Poet Complete Information"
      },
      "GanjoorPoetSuggestedPictureViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "poetId": {
            "type": "integer",
            "description": "Poet Id",
            "format": "int32"
          },
          "picOrder": {
            "type": "integer",
            "description": "order",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "description": "Title",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Description",
            "nullable": true
          },
          "imageUrl": {
            "type": "string",
            "description": "image url",
            "nullable": true
          },
          "suggestedById": {
            "type": "string",
            "description": "suggested by id",
            "format": "uuid",
            "nullable": true
          },
          "published": {
            "type": "boolean",
            "description": "published"
          },
          "chosenOne": {
            "type": "boolean",
            "description": "selected"
          },
          "rejectionCause": {
            "type": "string",
            "description": "rejection cause",
            "nullable": true
          },
          "externalNormalSizeImageUrl": {
            "type": "string",
            "description": "external normal size image url",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GanjoorPoetSuggestedSpecLineViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "poetId": {
            "type": "integer",
            "description": "Poet Id",
            "format": "int32"
          },
          "lineOrder": {
            "type": "integer",
            "description": "order",
            "format": "int32"
          },
          "contents": {
            "type": "string",
            "description": "Contents",
            "nullable": true
          },
          "published": {
            "type": "boolean",
            "description": "published"
          },
          "suggestedById": {
            "type": "string",
            "description": "suggested by id",
            "format": "uuid",
            "nullable": true
          },
          "rejectionCause": {
            "type": "string",
            "description": "rejection cause",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Poet Specification view model"
      },
      "GanjoorPoetViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "name",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          },
          "fullUrl": {
            "type": "string",
            "description": "urlslug",
            "nullable": true
          },
          "rootCatId": {
            "type": "integer",
            "description": "root cat id",
            "format": "int32"
          },
          "nickname": {
            "type": "string",
            "description": "short name",
            "nullable": true
          },
          "published": {
            "type": "boolean",
            "description": "published on website"
          },
          "imageUrl": {
            "type": "string",
            "description": "image url",
            "nullable": true
          },
          "birthYearInLHijri": {
            "type": "integer",
            "description": "birth year in lunar hijri",
            "format": "int32"
          },
          "validBirthDate": {
            "type": "boolean",
            "description": "BirthYearInLHijri, for some poets it is only indicator of their century of birth and should not be relied as their valid birth date"
          },
          "deathYearInLHijri": {
            "type": "integer",
            "description": "death year in lunar hijri",
            "format": "int32"
          },
          "validDeathDate": {
            "type": "boolean",
            "description": "DeathYearInLHijri, for some poets it is only indicator of their century of death and should not be relied as their valid death date"
          },
          "pinOrder": {
            "type": "integer",
            "description": "Home page pin order (zero means not pinned)",
            "format": "int32"
          },
          "birthPlace": {
            "type": "string",
            "description": "birth place",
            "nullable": true
          },
          "birthPlaceLatitude": {
            "type": "number",
            "description": "birth place latitude",
            "format": "double"
          },
          "birthPlaceLongitude": {
            "type": "number",
            "description": "birth place longitude",
            "format": "double"
          },
          "deathPlace": {
            "type": "string",
            "description": "death place",
            "nullable": true
          },
          "deathPlaceLatitude": {
            "type": "number",
            "description": "death place latitude",
            "format": "double"
          },
          "deathPlaceLongitude": {
            "type": "number",
            "description": "death place longitude",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Poet"
      },
      "GanjoorPostReportCommentViewModel": {
        "type": "object",
        "properties": {
          "commentId": {
            "type": "integer",
            "description": "comment id",
            "format": "int32"
          },
          "reasonCode": {
            "type": "string",
            "description": "reason code for better grouping: offensive, bogus, other",
            "nullable": true
          },
          "reasonText": {
            "type": "string",
            "description": "some explanotory text provided by reporter",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "report comment view model"
      },
      "GanjoorQuotedPoemModerationViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "record id",
            "format": "uuid"
          },
          "approved": {
            "type": "boolean",
            "description": "approved"
          },
          "reviewNote": {
            "type": "string",
            "description": "review note",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "moderation view model"
      },
      "GanjoorQuotedPoemViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "record id",
            "format": "uuid"
          },
          "poemId": {
            "type": "integer",
            "description": "poem id",
            "format": "int32"
          },
          "poem": {
            "$ref": "#/components/schemas/GanjoorPoem"
          },
          "relatedPoemId": {
            "type": "integer",
            "description": "related poem id (this could be a poem we do not have it available)",
            "format": "int32",
            "nullable": true
          },
          "isPriorToRelated": {
            "type": "boolean",
            "description": "this poem is written and should be displayed prior to the related poem"
          },
          "chosenForMainList": {
            "type": "boolean",
            "description": "if the related poet poem has multiple poems related to this poem, which one is chosen to be shown at main poems pages?"
          },
          "sortOrder": {
            "type": "integer",
            "description": "this sort order can be used to pin a record on top",
            "format": "int32"
          },
          "cachedRelatedPoemPoetDeathYearInLHijri": {
            "type": "integer",
            "description": "related poem peot death date in hijri (used for sorting)",
            "format": "int32"
          },
          "cachedRelatedPoemPoetName": {
            "type": "string",
            "description": "related poem poet name",
            "nullable": true
          },
          "cachedRelatedPoemPoetUrl": {
            "type": "string",
            "description": "related poem poet url",
            "nullable": true
          },
          "cachedRelatedPoemPoetImage": {
            "type": "string",
            "description": "related poem poet image",
            "nullable": true
          },
          "cachedRelatedPoemFullTitle": {
            "type": "string",
            "description": "full title",
            "nullable": true
          },
          "cachedRelatedPoemFullUrl": {
            "type": "string",
            "description": "full url",
            "nullable": true
          },
          "coupletVerse1": {
            "type": "string",
            "description": "couplet 1 verse 1",
            "nullable": true
          },
          "coupletVerse1ShouldBeEmphasized": {
            "type": "boolean",
            "description": "is main part"
          },
          "coupletVerse2": {
            "type": "string",
            "description": "couplet 1 verse 2",
            "nullable": true
          },
          "coupletVerse2ShouldBeEmphasized": {
            "type": "boolean",
            "description": "is main part"
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet 1 index",
            "format": "int32",
            "nullable": true
          },
          "relatedCoupletVerse1": {
            "type": "string",
            "description": "related couplet 1 verse 1",
            "nullable": true
          },
          "relatedCoupletVerse1ShouldBeEmphasized": {
            "type": "boolean",
            "description": "is main part"
          },
          "relatedCoupletVerse2": {
            "type": "string",
            "description": "related couplet 1 verse 2",
            "nullable": true
          },
          "relatedCoupletVerse2ShouldBeEmphasized": {
            "type": "boolean",
            "description": "is main part"
          },
          "relatedCoupletIndex": {
            "type": "integer",
            "description": "related couplet 1 index",
            "format": "int32",
            "nullable": true
          },
          "note": {
            "type": "string",
            "description": "description",
            "nullable": true
          },
          "published": {
            "type": "boolean",
            "description": "published (approved)"
          },
          "samePoemsQuotedCount": {
            "type": "integer",
            "description": "when a poem contains more than one quoted couplet from another one this should be more than 1",
            "format": "int32"
          },
          "claimedByBothPoets": {
            "type": "boolean",
            "description": "poems (same poem) are claimed by both poets"
          },
          "poetId": {
            "type": "integer",
            "description": "poet id (redundant for simplifying queries)",
            "format": "int32"
          },
          "relatedPoetId": {
            "type": "integer",
            "description": "related poet id",
            "format": "int32",
            "nullable": true
          },
          "indirectQuotation": {
            "type": "boolean",
            "description": "related indirectly"
          },
          "rejected": {
            "type": "boolean",
            "description": "approved"
          },
          "reviewNote": {
            "type": "string",
            "description": "review note",
            "nullable": true
          },
          "suggestedById": {
            "type": "string",
            "description": "suggested by",
            "format": "uuid",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "quoted poem view model"
      },
      "GanjoorRelatedPerson": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "name",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          },
          "wikiUrl": {
            "type": "string",
            "description": "wikipedia url",
            "nullable": true
          },
          "birthYearInLHijri": {
            "type": "integer",
            "description": "birth year in lunar hijri",
            "format": "int32"
          },
          "deathYearInLHijri": {
            "type": "integer",
            "description": "death year in lunar hijri",
            "format": "int32"
          },
          "validBirthDate": {
            "type": "boolean",
            "description": "BirthYearInLHijri, for some poets it is only indicator of their century of birth and should not be relied as their valid birth date"
          },
          "validDeathDate": {
            "type": "boolean",
            "description": "DeathYearInLHijri, for some poets it is only indicator of their century of death and should not be relied as their valid death date"
          },
          "birthLocationId": {
            "type": "integer",
            "description": "birth location id",
            "format": "int32",
            "nullable": true
          },
          "birthLocation": {
            "$ref": "#/components/schemas/GanjoorGeoLocation"
          },
          "deathLocationId": {
            "type": "integer",
            "description": "death location id",
            "format": "int32",
            "nullable": true
          },
          "deathLocation": {
            "$ref": "#/components/schemas/GanjoorGeoLocation"
          },
          "machineGenerated": {
            "type": "boolean",
            "description": "AI generated"
          }
        },
        "additionalProperties": false,
        "description": "a person refered by a poem"
      },
      "GanjoorSiteBannerModifyViewModel": {
        "type": "object",
        "properties": {
          "alternateText": {
            "type": "string",
            "description": "alternate text",
            "nullable": true
          },
          "targetUrl": {
            "type": "string",
            "description": "target url",
            "nullable": true
          },
          "active": {
            "type": "boolean",
            "description": "active"
          }
        },
        "additionalProperties": false,
        "description": "GanjoorSiteBanner PUT ViewModel"
      },
      "GanjoorSiteBannerViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "imageUrl": {
            "type": "string",
            "description": "image url",
            "nullable": true
          },
          "alternateText": {
            "type": "string",
            "description": "alternate text",
            "nullable": true
          },
          "targetUrl": {
            "type": "string",
            "description": "target url",
            "nullable": true
          },
          "active": {
            "type": "boolean",
            "description": "active"
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Site Banner View Model"
      },
      "GanjoorTOC": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12
        ],
        "type": "integer",
        "description": "ganjoor TOC options",
        "format": "int32"
      },
      "GanjoorTajikPoet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "tajikNickname": {
            "type": "string",
            "description": "tajik nick name",
            "nullable": true
          },
          "tajikDescription": {
            "type": "string",
            "description": "additional description or note in Tajik",
            "nullable": true
          },
          "birthYearInLHijri": {
            "type": "integer",
            "description": "birth year in lunar hijri",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "GanjoorUserBookmarkViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "poetName": {
            "type": "string",
            "description": "poet name",
            "nullable": true
          },
          "poetImageUrl": {
            "type": "string",
            "description": "poet image url",
            "nullable": true
          },
          "poemFullTitle": {
            "type": "string",
            "description": "poem full title",
            "nullable": true
          },
          "poemFullUrl": {
            "type": "string",
            "description": "sample: /hafez/ghazal/sh1",
            "nullable": true
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet index",
            "format": "int32"
          },
          "verseText": {
            "type": "string",
            "description": "verse1 text",
            "nullable": true
          },
          "verse2Text": {
            "type": "string",
            "description": "verse2 text",
            "nullable": true
          },
          "dateTime": {
            "type": "string",
            "description": "DateTime",
            "format": "date-time"
          },
          "privateNote": {
            "type": "string",
            "description": "private note for bookmark",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GanjoorUserPrePoemVisitViewModel": {
        "type": "object",
        "properties": {
          "lastVisit": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "totalVisits": {
            "type": "integer",
            "format": "int32"
          },
          "keepTrack": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "GanjoorUserPublicProfile": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "rImageId": {
            "type": "string",
            "description": "user image",
            "format": "uuid",
            "nullable": true
          },
          "nickName": {
            "type": "string",
            "description": "nick name",
            "nullable": true
          },
          "bio": {
            "type": "string",
            "description": "biography",
            "nullable": true
          },
          "website": {
            "type": "string",
            "description": "web site",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "ganjoor user public profile"
      },
      "GanjoorVerseVOrderText": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "record id",
            "format": "int32"
          },
          "voRder": {
            "type": "integer",
            "description": "verse order",
            "format": "int32"
          },
          "text": {
            "type": "string",
            "description": "text",
            "nullable": true
          },
          "originalText": {
            "type": "string",
            "description": "original text",
            "nullable": true
          },
          "result": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "reviewNote": {
            "type": "string",
            "description": "note",
            "nullable": true
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet indexs",
            "format": "int32",
            "nullable": true
          },
          "versePosition": {
            "$ref": "#/components/schemas/VersePosition"
          },
          "originalVersePosition": {
            "$ref": "#/components/schemas/VersePosition"
          },
          "versePositionResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "markForDelete": {
            "type": "boolean",
            "description": "mark for delete"
          },
          "markForDeleteResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "newVerse": {
            "type": "boolean",
            "description": "new verse, if it is a new verse you should insert it in VORder position and shift verses previously positioned at VORder and after that"
          },
          "newVerseResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "languageId": {
            "type": "integer",
            "description": "language id",
            "format": "int32",
            "nullable": true
          },
          "originalLanguageId": {
            "type": "integer",
            "description": "original language id",
            "format": "int32",
            "nullable": true
          },
          "languageReviewResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          },
          "coupletSummary": {
            "type": "string",
            "description": "suggested couplet summary",
            "nullable": true
          },
          "originalCoupletSummary": {
            "type": "string",
            "description": "original couplet summary",
            "nullable": true
          },
          "summaryReviewResult": {
            "$ref": "#/components/schemas/CorrectionReviewResult"
          }
        },
        "additionalProperties": false,
        "description": "Verse Vorder / Text"
      },
      "GanjoorVerseViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "global id, auto generated (missing in Ganjoor Desktop database)",
            "format": "int32"
          },
          "vOrder": {
            "type": "integer",
            "description": "vorder",
            "format": "int32"
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet index",
            "format": "int32",
            "nullable": true
          },
          "versePosition": {
            "$ref": "#/components/schemas/VersePosition"
          },
          "sectionIndex1": {
            "type": "integer",
            "description": "GanjoorPoemSection index",
            "format": "int32",
            "nullable": true
          },
          "sectionIndex2": {
            "type": "integer",
            "description": "second GanjoorPoemSection index",
            "format": "int32",
            "nullable": true
          },
          "sectionIndex3": {
            "type": "integer",
            "description": "third GanjoorPoemSection index",
            "format": "int32",
            "nullable": true
          },
          "sectionIndex4": {
            "type": "integer",
            "description": "forth GanjoorPoemSection index",
            "format": "int32",
            "nullable": true
          },
          "text": {
            "type": "string",
            "description": "text",
            "nullable": true
          },
          "languageId": {
            "type": "integer",
            "description": "language id",
            "format": "int32",
            "nullable": true
          },
          "coupletSummary": {
            "type": "string",
            "description": "couplet summary",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Verse View Model"
      },
      "GolhaProgramViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          },
          "programOrder": {
            "type": "integer",
            "description": "program order",
            "format": "int32"
          },
          "url": {
            "type": "string",
            "description": "url",
            "nullable": true
          },
          "mp3": {
            "type": "string",
            "description": "mp3",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Golha Program View Model"
      },
      "GolhaTrackViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "trackNo": {
            "type": "integer",
            "description": "track no",
            "format": "int32"
          },
          "timing": {
            "type": "string",
            "description": "timing",
            "nullable": true
          },
          "title": {
            "type": "string",
            "description": "title",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Golha Track View Model"
      },
      "GroupedByDateViewModel": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "date (day date or month or ...)",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "number of clicks",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "GroupedByUserViewModel": {
        "type": "object",
        "properties": {
          "number": {
            "type": "integer",
            "description": "number of clicks",
            "format": "int32"
          },
          "userId": {
            "type": "string",
            "description": "user id",
            "format": "uuid"
          },
          "userName": {
            "type": "string",
            "description": "user name",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "grouped by user view model"
      },
      "ImportJob": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "jobType": {
            "$ref": "#/components/schemas/JobType"
          },
          "resourceNumber": {
            "type": "string",
            "nullable": true
          },
          "friendlyUrl": {
            "type": "string",
            "nullable": true
          },
          "srcUrl": {
            "type": "string",
            "nullable": true
          },
          "queueTime": {
            "type": "string",
            "format": "date-time"
          },
          "startTime": {
            "type": "string",
            "format": "date-time"
          },
          "endTime": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/ImportJobStatus"
          },
          "progressPercent": {
            "type": "number",
            "format": "double"
          },
          "exception": {
            "type": "string",
            "nullable": true
          },
          "artifact": {
            "$ref": "#/components/schemas/RArtifactMasterRecord"
          },
          "artifactId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "srcContent": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Import Job"
      },
      "ImportJobStatus": {
        "enum": [
          0,
          1,
          2,
          3,
          4
        ],
        "type": "integer",
        "format": "int32"
      },
      "JobType": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13
        ],
        "type": "integer",
        "description": "Job Type",
        "format": "int32"
      },
      "LinkSuggestion": {
        "type": "object",
        "properties": {
          "ganjoorPostId": {
            "type": "integer",
            "description": "Ganjoor Post Id",
            "format": "int32"
          },
          "ganjoorUrl": {
            "type": "string",
            "description": "ganjoor url",
            "nullable": true
          },
          "ganjoorTitle": {
            "type": "string",
            "description": "ganjoor title",
            "nullable": true
          },
          "artifactFriendlyUrl": {
            "type": "string",
            "description": "Artifact Friendly Url",
            "nullable": true
          },
          "itemId": {
            "type": "string",
            "description": "Artifact Item Id",
            "format": "uuid",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Link Suggestion"
      },
      "LinkType": {
        "enum": [
          0,
          1,
          2,
          3,
          4
        ],
        "type": "integer",
        "description": "Link Type",
        "format": "int32"
      },
      "LoggedOnUserModel": {
        "type": "object",
        "properties": {
          "sessionId": {
            "type": "string",
            "description": "Session Id",
            "format": "uuid"
          },
          "token": {
            "type": "string",
            "description": "Security Token",
            "nullable": true
          },
          "user": {
            "$ref": "#/components/schemas/PublicRAppUser"
          },
          "securableItem": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SecurableItem"
            },
            "description": "Permissions",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Logged On User Model"
      },
      "LoginViewModel": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "username",
            "nullable": true,
            "example": "email@domain.com"
          },
          "password": {
            "type": "string",
            "description": "password",
            "nullable": true,
            "example": "Test!123"
          },
          "clientAppName": {
            "type": "string",
            "description": "Client App Name",
            "nullable": true,
            "example": "Swashbuckle UI Client"
          },
          "language": {
            "type": "string",
            "description": "Client Language",
            "nullable": true,
            "example": "fa-IR"
          }
        },
        "additionalProperties": false,
        "description": "AppUserController.Login parameter"
      },
      "NewNotificationViewModel": {
        "type": "object",
        "properties": {
          "subject": {
            "type": "string",
            "description": "Subject",
            "nullable": true
          },
          "htmlText": {
            "type": "string",
            "description": "Text",
            "nullable": true
          },
          "notificationType": {
            "$ref": "#/components/schemas/NotificationType"
          }
        },
        "additionalProperties": false,
        "description": "new notification view model"
      },
      "NotificationStatus": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "description": "Notifaction Status",
        "format": "int32"
      },
      "NotificationType": {
        "enum": [
          0,
          1,
          2,
          3,
          4
        ],
        "type": "integer",
        "description": "notifiction type",
        "format": "int32"
      },
      "PinterestLinkViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "ganjoorPostId": {
            "type": "integer",
            "description": "Ganjoor Post Id",
            "format": "int32"
          },
          "ganjoorUrl": {
            "type": "string",
            "description": "ganjoor url",
            "nullable": true
          },
          "ganjoorTitle": {
            "type": "string",
            "description": "ganjoor title",
            "nullable": true
          },
          "altText": {
            "type": "string",
            "description": "alt text",
            "nullable": true
          },
          "linkType": {
            "$ref": "#/components/schemas/LinkType"
          },
          "pinterestUrl": {
            "type": "string",
            "description": "pinterest url",
            "nullable": true
          },
          "pinterestImageUrl": {
            "type": "string",
            "description": "pinterest image url",
            "nullable": true
          },
          "suggestionDate": {
            "type": "string",
            "description": "Suggestion Date",
            "format": "date-time"
          },
          "reviewerId": {
            "type": "string",
            "description": "User id who reviewed the link",
            "format": "uuid",
            "nullable": true
          },
          "reviewDate": {
            "type": "string",
            "description": "Review Date",
            "format": "date-time"
          },
          "reviewResult": {
            "$ref": "#/components/schemas/ReviewResult"
          },
          "reviewDesc": {
            "type": "string",
            "description": "review description",
            "nullable": true
          },
          "artifactId": {
            "type": "string",
            "description": "Artifact Id",
            "format": "uuid",
            "nullable": true
          },
          "itemId": {
            "type": "string",
            "description": "Artifact Item Id",
            "format": "uuid",
            "nullable": true
          },
          "synchronized": {
            "type": "boolean",
            "description": "Synchronized with ganjoor"
          },
          "entityName": {
            "type": "string",
            "description": "entity name",
            "nullable": true
          },
          "entityFriendlyUrl": {
            "type": "string",
            "description": "entity friendly url",
            "nullable": true
          },
          "entityImageId": {
            "type": "string",
            "description": "entity image id",
            "format": "uuid"
          }
        },
        "additionalProperties": false,
        "description": "Safe pinterest link view model"
      },
      "PinterestSuggestion": {
        "type": "object",
        "properties": {
          "ganjoorPostId": {
            "type": "integer",
            "description": "Ganjoor Post Id",
            "format": "int32"
          },
          "ganjoorUrl": {
            "type": "string",
            "description": "ganjoor url",
            "nullable": true
          },
          "ganjoorTitle": {
            "type": "string",
            "description": "ganjoor title",
            "nullable": true
          },
          "altText": {
            "type": "string",
            "description": "alt text",
            "nullable": true
          },
          "linkType": {
            "$ref": "#/components/schemas/LinkType"
          },
          "pinterestUrl": {
            "type": "string",
            "description": "pinterest url",
            "nullable": true
          },
          "pinterestImageUrl": {
            "type": "string",
            "description": "pinterest image url",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "pinterest / ganjoor link suggestion view model"
      },
      "PoemGeoDateTag": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "poemId": {
            "type": "integer",
            "description": "Poem Id",
            "format": "int32"
          },
          "poem": {
            "$ref": "#/components/schemas/GanjoorPoem"
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet index",
            "format": "int32"
          },
          "locationId": {
            "type": "integer",
            "description": "location",
            "format": "int32",
            "nullable": true
          },
          "location": {
            "$ref": "#/components/schemas/GanjoorGeoLocation"
          },
          "lunarYear": {
            "type": "integer",
            "description": "Hijri Ghamari year",
            "format": "int32",
            "nullable": true
          },
          "lunarMonth": {
            "type": "integer",
            "description": "Hijri Ghamari month",
            "format": "int32",
            "nullable": true
          },
          "lunarDay": {
            "type": "integer",
            "description": "Hijri Ghamari day",
            "format": "int32",
            "nullable": true
          },
          "lunarDateTotalNumber": {
            "type": "integer",
            "description": "sample: 14440101, would be used in sorting events",
            "format": "int32",
            "nullable": true
          },
          "verifiedDate": {
            "type": "boolean",
            "description": "verified date"
          },
          "ignoreInCategory": {
            "type": "boolean",
            "description": "ignore in category"
          },
          "personId": {
            "type": "integer",
            "description": "related person id",
            "format": "int32",
            "nullable": true
          },
          "person": {
            "$ref": "#/components/schemas/GanjoorRelatedPerson"
          },
          "machineGenerated": {
            "type": "boolean",
            "description": "AI generated"
          }
        },
        "additionalProperties": false,
        "description": "Geo + date tags for poems"
      },
      "PoemMusicTrackType": {
        "enum": [
          0,
          1,
          2,
          3,
          -1
        ],
        "type": "integer",
        "description": "poem music track type",
        "format": "int32"
      },
      "PoemMusicTrackViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "poemId": {
            "type": "integer",
            "description": "poem id",
            "format": "int32"
          },
          "trackType": {
            "$ref": "#/components/schemas/PoemMusicTrackType"
          },
          "artistName": {
            "type": "string",
            "description": "artist name",
            "nullable": true
          },
          "artistUrl": {
            "type": "string",
            "description": "artist url",
            "nullable": true
          },
          "albumName": {
            "type": "string",
            "description": "album name",
            "nullable": true
          },
          "albumUrl": {
            "type": "string",
            "description": "album url",
            "nullable": true
          },
          "trackName": {
            "type": "string",
            "description": "track name",
            "nullable": true
          },
          "trackUrl": {
            "type": "string",
            "description": "track url",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          },
          "brokenLink": {
            "type": "boolean",
            "description": "broken link"
          },
          "golhaTrackId": {
            "type": "integer",
            "description": "golha id",
            "format": "int32"
          },
          "approved": {
            "type": "boolean",
            "description": "approved"
          },
          "rejected": {
            "type": "boolean",
            "description": "instead of deleting rejected songs keep track of them"
          },
          "rejectionCause": {
            "type": "string",
            "description": "rejection cause",
            "nullable": true
          },
          "suggestedById": {
            "type": "string",
            "description": "Suggested by user id (only filled for review)",
            "format": "uuid",
            "nullable": true
          },
          "suggestedByNickName": {
            "type": "string",
            "description": "Suggested by user name (only filled for review)",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Ganjoor Poem related music track model"
      },
      "PoemNarrationModerationResult": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "description": "Moderation Result",
        "format": "int32"
      },
      "PoemRelatedImage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "link id",
            "format": "uuid"
          },
          "imageOrder": {
            "type": "integer",
            "description": "Image Order",
            "format": "int32"
          },
          "poemRelatedImageType": {
            "$ref": "#/components/schemas/PoemRelatedImageType"
          },
          "thumbnailImageUrl": {
            "type": "string",
            "description": "thumbnail image url",
            "nullable": true
          },
          "targetPageUrl": {
            "type": "string",
            "description": "target page url",
            "nullable": true
          },
          "altText": {
            "type": "string",
            "description": "alternate text",
            "nullable": true
          },
          "isTextOriginalSource": {
            "type": "boolean",
            "description": "is text original source"
          }
        },
        "additionalProperties": false,
        "description": "Poem Related Images"
      },
      "PoemRelatedImageEx": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "link id",
            "format": "uuid"
          },
          "imageOrder": {
            "type": "integer",
            "description": "Image Order",
            "format": "int32"
          },
          "poemRelatedImageType": {
            "$ref": "#/components/schemas/PoemRelatedImageType"
          },
          "thumbnailImageUrl": {
            "type": "string",
            "description": "thumbnail image url",
            "nullable": true
          },
          "targetPageUrl": {
            "type": "string",
            "description": "target page url",
            "nullable": true
          },
          "altText": {
            "type": "string",
            "description": "alternate text",
            "nullable": true
          },
          "isTextOriginalSource": {
            "type": "boolean",
            "description": "is text original source"
          },
          "poemId": {
            "type": "integer",
            "description": "poem id",
            "format": "int32"
          },
          "poemFullUrl": {
            "type": "string",
            "description": "poem url",
            "nullable": true
          },
          "poemFullTitle": {
            "type": "string",
            "description": "poem full title",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PoemRelatedImageType": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "description": "Related Image Type",
        "format": "int32"
      },
      "PoemSectionType": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "description": "poem section type",
        "format": "int32"
      },
      "PoemVerseOrder": {
        "type": "object",
        "properties": {
          "poemId": {
            "type": "integer",
            "description": "poem id",
            "format": "int32"
          },
          "vOrder": {
            "type": "integer",
            "description": "verse order",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "poem + verse order"
      },
      "PoetOrCatWordStat": {
        "type": "object",
        "properties": {
          "catId": {
            "type": "integer",
            "format": "int32"
          },
          "poetId": {
            "type": "integer",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "count": {
            "type": "integer",
            "format": "int32"
          },
          "rowNmbrInCat": {
            "type": "integer",
            "format": "int32"
          },
          "totalWordCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "PostRUserNoteAbuseReportViewModel": {
        "type": "object",
        "properties": {
          "noteId": {
            "type": "string",
            "description": "note Id",
            "format": "uuid"
          },
          "reasonText": {
            "type": "string",
            "description": "reason text",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "user note report view model"
      },
      "PostUserNote": {
        "type": "object",
        "properties": {
          "entityId": {
            "type": "string",
            "description": "Artifact / Item Id",
            "format": "uuid"
          },
          "noteType": {
            "$ref": "#/components/schemas/RNoteType"
          },
          "contents": {
            "type": "string",
            "description": "Contents",
            "nullable": true
          },
          "referenceNoteId": {
            "type": "string",
            "description": "Reference Note Id",
            "format": "uuid",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "New User Note For Artifact"
      },
      "PublicRAppUser": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid",
            "nullable": true
          },
          "username": {
            "minLength": 4,
            "type": "string",
            "description": "User Name",
            "nullable": true,
            "example": "test"
          },
          "email": {
            "type": "string",
            "description": "User Email",
            "format": "email",
            "nullable": true,
            "example": "email@domain.com"
          },
          "phoneNumber": {
            "type": "string",
            "description": "User Mobile Phone Number",
            "format": "tel",
            "nullable": true,
            "example": "+989121234567"
          },
          "firstName": {
            "minLength": 1,
            "type": "string",
            "description": "First Name",
            "nullable": true,
            "example": "Hamid Reza"
          },
          "surName": {
            "minLength": 1,
            "type": "string",
            "description": "SurName",
            "nullable": true,
            "example": "Mohammadi"
          },
          "status": {
            "$ref": "#/components/schemas/RAppUserStatus"
          },
          "rImageId": {
            "type": "string",
            "description": "user image",
            "format": "uuid",
            "nullable": true
          },
          "nickName": {
            "type": "string",
            "description": "nick name",
            "nullable": true
          },
          "bio": {
            "type": "string",
            "description": "biography",
            "nullable": true
          },
          "website": {
            "type": "string",
            "description": "web site",
            "nullable": true
          },
          "emailConfirmed": {
            "type": "boolean",
            "description": "email verified"
          },
          "createDate": {
            "type": "string",
            "description": "create date",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "user informtaion"
      },
      "PublicRUserSession": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Session Id",
            "format": "uuid"
          },
          "rAppUser": {
            "$ref": "#/components/schemas/PublicRAppUser"
          },
          "clientIPAddress": {
            "type": "string",
            "description": "Client IP Address",
            "nullable": true
          },
          "clientAppName": {
            "type": "string",
            "description": "Client Application Name",
            "nullable": true,
            "example": "App Angular Client"
          },
          "language": {
            "type": "string",
            "description": "Client Language",
            "nullable": true,
            "example": "fa-IR"
          },
          "loginTime": {
            "type": "string",
            "description": "Login Date",
            "format": "date-time"
          },
          "lastRenewal": {
            "type": "string",
            "description": "Last Renewal",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "a safe subset of RUserSession"
      },
      "PublicRecitationViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Audio Id",
            "format": "int32"
          },
          "poemId": {
            "type": "integer",
            "description": "Ganjoor Post Id",
            "format": "int32"
          },
          "poemFullTitle": {
            "type": "string",
            "description": "Poem Full Title",
            "nullable": true
          },
          "poemFullUrl": {
            "type": "string",
            "description": "Poem Full Url (without domain name)",
            "nullable": true
          },
          "audioTitle": {
            "type": "string",
            "description": "Audio Title",
            "nullable": true
          },
          "audioArtist": {
            "type": "string",
            "description": "Audio Artist",
            "nullable": true
          },
          "audioArtistUrl": {
            "type": "string",
            "description": "Audio Artist Url",
            "nullable": true
          },
          "audioSrc": {
            "type": "string",
            "description": "Audio Source",
            "nullable": true
          },
          "audioSrcUrl": {
            "type": "string",
            "description": "Audio Src Url",
            "nullable": true
          },
          "legacyAudioGuid": {
            "type": "string",
            "description": "Legacy Audio Guid",
            "format": "uuid"
          },
          "mp3FileCheckSum": {
            "type": "string",
            "description": "Audio File CheckSum",
            "nullable": true
          },
          "mp3SizeInBytes": {
            "type": "integer",
            "description": "mp3 size in bytes",
            "format": "int32"
          },
          "publishDate": {
            "type": "string",
            "description": "Publish Date",
            "format": "date-time"
          },
          "fileLastUpdated": {
            "type": "string",
            "description": "File Last Updated",
            "format": "date-time"
          },
          "mp3Url": {
            "type": "string",
            "description": "Mp3 Url",
            "nullable": true
          },
          "xmlText": {
            "type": "string",
            "description": "Xml Text, xml file url is {WebServiceUrl.Url}/api/audio/file/{audio.Id}.xml",
            "nullable": true
          },
          "plainText": {
            "type": "string",
            "description": "Poem Plain Text",
            "nullable": true
          },
          "htmlText": {
            "type": "string",
            "description": "Poem Html Text",
            "nullable": true
          },
          "mistakes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecitationMistakeViewModel"
            },
            "description": "mistakes",
            "nullable": true
          },
          "audioOrder": {
            "type": "integer",
            "description": "This determines where an audio is displayed between a list of sounds related to a specfic poem",
            "format": "int32"
          },
          "recitationType": {
            "$ref": "#/components/schemas/RecitationType"
          },
          "inSyncWithText": {
            "type": "boolean",
            "description": "in sync with text"
          },
          "upVotedByUser": {
            "type": "boolean",
            "description": "upvoted by current user (filled at client)"
          }
        },
        "additionalProperties": false,
        "description": "Public (no user specific data) for publish recitations"
      },
      "PublishStatus": {
        "enum": [
          0,
          1,
          2,
          4,
          8,
          16,
          32
        ],
        "type": "integer",
        "description": "Items or pictures status",
        "format": "int32"
      },
      "QueuedFTPUpload": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "localFilePath": {
            "type": "string",
            "description": "local file path",
            "nullable": true
          },
          "remoteFilePath": {
            "type": "string",
            "description": "remote file path",
            "nullable": true
          },
          "deleteFileAfterUpload": {
            "type": "boolean",
            "description": "delete file after upload"
          },
          "queueDate": {
            "type": "string",
            "description": "queue date",
            "format": "date-time"
          },
          "processing": {
            "type": "boolean",
            "description": "processing"
          },
          "processDate": {
            "type": "string",
            "description": "process date",
            "format": "date-time",
            "nullable": true
          },
          "error": {
            "type": "string",
            "description": "error",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Queued FTP Upload"
      },
      "RAppRole": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "normalizedName": {
            "type": "string",
            "nullable": true
          },
          "concurrencyStamp": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Description",
            "nullable": true
          },
          "permissions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RPermission"
            },
            "description": "Permissions",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Role Permissions (a set of defined permision policies which could be assigned to users)"
      },
      "RAppUser": {
        "required": [
          "createDate",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "userName": {
            "type": "string",
            "nullable": true
          },
          "normalizedUserName": {
            "type": "string",
            "nullable": true
          },
          "email": {
            "type": "string",
            "nullable": true
          },
          "normalizedEmail": {
            "type": "string",
            "nullable": true
          },
          "emailConfirmed": {
            "type": "boolean"
          },
          "passwordHash": {
            "type": "string",
            "nullable": true
          },
          "securityStamp": {
            "type": "string",
            "nullable": true
          },
          "concurrencyStamp": {
            "type": "string",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "nullable": true
          },
          "phoneNumberConfirmed": {
            "type": "boolean"
          },
          "twoFactorEnabled": {
            "type": "boolean"
          },
          "lockoutEnd": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "lockoutEnabled": {
            "type": "boolean"
          },
          "accessFailedCount": {
            "type": "integer",
            "format": "int32"
          },
          "firstName": {
            "minLength": 1,
            "type": "string",
            "description": "First Name",
            "nullable": true
          },
          "surName": {
            "minLength": 1,
            "type": "string",
            "description": "Sur Name",
            "nullable": true
          },
          "createDate": {
            "type": "string",
            "description": "User Creation Date",
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/RAppUserStatus"
          },
          "rImage": {
            "$ref": "#/components/schemas/RImage"
          },
          "rImageId": {
            "type": "string",
            "description": "user image id",
            "format": "uuid",
            "nullable": true
          },
          "nickName": {
            "type": "string",
            "description": "nick name",
            "nullable": true
          },
          "bio": {
            "type": "string",
            "description": "biography",
            "nullable": true
          },
          "website": {
            "type": "string",
            "description": "web site",
            "nullable": true
          },
          "screenName": {
            "type": "string",
            "description": "user screen name",
            "nullable": true
          },
          "lockoutMessage": {
            "type": "string",
            "description": "if user is locked out purposely as some kind of temporary punishment put the message for him or her here",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Application User"
      },
      "RAppUserStatus": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "description": "User Status",
        "format": "int32"
      },
      "RArtifactItemRecord": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "rArtifactMasterRecordId": {
            "type": "string",
            "description": "parent id",
            "format": "uuid"
          },
          "order": {
            "type": "integer",
            "description": "Order in Collections",
            "format": "int32"
          },
          "friendlyUrl": {
            "type": "string",
            "description": "Friendly Url",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true
          },
          "nameInEnglish": {
            "type": "string",
            "description": "Name In English",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Description",
            "nullable": true
          },
          "descriptionInEnglish": {
            "type": "string",
            "description": "Description In English",
            "nullable": true
          },
          "coverImageIndex": {
            "type": "integer",
            "description": "Main Image",
            "format": "int32"
          },
          "lastModified": {
            "type": "string",
            "description": "Last Modified for caching purposes",
            "format": "date-time"
          },
          "images": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RPictureFile"
            },
            "description": "All Images",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RTagValue"
            },
            "description": "Attributes",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RArtifactItemRecordViewModel": {
        "type": "object",
        "properties": {
          "item": {
            "$ref": "#/components/schemas/RArtifactItemRecord"
          },
          "parentFriendlyUrl": {
            "type": "string",
            "description": "parent",
            "nullable": true
          },
          "parentName": {
            "type": "string",
            "description": "parent name",
            "nullable": true
          },
          "parentImageId": {
            "type": "string",
            "description": "parent image",
            "format": "uuid"
          },
          "parentExternalNormalSizeImageUrl": {
            "type": "string",
            "description": "parent image external url",
            "nullable": true
          },
          "parentItemCount": {
            "type": "integer",
            "description": "parent item count",
            "format": "int32"
          },
          "nextItemFriendlyUrl": {
            "type": "string",
            "description": "empty or null means this is last item",
            "nullable": true
          },
          "nextItemImageId": {
            "type": "string",
            "description": "next image",
            "format": "uuid",
            "nullable": true
          },
          "nextItemExternalNormalSizeImageUrl": {
            "type": "string",
            "description": "next image external url",
            "nullable": true
          },
          "previousItemFriendlyUrl": {
            "type": "string",
            "description": "empty or null means this is first item",
            "nullable": true
          },
          "prevItemImageId": {
            "type": "string",
            "description": "prev image",
            "format": "uuid",
            "nullable": true
          },
          "prevItemExternalNormalSizeImageUrl": {
            "type": "string",
            "description": "prev image external url",
            "nullable": true
          },
          "formattedTags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RArtifactTagViewModel"
            },
            "description": "Formatted Tags",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "RArtifactItemRecord with additional info"
      },
      "RArtifactMasterRecord": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "friendlyUrl": {
            "type": "string",
            "description": "Friendly Url",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/PublishStatus"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true
          },
          "nameInEnglish": {
            "type": "string",
            "description": "Name In English",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Description",
            "nullable": true
          },
          "descriptionInEnglish": {
            "type": "string",
            "description": "Description In English",
            "nullable": true
          },
          "dateTime": {
            "type": "string",
            "description": "Date/Time",
            "format": "date-time"
          },
          "lastModified": {
            "type": "string",
            "description": "Last Modified for caching purposes",
            "format": "date-time"
          },
          "coverItemIndex": {
            "type": "integer",
            "description": "Cover Item Index",
            "format": "int32"
          },
          "coverImage": {
            "$ref": "#/components/schemas/RPictureFile"
          },
          "coverImageId": {
            "type": "string",
            "description": "Cover Image Id",
            "format": "uuid"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RArtifactItemRecord"
            },
            "description": "Parts of this item",
            "nullable": true
          },
          "itemCount": {
            "type": "integer",
            "description": "Item Count (for lists and queries)",
            "format": "int32"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RTagValue"
            },
            "description": "Attributes",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Museum Master Item"
      },
      "RArtifactMasterRecordViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "friendlyUrl": {
            "type": "string",
            "description": "Friendly Url",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/PublishStatus"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true
          },
          "nameInEnglish": {
            "type": "string",
            "description": "Name In English",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Description",
            "nullable": true
          },
          "descriptionInEnglish": {
            "type": "string",
            "description": "Description In English",
            "nullable": true
          },
          "dateTime": {
            "type": "string",
            "description": "Date/Time",
            "format": "date-time"
          },
          "lastModified": {
            "type": "string",
            "description": "Last Modified for caching purposes",
            "format": "date-time"
          },
          "coverItemIndex": {
            "type": "integer",
            "description": "Cover Item Index",
            "format": "int32"
          },
          "coverImage": {
            "$ref": "#/components/schemas/RPictureFile"
          },
          "coverImageId": {
            "type": "string",
            "description": "Cover Image Id",
            "format": "uuid"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RArtifactItemRecord"
            },
            "description": "Parts of this item",
            "nullable": true
          },
          "itemCount": {
            "type": "integer",
            "description": "Item Count (for lists and queries)",
            "format": "int32"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RTagValue"
            },
            "description": "Attributes",
            "nullable": true
          },
          "artifactTags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RArtifactTagViewModel"
            },
            "description": "Tags",
            "nullable": true
          },
          "rTagSums": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RTagSum"
            },
            "description": "Binary Tagged Items",
            "nullable": true
          },
          "contents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RTitleInContents"
            },
            "description": "Titles of Items in Contents",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Museum Master Item View Model"
      },
      "RArtifactTagViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "order": {
            "type": "integer",
            "description": "Order",
            "format": "int32"
          },
          "tagType": {
            "$ref": "#/components/schemas/RTagType"
          },
          "friendlyUrl": {
            "type": "string",
            "description": "Friendly Url",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/PublishStatus"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true
          },
          "nameInEnglish": {
            "type": "string",
            "description": "Name In English",
            "nullable": true
          },
          "pluralName": {
            "type": "string",
            "description": "Plural Name",
            "nullable": true
          },
          "pluralNameInEnglish": {
            "type": "string",
            "description": "Plural Name In English",
            "nullable": true
          },
          "globalValue": {
            "type": "boolean",
            "description": "Value is normally changed globally"
          },
          "values": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RTagValue"
            },
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Artifact Tag (RTag with grouped related RTagValues of Artifact)"
      },
      "RBookmarkType": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "description": "Bookmark Type",
        "format": "int32"
      },
      "REvent": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "eventType": {
            "type": "string",
            "description": "Event Type",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "Start Date",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "description": "Last Updated Date",
            "format": "date-time",
            "nullable": true
          },
          "duration": {
            "type": "integer",
            "description": "Duration",
            "format": "int32"
          },
          "userName": {
            "type": "string",
            "description": "User Name",
            "nullable": true
          },
          "ipAddress": {
            "type": "string",
            "description": "IP Address",
            "nullable": true
          },
          "responseStatusCode": {
            "type": "integer",
            "description": "Response Code",
            "format": "int32"
          },
          "requestUrl": {
            "type": "string",
            "description": "Requset Url",
            "nullable": true
          },
          "jsonData": {
            "type": "string",
            "description": "Jason Data",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Audit Event"
      },
      "RImage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "originalFileName": {
            "type": "string",
            "description": "Original File Name",
            "nullable": true
          },
          "contentType": {
            "type": "string",
            "description": "content type",
            "nullable": true
          },
          "fileSizeInBytes": {
            "type": "integer",
            "description": "Original Image File Size In Byte",
            "format": "int64"
          },
          "imageWidth": {
            "type": "integer",
            "description": "Original Image Width",
            "format": "int32"
          },
          "imageHeight": {
            "type": "integer",
            "description": "Original Image Height",
            "format": "int32"
          },
          "folderName": {
            "type": "string",
            "description": "پوشه محل ذخیره تصویر",
            "nullable": true,
            "example": "2017-08"
          },
          "storedFileName": {
            "type": "string",
            "description": "نام فایل ذخیره شده با بالاترین کیفیت",
            "nullable": true,
            "example": "85007253-09f2-4434-8b7e-1a23db2cd9c9.png"
          },
          "dataTime": {
            "type": "string",
            "description": "datetime",
            "format": "date-time"
          },
          "lastModified": {
            "type": "string",
            "description": "Last Modified for caching purposes",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Image Files"
      },
      "RLongRunningJobStatus": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true
          },
          "progress": {
            "type": "number",
            "description": "progress value (percent of custom value)",
            "format": "double"
          },
          "startTime": {
            "type": "string",
            "description": "Start Time",
            "format": "date-time"
          },
          "endTime": {
            "type": "string",
            "description": "End Time",
            "format": "date-time"
          },
          "step": {
            "type": "string",
            "description": "Current Step",
            "nullable": true
          },
          "exception": {
            "type": "string",
            "description": "Exception",
            "nullable": true
          },
          "succeeded": {
            "type": "boolean",
            "description": "finished"
          },
          "lastUpdate": {
            "type": "string",
            "description": "Last Update Time",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Long Running Job Status"
      },
      "RNoteType": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "description": "Note Type",
        "format": "int32"
      },
      "RPermission": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "securableItemShortName": {
            "type": "string",
            "description": "SecurableItem short name",
            "nullable": true,
            "example": "job"
          },
          "operationShortName": {
            "type": "string",
            "description": "Operation short name",
            "nullable": true,
            "example": "view"
          }
        },
        "additionalProperties": false,
        "description": "Permission line"
      },
      "RPictureFile": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "originalFileName": {
            "type": "string",
            "description": "Original File Name",
            "nullable": true
          },
          "contentType": {
            "type": "string",
            "description": "content type",
            "nullable": true
          },
          "fileSizeInBytes": {
            "type": "integer",
            "description": "Original Image File Size In Byte",
            "format": "int64"
          },
          "imageWidth": {
            "type": "integer",
            "description": "Original Image Width",
            "format": "int32"
          },
          "imageHeight": {
            "type": "integer",
            "description": "Original Image Height",
            "format": "int32"
          },
          "folderName": {
            "type": "string",
            "description": "پوشه محل ذخیره تصویر",
            "nullable": true,
            "example": "2017-08"
          },
          "storedFileName": {
            "type": "string",
            "description": "نام فایل ذخیره شده با بالاترین کیفیت",
            "nullable": true,
            "example": "85007253-09f2-4434-8b7e-1a23db2cd9c9.png"
          },
          "dataTime": {
            "type": "string",
            "description": "datetime",
            "format": "date-time"
          },
          "lastModified": {
            "type": "string",
            "description": "Last Modified for caching purposes",
            "format": "date-time"
          },
          "title": {
            "type": "string",
            "description": "Title",
            "nullable": true
          },
          "titleInEnglish": {
            "type": "string",
            "description": "Title in English",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Description",
            "nullable": true
          },
          "descriptionInEnglish": {
            "type": "string",
            "description": "Description in English",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/PublishStatus"
          },
          "order": {
            "type": "integer",
            "description": "order in the collection it belongs to it",
            "format": "int32"
          },
          "normalSizeImageStoredFileName": {
            "type": "string",
            "description": "نام فایل ذخیره شده با بالاترین کیفیت",
            "nullable": true,
            "example": "\r\n            e0d7050a-7e30-4a2f-b181-0daa4a1e1068.jpg\r\n            "
          },
          "thumbnailImageStoredFileName": {
            "type": "string",
            "description": "نام فایل ذخیره شده با بالاترین کیفیت",
            "nullable": true,
            "example": "\r\n            fbe9cc8e-12fa-4cb9-8f09-bbf353333383.jpg\r\n            "
          },
          "normalSizeImageWidth": {
            "type": "integer",
            "description": "عرض تصویر مناسب نمایش در صفحهٔ اختصاصی",
            "format": "int32"
          },
          "normalSizeImageHeight": {
            "type": "integer",
            "description": "طول تصویر مناسب نمایش در صفحهٔ اختصاصی",
            "format": "int32"
          },
          "thumbnailImageWidth": {
            "type": "integer",
            "description": "عرض تصویر با اندازه مناسب نمایش در صفحات لیستی",
            "format": "int32"
          },
          "thumbnailImageHeight": {
            "type": "integer",
            "description": "طول تصویر با اندازه مناسب نمایش در صفحات لیستی",
            "format": "int32"
          },
          "srcUrl": {
            "type": "string",
            "description": "source url",
            "nullable": true
          },
          "lastModifiedMeta": {
            "type": "string",
            "description": "Last Modified for caching purposes",
            "format": "date-time"
          },
          "externalNormalSizeImageUrl": {
            "type": "string",
            "description": "url to access this image from THE external host, contains '/norm/' which when\r\nyou replace it with '/thumb/' you would have ExternalThumbnailImageUrl\r\nand if you replace it with '/orig/' you would have a url for ExternalOriginalSizeImageUrl which MIGHT NOT EXIST and end in a 404 error",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Artifact Picture Files"
      },
      "RTag": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "order": {
            "type": "integer",
            "description": "Order",
            "format": "int32"
          },
          "tagType": {
            "$ref": "#/components/schemas/RTagType"
          },
          "friendlyUrl": {
            "type": "string",
            "description": "Friendly Url",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/PublishStatus"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true
          },
          "nameInEnglish": {
            "type": "string",
            "description": "Name In English",
            "nullable": true
          },
          "pluralName": {
            "type": "string",
            "description": "Plural Name",
            "nullable": true
          },
          "pluralNameInEnglish": {
            "type": "string",
            "description": "Plural Name In English",
            "nullable": true
          },
          "globalValue": {
            "type": "boolean",
            "description": "Value is normally changed globally"
          }
        },
        "additionalProperties": false,
        "description": "Item Attribute"
      },
      "RTagBundleValueViewModel": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Item Title",
            "nullable": true
          },
          "friendlyUrl": {
            "type": "string",
            "description": "Item Friendly Url",
            "nullable": true
          },
          "count": {
            "type": "integer",
            "description": "Items Count",
            "format": "int32"
          },
          "imageId": {
            "type": "string",
            "description": "Item Image Id",
            "format": "uuid"
          },
          "externalNormalSizeImageUrl": {
            "type": "string",
            "description": "url to access the image from THE external host, contains '/norm/' which when\r\nyou replace it with '/thumb/' you would have ExternalThumbnailImageUrl\r\nand if you replace it with '/orig/' you would have a url for ExternalOriginalSizeImageUrl which MIGHT NOT EXIST and end in a 404 error",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Tag Bundle View Model"
      },
      "RTagBundleViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "friendlyUrl": {
            "type": "string",
            "description": "Friendly Url",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true
          },
          "pluralName": {
            "type": "string",
            "description": "Plural Name",
            "nullable": true
          },
          "values": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RTagBundleValueViewModel"
            },
            "description": "Values",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Tag Bundle View Model"
      },
      "RTagSum": {
        "type": "object",
        "properties": {
          "tagName": {
            "type": "string",
            "description": "Tag Name",
            "nullable": true
          },
          "tagFriendlyUrl": {
            "type": "string",
            "description": "Tag Friendly Url",
            "nullable": true
          },
          "itemCount": {
            "type": "integer",
            "description": "Item Count",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Artifact Binary Tagged items Summation"
      },
      "RTagType": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8
        ],
        "type": "integer",
        "description": "نوع ویژگی",
        "format": "int32"
      },
      "RTagValue": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "rTagId": {
            "type": "string",
            "format": "uuid"
          },
          "rTag": {
            "$ref": "#/components/schemas/RTag"
          },
          "order": {
            "type": "integer",
            "format": "int32"
          },
          "friendlyUrl": {
            "type": "string",
            "description": "Friendly Url",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/PublishStatus"
          },
          "value": {
            "type": "string",
            "description": "Value",
            "nullable": true
          },
          "valueInEnglish": {
            "type": "string",
            "description": "Values In English",
            "nullable": true
          },
          "valueSupplement": {
            "type": "string",
            "description": "link or ....",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Attribute Value"
      },
      "RTitleInContents": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Title",
            "nullable": true
          },
          "order": {
            "type": "integer",
            "description": "Order",
            "format": "int32"
          },
          "level": {
            "type": "integer",
            "description": "Level",
            "format": "int32"
          },
          "itemFriendlyUrl": {
            "type": "string",
            "description": "Item Friendly Url",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Title of an Item in Artifact Contents"
      },
      "RUserBehaviourLog": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "id",
            "format": "uuid"
          },
          "userId": {
            "type": "string",
            "description": "user id",
            "format": "uuid"
          },
          "user": {
            "$ref": "#/components/schemas/RAppUser"
          },
          "dateTime": {
            "type": "string",
            "description": "datetime",
            "format": "date-time"
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "logs for user bad actions which may due to rule end in him or her being banned from the platform"
      },
      "RUserBookmark": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "rAppUserId": {
            "type": "string",
            "description": "User Id",
            "format": "uuid"
          },
          "rAppUser": {
            "$ref": "#/components/schemas/RAppUser"
          },
          "rArtifactMasterRecordId": {
            "type": "string",
            "description": "Master Record Id",
            "format": "uuid",
            "nullable": true
          },
          "rArtifactMasterRecord": {
            "$ref": "#/components/schemas/RArtifactMasterRecord"
          },
          "rArtifactItemRecordId": {
            "type": "string",
            "description": "Item Record Id",
            "format": "uuid",
            "nullable": true
          },
          "rArtifactItemRecord": {
            "$ref": "#/components/schemas/RArtifactItemRecord"
          },
          "dateTime": {
            "type": "string",
            "description": "DateTime",
            "format": "date-time"
          },
          "rBookmarkType": {
            "$ref": "#/components/schemas/RBookmarkType"
          },
          "note": {
            "type": "string",
            "description": "User Note",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "User Bookmarks"
      },
      "RUserBookmarkViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "rAppUserId": {
            "type": "string",
            "description": "User Id",
            "format": "uuid"
          },
          "rArtifactMasterRecord": {
            "$ref": "#/components/schemas/RArtifactMasterRecord"
          },
          "rArtifactItemRecord": {
            "$ref": "#/components/schemas/RArtifactItemRecordViewModel"
          },
          "dateTime": {
            "type": "string",
            "description": "DateTime",
            "format": "date-time"
          },
          "rBookmarkType": {
            "$ref": "#/components/schemas/RBookmarkType"
          },
          "note": {
            "type": "string",
            "description": "User Note",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RUserNoteAbuseReportViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "reasonText": {
            "type": "string",
            "description": "some explanotory text provided by reporter",
            "nullable": true
          },
          "note": {
            "$ref": "#/components/schemas/RUserNoteViewModel"
          }
        },
        "additionalProperties": false,
        "description": "(Public) User Notes Abuse Report View Model"
      },
      "RUserNoteViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "rAppUserId": {
            "type": "string",
            "description": "User Id",
            "format": "uuid"
          },
          "userName": {
            "type": "string",
            "description": "User Name (FirstName + SurName)",
            "nullable": true
          },
          "rUserImageId": {
            "type": "string",
            "description": "user image id",
            "format": "uuid",
            "nullable": true
          },
          "dateTime": {
            "type": "string",
            "description": "DateTime",
            "nullable": true
          },
          "modified": {
            "type": "boolean",
            "description": "Is Updated by User"
          },
          "lastModified": {
            "type": "string",
            "description": "Last Modified",
            "nullable": true
          },
          "noteType": {
            "$ref": "#/components/schemas/RNoteType"
          },
          "htmlContent": {
            "type": "string",
            "description": "content",
            "nullable": true
          },
          "referenceNoteId": {
            "type": "string",
            "description": "Reference Note Id",
            "format": "uuid",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/PublishStatus"
          },
          "relatedEntityName": {
            "type": "string",
            "description": "Related Entity (Artifact/Item) Name",
            "nullable": true
          },
          "relatedEntityImageId": {
            "type": "string",
            "description": "Realated entity Image Id",
            "format": "uuid"
          },
          "relatedEntityFriendlyUrl": {
            "type": "string",
            "description": "Realated entity Friendly Url (for artifact items it would be ParentFiendlyUrl/ItemFriendlyUrl )",
            "nullable": true
          },
          "relatedEntityExternalNormalSizeImageUrl": {
            "type": "string",
            "description": "Related entity external normal size image url",
            "nullable": true
          },
          "relatedItemParentName": {
            "type": "string",
            "description": "Related Item Artifact Name",
            "nullable": true
          },
          "notes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RUserNoteViewModel"
            },
            "description": "child notes",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Safe User Note View Model"
      },
      "RUserNotificationViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "dateTime": {
            "type": "string",
            "description": "DateTime",
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/NotificationStatus"
          },
          "subject": {
            "type": "string",
            "description": "Subject",
            "nullable": true
          },
          "htmlText": {
            "type": "string",
            "description": "Text",
            "nullable": true
          },
          "notificationType": {
            "$ref": "#/components/schemas/NotificationType"
          }
        },
        "additionalProperties": false,
        "description": "User Notification"
      },
      "RVerifyQueueType": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5
        ],
        "type": "integer",
        "description": "Verify Queue Type",
        "format": "int32"
      },
      "Recitation": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "owner": {
            "$ref": "#/components/schemas/RAppUser"
          },
          "ownerId": {
            "type": "string",
            "description": "Owner User Id",
            "format": "uuid"
          },
          "ganjoorAudioId": {
            "type": "integer",
            "description": "Final data is actually exported to a MySQL database which this auto increment field is its key",
            "format": "int32"
          },
          "ganjoorPostId": {
            "type": "integer",
            "description": "Ganjoor Post Id",
            "format": "int32"
          },
          "audioOrder": {
            "type": "integer",
            "description": "This determines where an audio is displayed between a list of sounds related to a specfic poem",
            "format": "int32"
          },
          "fileNameWithoutExtension": {
            "type": "string",
            "description": "Using this field content you would determine xml, mp3 and ogg file names",
            "nullable": true
          },
          "soundFilesFolder": {
            "type": "string",
            "description": "combining this with RMuseum.Models.GanjoorAudio.Recitation.FileNameWithoutExtension + .ext would preduce relative path of sound files on our file server the full path would become [HOMEPath] + '/i/' + this value",
            "nullable": true
          },
          "remoteMp3FilePath": {
            "type": "string",
            "description": "MP3 File Path",
            "nullable": true,
            "readOnly": true
          },
          "mp3Url": {
            "type": "string",
            "description": "MP3 url",
            "nullable": true,
            "readOnly": true
          },
          "remoteXMLFilePath": {
            "type": "string",
            "description": "This is also a legacy field",
            "nullable": true,
            "readOnly": true
          },
          "xmlUrl": {
            "type": "string",
            "description": "XML url",
            "nullable": true,
            "readOnly": true
          },
          "audioTitle": {
            "type": "string",
            "description": "Audio Title",
            "nullable": true
          },
          "audioArtist": {
            "type": "string",
            "description": "Audio Artist",
            "nullable": true
          },
          "audioArtistUrl": {
            "type": "string",
            "description": "Audio Artist Url",
            "nullable": true
          },
          "audioSrc": {
            "type": "string",
            "description": "Audio Source",
            "nullable": true
          },
          "audioSrcUrl": {
            "type": "string",
            "description": "Audio Src Url",
            "nullable": true
          },
          "legacyAudioGuid": {
            "type": "string",
            "description": "Legacy Audio Guid",
            "format": "uuid"
          },
          "mp3FileCheckSum": {
            "type": "string",
            "description": "Audio File CheckSum",
            "nullable": true
          },
          "mp3SizeInBytes": {
            "type": "integer",
            "description": "mp3 size in bytes",
            "format": "int32"
          },
          "oggSizeInBytes": {
            "type": "integer",
            "description": "ogg size in bytes",
            "format": "int32"
          },
          "uploadDate": {
            "type": "string",
            "description": "Upload Date",
            "format": "date-time"
          },
          "fileLastUpdated": {
            "type": "string",
            "description": "File Last Updated",
            "format": "date-time"
          },
          "reviewDate": {
            "type": "string",
            "description": "Review Date (Approve or Reject)",
            "format": "date-time"
          },
          "localMp3FilePath": {
            "type": "string",
            "description": "MP3 File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted)",
            "nullable": true
          },
          "localXmlFilePath": {
            "type": "string",
            "description": "XML File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted)",
            "nullable": true
          },
          "audioSyncStatus": {
            "$ref": "#/components/schemas/AudioSyncStatus"
          },
          "reviewStatus": {
            "$ref": "#/components/schemas/AudioReviewStatus"
          },
          "reviewer": {
            "$ref": "#/components/schemas/RAppUser"
          },
          "reviewerId": {
            "type": "string",
            "description": "Reviewer user",
            "format": "uuid",
            "nullable": true
          },
          "reviewMsg": {
            "type": "string",
            "description": "Review Message",
            "nullable": true
          },
          "initialScore": {
            "type": "integer",
            "description": "initial score for ordering recitations",
            "format": "int32"
          },
          "recitationType": {
            "$ref": "#/components/schemas/RecitationType"
          },
          "inSyncWithText": {
            "type": "boolean",
            "description": "in sync with text"
          }
        },
        "additionalProperties": false,
        "description": "Poem Narration"
      },
      "RecitationErrorReportViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "recitationId": {
            "type": "integer",
            "description": "Recitation Id",
            "format": "int32"
          },
          "reasonText": {
            "type": "string",
            "description": "Reason Text",
            "nullable": true
          },
          "recitation": {
            "$ref": "#/components/schemas/RecitationViewModel"
          },
          "numberOfLinesAffected": {
            "type": "integer",
            "description": "number of verses affected",
            "format": "int32"
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet index",
            "format": "int32"
          },
          "dateTime": {
            "type": "string",
            "description": "DateTime",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Post Error Report for recitations"
      },
      "RecitationMistakeViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "id",
            "format": "int32"
          },
          "mistake": {
            "type": "string",
            "description": "mistake",
            "nullable": true
          },
          "numberOfLinesAffected": {
            "type": "integer",
            "description": "number of verses affected",
            "format": "int32"
          },
          "coupletIndex": {
            "type": "integer",
            "description": "couplet index",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "approved mistake view model"
      },
      "RecitationModerateViewModel": {
        "type": "object",
        "properties": {
          "result": {
            "$ref": "#/components/schemas/PoemNarrationModerationResult"
          },
          "message": {
            "type": "string",
            "description": "Rejection Message",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Poem Narration Moderation View Model"
      },
      "RecitationOrderingViewModel": {
        "type": "object",
        "properties": {
          "recitationId": {
            "type": "integer",
            "description": "recitation",
            "format": "int32"
          },
          "earlynessAdvantage": {
            "type": "integer",
            "description": "earlyness advatage",
            "format": "int32"
          },
          "initialScore": {
            "type": "integer",
            "description": "initial score",
            "format": "int32"
          },
          "upVotes": {
            "type": "integer",
            "description": "upvotes from users other than the owner",
            "format": "int32"
          },
          "mistakes": {
            "type": "integer",
            "description": "approved mistaked",
            "format": "int32"
          },
          "totalScores": {
            "type": "integer",
            "description": "total scores",
            "format": "int32"
          },
          "computedOrder": {
            "type": "integer",
            "description": "computed order",
            "format": "int32"
          },
          "recitation": {
            "$ref": "#/components/schemas/PublicRecitationViewModel"
          }
        },
        "additionalProperties": false,
        "description": "Recitation Ordering View Model"
      },
      "RecitationPublishingTracker": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "poemNarrationId": {
            "type": "integer",
            "description": "Poem Narration Id",
            "format": "int32"
          },
          "poemNarration": {
            "$ref": "#/components/schemas/Recitation"
          },
          "startDate": {
            "type": "string",
            "description": "Start Date",
            "format": "date-time"
          },
          "xmlFileCopied": {
            "type": "boolean",
            "description": "XML File Copied"
          },
          "mp3FileCopied": {
            "type": "boolean",
            "description": "MP3 File Copied"
          },
          "firstDbUpdated": {
            "type": "boolean",
            "description": "First MySql DB Updated"
          },
          "secondDbUpdated": {
            "type": "boolean",
            "description": "Second DB Updated"
          },
          "finished": {
            "type": "boolean",
            "description": "Finished"
          },
          "finishDate": {
            "type": "string",
            "description": "Finish Date",
            "format": "date-time"
          },
          "lastException": {
            "type": "string",
            "description": "Last Excecption",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Narration Publishing Tracker"
      },
      "RecitationType": {
        "enum": [
          0,
          1,
          1000
        ],
        "type": "integer",
        "description": "recitation type",
        "format": "int32"
      },
      "RecitationVerseSync": {
        "type": "object",
        "properties": {
          "verseOrder": {
            "type": "integer",
            "description": "Verse Order",
            "format": "int32"
          },
          "verseText": {
            "type": "string",
            "description": "Verse Text",
            "nullable": true
          },
          "audioStartMilliseconds": {
            "type": "integer",
            "description": "Audio Start in Milliseconds",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Verse Sync Range"
      },
      "RecitationViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Id",
            "format": "int32"
          },
          "owner": {
            "$ref": "#/components/schemas/PublicRAppUser"
          },
          "ganjoorAudioId": {
            "type": "integer",
            "description": "Final data is actually exported to a MySQL database which this auto increment field is its key",
            "format": "int32"
          },
          "ganjoorPostId": {
            "type": "integer",
            "description": "Ganjoor Post Id",
            "format": "int32"
          },
          "poemFullTitle": {
            "type": "string",
            "description": "Poem Full Title",
            "nullable": true
          },
          "poemFullUrl": {
            "type": "string",
            "description": "Poem Full Url (without domain name)",
            "nullable": true
          },
          "audioOrder": {
            "type": "integer",
            "description": "This determines where an audio is displayed between a list of sounds related to a specfic poem",
            "format": "int32"
          },
          "fileNameWithoutExtension": {
            "type": "string",
            "description": "Using this field content you would determine xml, mp3 and ogg file names",
            "nullable": true
          },
          "soundFilesFolder": {
            "type": "string",
            "description": "combining this with RMuseum.Models.GanjoorAudio.ViewModels.RecitationViewModel.FileNameWithoutExtension + .ext would preduce relative path of sound files on our file server the full path would become [HOMEPath] + '/i/' + this value",
            "nullable": true
          },
          "remoteMp3FilePath": {
            "type": "string",
            "description": "MP3 File Path",
            "nullable": true,
            "readOnly": true
          },
          "mp3Url": {
            "type": "string",
            "description": "MP3 url",
            "nullable": true,
            "readOnly": true
          },
          "remoteOggFilePath": {
            "type": "string",
            "description": "OGG File Path",
            "nullable": true,
            "readOnly": true
          },
          "oggUrl": {
            "type": "string",
            "description": "OGG url",
            "nullable": true,
            "readOnly": true
          },
          "remoteXMLFilePath": {
            "type": "string",
            "description": "This is also a legacy field",
            "nullable": true,
            "readOnly": true
          },
          "xmlUrl": {
            "type": "string",
            "description": "XML url",
            "nullable": true,
            "readOnly": true
          },
          "audioTitle": {
            "type": "string",
            "description": "Audio Title",
            "nullable": true
          },
          "audioArtist": {
            "type": "string",
            "description": "Audio Artist",
            "nullable": true
          },
          "audioArtistUrl": {
            "type": "string",
            "description": "Audio Artist Url",
            "nullable": true
          },
          "audioSrc": {
            "type": "string",
            "description": "Audio Source",
            "nullable": true
          },
          "audioSrcUrl": {
            "type": "string",
            "description": "Audio Src Url",
            "nullable": true
          },
          "legacyAudioGuid": {
            "type": "string",
            "description": "Legacy Audio Guid",
            "format": "uuid"
          },
          "mp3FileCheckSum": {
            "type": "string",
            "description": "Audio File CheckSum",
            "nullable": true
          },
          "mp3SizeInBytes": {
            "type": "integer",
            "description": "mp3 size in bytes",
            "format": "int32"
          },
          "oggSizeInBytes": {
            "type": "integer",
            "description": "ogg size in bytes",
            "format": "int32"
          },
          "uploadDate": {
            "type": "string",
            "description": "Upload Date",
            "format": "date-time"
          },
          "fileLastUpdated": {
            "type": "string",
            "description": "File Last Updated",
            "format": "date-time"
          },
          "reviewDate": {
            "type": "string",
            "description": "Review Date (Approve or Reject)",
            "format": "date-time"
          },
          "localMp3FilePath": {
            "type": "string",
            "description": "MP3 File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted)",
            "nullable": true
          },
          "localXmlFilePath": {
            "type": "string",
            "description": "XML File local path on Windows Server (if item is not rejected probably it is not valid and it is deleted)",
            "nullable": true
          },
          "audioSyncStatus": {
            "$ref": "#/components/schemas/AudioSyncStatus"
          },
          "reviewStatus": {
            "$ref": "#/components/schemas/AudioReviewStatus"
          },
          "reviewMsg": {
            "type": "string",
            "description": "Review Message",
            "nullable": true
          },
          "recitationType": {
            "$ref": "#/components/schemas/RecitationType"
          },
          "inSyncWithText": {
            "type": "boolean",
            "description": "in sync with text"
          }
        },
        "additionalProperties": false,
        "description": "Poem Narration view model"
      },
      "RegisterRAppUser": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid",
            "nullable": true
          },
          "username": {
            "minLength": 4,
            "type": "string",
            "description": "User Name",
            "nullable": true,
            "example": "test"
          },
          "email": {
            "type": "string",
            "description": "User Email",
            "format": "email",
            "nullable": true,
            "example": "email@domain.com"
          },
          "phoneNumber": {
            "type": "string",
            "description": "User Mobile Phone Number",
            "format": "tel",
            "nullable": true,
            "example": "+989121234567"
          },
          "firstName": {
            "minLength": 1,
            "type": "string",
            "description": "First Name",
            "nullable": true,
            "example": "Hamid Reza"
          },
          "surName": {
            "minLength": 1,
            "type": "string",
            "description": "SurName",
            "nullable": true,
            "example": "Mohammadi"
          },
          "status": {
            "$ref": "#/components/schemas/RAppUserStatus"
          },
          "rImageId": {
            "type": "string",
            "description": "user image",
            "format": "uuid",
            "nullable": true
          },
          "nickName": {
            "type": "string",
            "description": "nick name",
            "nullable": true
          },
          "bio": {
            "type": "string",
            "description": "biography",
            "nullable": true
          },
          "website": {
            "type": "string",
            "description": "web site",
            "nullable": true
          },
          "emailConfirmed": {
            "type": "boolean",
            "description": "email verified"
          },
          "createDate": {
            "type": "string",
            "description": "create date",
            "format": "date-time"
          },
          "password": {
            "minLength": 6,
            "type": "string",
            "description": "desired password, if sent empty system generates one",
            "nullable": true,
            "example": "Test!123"
          },
          "isAdmin": {
            "type": "boolean",
            "description": "is admin",
            "example": false
          }
        },
        "additionalProperties": false,
        "description": "user infor used for registeration"
      },
      "ResetPasswordViewModel": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Email",
            "nullable": true,
            "example": "email@domain.com"
          },
          "secret": {
            "type": "string",
            "description": "Secret",
            "nullable": true,
            "example": "4ozHJQN0X6CebX0He0/xaznhIjvubfySFnwdoCYLLo8="
          },
          "password": {
            "type": "string",
            "description": "password",
            "nullable": true,
            "example": "Test!123"
          }
        },
        "additionalProperties": false,
        "description": "reset password view model"
      },
      "ReviewResult": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "description": "Review Result",
        "format": "int32"
      },
      "SecurableItem": {
        "type": "object",
        "properties": {
          "shortName": {
            "type": "string",
            "description": "Short Name",
            "nullable": true,
            "example": "user"
          },
          "description": {
            "type": "string",
            "description": "Descripttion",
            "nullable": true,
            "example": "کاربران"
          },
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SecurableItemOperation"
            },
            "description": "Operations (short name + description + has permission)",
            "nullable": true,
            "example": "[\r\n                [view, مشاهده, true],\r\n                [add, ایجاد, false]\r\n            ]"
          }
        },
        "additionalProperties": false,
        "description": "securable itmes: forms and ..."
      },
      "SecurableItemOperation": {
        "type": "object",
        "properties": {
          "shortName": {
            "type": "string",
            "description": "Short Name",
            "nullable": true,
            "example": "view"
          },
          "description": {
            "type": "string",
            "description": "Descripttion",
            "nullable": true,
            "example": "مشاهده"
          },
          "prerequisites": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SecurableItemOperationPrerequisite"
            },
            "description": "Prerequisites",
            "nullable": true
          },
          "status": {
            "type": "boolean",
            "description": "Status (has permission)"
          }
        },
        "additionalProperties": false,
        "description": "operations (rights/permissions) for SecurableItem s"
      },
      "SecurableItemOperationPrerequisite": {
        "type": "object",
        "properties": {
          "secureItemShortName": {
            "type": "string",
            "description": "Prerequisite SecureItem ShortName",
            "nullable": true,
            "example": "job"
          },
          "operationShortName": {
            "type": "string",
            "description": "Prerequisite Operation ShortName",
            "nullable": true,
            "example": "view"
          }
        },
        "additionalProperties": false,
        "description": "SecurableItemOperation Prerequisite"
      },
      "SelfDeleteViewModel": {
        "type": "object",
        "properties": {
          "password": {
            "type": "string",
            "description": "user password",
            "nullable": true,
            "example": "Test!123"
          },
          "callbackUrl": {
            "type": "string",
            "description": "CallbackUrl",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "User Self Delete View Model"
      },
      "SetPasswordModel": {
        "type": "object",
        "properties": {
          "oldPassword": {
            "type": "string",
            "description": "old password",
            "nullable": true
          },
          "newPassword": {
            "type": "string",
            "description": "new password",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "set password model"
      },
      "SummedUpViewModel": {
        "type": "object",
        "properties": {
          "days": {
            "type": "integer",
            "description": "Number of days",
            "format": "int32"
          },
          "totalCount": {
            "type": "integer",
            "description": "Total number",
            "format": "int32"
          },
          "userIds": {
            "type": "integer",
            "description": "Total Number of UserIds",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "summed up view model"
      },
      "UnverifiedSignUpViewModel": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Email",
            "nullable": true,
            "example": "email@domain.com"
          },
          "clientAppName": {
            "type": "string",
            "description": "Client App Name",
            "nullable": true,
            "example": "Swashbuckle UI Client"
          },
          "language": {
            "type": "string",
            "description": "Client Language",
            "nullable": true,
            "example": "fa-IR"
          },
          "captchaImageId": {
            "type": "string",
            "description": "Captcha Image Id",
            "format": "uuid"
          },
          "captchaValue": {
            "type": "string",
            "description": "Captcha Value",
            "nullable": true
          },
          "callbackUrl": {
            "type": "string",
            "description": "CallbackUrl",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "SignUp View Model"
      },
      "UpdateDateDescriptionViewModel": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "date",
            "format": "date-time"
          },
          "description": {
            "type": "string",
            "description": "description",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "update date and description view model (donation + expense limited update api)"
      },
      "UploadSession": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "sessionType": {
            "$ref": "#/components/schemas/UploadSessionType"
          },
          "user": {
            "$ref": "#/components/schemas/RAppUser"
          },
          "useId": {
            "type": "string",
            "description": "User Id",
            "format": "uuid"
          },
          "uploadStartTime": {
            "type": "string",
            "description": "Upload Start Time",
            "format": "date-time"
          },
          "uploadEndTime": {
            "type": "string",
            "description": "Upload End Time",
            "format": "date-time"
          },
          "processStartTime": {
            "type": "string",
            "description": "Process Start Time",
            "format": "date-time"
          },
          "processEndTime": {
            "type": "string",
            "description": "Process End Time",
            "format": "date-time"
          },
          "processProgress": {
            "type": "integer",
            "description": "Process Progress",
            "format": "int32"
          },
          "status": {
            "$ref": "#/components/schemas/UploadSessionProcessStatus"
          },
          "uploadedFiles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UploadSessionFile"
            },
            "description": "Uploaded Files",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Upload Session"
      },
      "UploadSessionFile": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "uploadSessionId": {
            "type": "string",
            "description": "Upload Session Id",
            "format": "uuid"
          },
          "contentDisposition": {
            "type": "string",
            "description": "ContentDisposition",
            "nullable": true
          },
          "contentType": {
            "type": "string",
            "description": "ContentType",
            "nullable": true
          },
          "fileName": {
            "type": "string",
            "description": "FileName",
            "nullable": true
          },
          "length": {
            "type": "integer",
            "description": "Length",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name",
            "nullable": true
          },
          "filePath": {
            "type": "string",
            "description": "File Path",
            "nullable": true
          },
          "mP3FileCheckSum": {
            "type": "string",
            "description": "File check sum for mp3 files",
            "nullable": true
          },
          "processResult": {
            "type": "boolean",
            "description": "Process Result"
          },
          "processResultMsg": {
            "type": "string",
            "description": "Process Result Message",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Upload Session File"
      },
      "UploadSessionProcessStatus": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "description": "Upload Session Process Status",
        "format": "int32"
      },
      "UploadSessionType": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "description": "Upload Session Types",
        "format": "int32"
      },
      "UploadedItemViewModel": {
        "type": "object",
        "properties": {
          "fileName": {
            "type": "string",
            "description": "filename",
            "nullable": true
          },
          "processResult": {
            "type": "boolean",
            "description": "process result"
          },
          "processResultMsg": {
            "type": "string",
            "description": "process result message",
            "nullable": true
          },
          "uploadEndTime": {
            "type": "string",
            "description": "Upload End Time",
            "format": "date-time"
          },
          "userName": {
            "type": "string",
            "description": "Upload User Name",
            "nullable": true
          },
          "processStartTime": {
            "type": "string",
            "description": "Process Start Time",
            "format": "date-time"
          },
          "processProgress": {
            "type": "integer",
            "description": "progress progress",
            "format": "int32"
          },
          "processEndTime": {
            "type": "string",
            "description": "process end time",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Uploaded Item View Model"
      },
      "UserCauseViewModel": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "User Id",
            "format": "uuid"
          },
          "cause": {
            "type": "string",
            "description": "cause",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "User/Cause used for logging a user (bad) behaviour or kicking out him or her"
      },
      "UserContributionsViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "user id",
            "format": "uuid"
          },
          "createDate": {
            "type": "string",
            "description": "create date",
            "format": "date-time"
          },
          "poemCorrections": {
            "type": "integer",
            "description": "poem corrections",
            "format": "int32"
          },
          "sectionCorrections": {
            "type": "integer",
            "description": "section corrections",
            "format": "int32"
          },
          "catCorrections": {
            "type": "integer",
            "description": "cat edit corrections",
            "format": "int32"
          },
          "suggestedSongs": {
            "type": "integer",
            "description": "suggested songs",
            "format": "int32"
          },
          "quotedPoems": {
            "type": "integer",
            "description": "quoted poems",
            "format": "int32"
          },
          "comments": {
            "type": "integer",
            "description": "comments",
            "format": "int32"
          },
          "recitations": {
            "type": "integer",
            "description": "recitations",
            "format": "int32"
          },
          "museumLinks": {
            "type": "integer",
            "description": "museum links",
            "format": "int32"
          },
          "pinterestLinks": {
            "type": "integer",
            "description": "pinterest links",
            "format": "int32"
          },
          "poetSpecLines": {
            "type": "integer",
            "description": "poet spec links",
            "format": "int32"
          },
          "poetPictures": {
            "type": "integer",
            "description": "poet pictures",
            "format": "int32"
          },
          "publicUserNotes": {
            "type": "integer",
            "description": "public user notes",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "user contributions"
      },
      "UserRecitationProfileViewModel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id",
            "format": "uuid"
          },
          "user": {
            "$ref": "#/components/schemas/PublicRAppUser"
          },
          "userId": {
            "type": "string",
            "description": "UserId",
            "format": "uuid"
          },
          "name": {
            "type": "string",
            "description": "Profile Name",
            "nullable": true
          },
          "fileSuffixWithoutDash": {
            "type": "string",
            "description": "this would be appended to audio files names prefixed by a dash to make them unique and specfic to user\r\nfilenames usually would look like {GanjoorPostId}-{FileSuffixWithoutDash}.{ext}\r\nfor example 2200-hrm.xml\r\n\r\nupdate [4/10/2021]: you can send this one empty",
            "nullable": true
          },
          "artistName": {
            "type": "string",
            "description": "artist name",
            "nullable": true
          },
          "artistUrl": {
            "type": "string",
            "description": "artist url",
            "nullable": true
          },
          "audioSrc": {
            "type": "string",
            "description": "audio src",
            "nullable": true
          },
          "audioSrcUrl": {
            "type": "string",
            "description": "audio src url",
            "nullable": true
          },
          "isDefault": {
            "type": "boolean",
            "description": "is default"
          }
        },
        "additionalProperties": false,
        "description": "UserNarrationProfile View Model"
      },
      "UserSongSuggestionsHistory": {
        "type": "object",
        "properties": {
          "approved": {
            "type": "integer",
            "description": "approved",
            "format": "int32"
          },
          "rejected": {
            "type": "integer",
            "description": "rejected",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "history of suggested songs by a user"
      },
      "VerifiedSignUpViewModel": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Email",
            "nullable": true,
            "example": "email@domain.com"
          },
          "secret": {
            "type": "string",
            "description": "Secret",
            "nullable": true,
            "example": "4ozHJQN0X6CebX0He0/xaznhIjvubfySFnwdoCYLLo8="
          },
          "password": {
            "type": "string",
            "description": "password",
            "nullable": true,
            "example": "Test!123"
          },
          "firstName": {
            "type": "string",
            "description": "First Name",
            "nullable": true,
            "example": "Hamid Reza"
          },
          "surName": {
            "type": "string",
            "description": "SurName",
            "nullable": true,
            "example": "Mohammadi"
          },
          "phoneNumber": {
            "type": "string",
            "description": "User Mobile Phone Number",
            "format": "tel",
            "nullable": true,
            "example": "+989121234567"
          }
        },
        "additionalProperties": false,
        "description": "verified sign up view model"
      },
      "VersePoemSectionType": {
        "enum": [
          1,
          2,
          3,
          4
        ],
        "type": "integer",
        "description": "how GanjoorPoemSection is linked to GanjoorVerse",
        "format": "int32"
      },
      "VersePosition": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          -1
        ],
        "type": "integer",
        "description": "معنی فیلد position در جدول verse با توجه به مقادیر این ساختار داده مشخص می شود.",
        "format": "int32"
      }
    },
    "securitySchemes": {
      "oauth2": {
        "type": "apiKey",
        "description": "format: \"bearer {token}\"",
        "name": "Authorization",
        "in": "header"
      }
    }
  },
  "tags": [
    {
      "name": "AppUser"
    },
    {
      "name": "Artifact"
    },
    {
      "name": "AuditLog"
    },
    {
      "name": "ContributionStats"
    },
    {
      "name": "DonationAccounting"
    },
    {
      "name": "ExternalFTP"
    },
    {
      "name": "FAQ"
    },
    {
      "name": "Ganjoor"
    },
    {
      "name": "GanjoorPoetSuggestedPhotos"
    },
    {
      "name": "GanjoorPoetSuggestedSpecLines"
    },
    {
      "name": "GeoLocation"
    },
    {
      "name": "Image"
    },
    {
      "name": "MusicCatalogue"
    },
    {
      "name": "Notification"
    },
    {
      "name": "Numbering"
    },
    {
      "name": "Recitation"
    },
    {
      "name": "RGenericOptions"
    },
    {
      "name": "RImage"
    },
    {
      "name": "RLongRunningJobs"
    },
    {
      "name": "Role"
    },
    {
      "name": "SiteBanners"
    },
    {
      "name": "Translation"
    },
    {
      "name": "UserVisitsTracking"
    }
  ]
}