Деплой: https://rsclone-backend-production.up.railway.app
Для отправки запросов на сервер вначале нужно авторизоваться (см. Log In). Затем из ответа сервера скопировать accessToken и добавить к своим запросам хедер вида 'Authorization': 'Bearer [accessToken]'. Токен действует 15 минут. По истечении этого времени нужно обновить авторизацию (см. Refresh) или авторизоваться снова, и вставить в соответствующий хедер новый accessToken.
Logs a user in.
Авторизует пользователя.
Details
-
URL
/auth/login
-
Method:
POST -
Headers:
'Content-Type': 'application/json' -
URL Params
None
-
Query Params
None
-
Data Params
Руководитель:{ "mail": "b@gmail.com", "password": "123321123" }Продавец:
{ "mail": "d@gmail.com", "password": "123321123" } -
Success Response:
- Code: 200 OK
Content:{ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtYWlsIjoiYkBnbWFpbC5jb20iLCJfaWQiOiI2M2UzN2YyNTc4ZTk3NmY3ZWVjNjMyZWEiLCJyb2xlIjoibWFuYWdlciIsImlhdCI6MTY3NzU4MjM0OCwiZXhwIjoxNjc3NTgzMjQ4fQ.X2eyld4n-ia5p-YsqTExPHpM62UwFK90SYFmPeYr770", "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtYWlsIjoiYkBnbWFpbC5jb20iLCJfaWQiOiI2M2UzN2YyNTc4ZTk3NmY3ZWVjNjMyZWEiLCJyb2xlIjoibWFuYWdlciIsImlhdCI6MTY3NzU4MjM0OCwiZXhwIjoxNjc4ODc4MzQ4fQ.i_HXvg98e4hFqFPs80OdBwrxoBozXbdzC4I6txN2vBg", "user": { "mail": "b@gmail.com", "_id": "63e37f2578e976f7eec632ea", "role": "manager" } }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 404 NOT FOUND
-
-
Notes:
None
Returns new tokens.
Возвращает новые токены.
Details
-
URL
/auth/refresh
-
Method:
GET -
Headers:
None
-
URL Params
None
-
Query Params
None
-
Data Params
None
-
Success Response:
- Code: 200 OK
Content:{ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtYWlsIjoiYkBnbWFpbC5jb20iLCJfaWQiOiI2M2UzN2YyNTc4ZTk3NmY3ZWVjNjMyZWEiLCJyb2xlIjoibWFuYWdlciIsImlhdCI6MTY3NzU4MjM0OCwiZXhwIjoxNjc3NTgzMjQ4fQ.X2eyld4n-ia5p-YsqTExPHpM62UwFK90SYFmPeYr770", "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtYWlsIjoiYkBnbWFpbC5jb20iLCJfaWQiOiI2M2UzN2YyNTc4ZTk3NmY3ZWVjNjMyZWEiLCJyb2xlIjoibWFuYWdlciIsImlhdCI6MTY3NzU4MjM0OCwiZXhwIjoxNjc4ODc4MzQ4fQ.i_HXvg98e4hFqFPs80OdBwrxoBozXbdzC4I6txN2vBg", "user": { "mail": "b@gmail.com", "_id": "63e37f2578e976f7eec632ea", "role": "manager" } }
- Code: 200 OK
-
Error Response:
- Code: 401 UNAUTHORIZED
- Code: 401 UNAUTHORIZED
-
Notes:
To successfully receive new tokens make sure that cookies have refreshToken in them. The refresh token is added to cookies automatically at log in.
Для того, чтобы запрос успешно отработал, в куках должен быть записан refreshToken. Он записывается туда автоматически при авторизации.
Logs a user out.
Совершает логаут пользователя.
Details
-
URL
/auth/logout
-
Method:
POST -
Headers:
'Content-Type': 'application/json' -
URL Params
None
-
Query Params
None
-
Data Params
None
-
Success Response:
- Code: 200 OK
Content:{ "logout": true }
- Code: 200 OK
-
Error Response:
None
-
Notes:
None
Returns json data about users.
Возвращает json с данными о пользователях.
Details
-
URL
/users
-
Method:
GET -
Headers:
'Authorization': 'Bearer [access-token]' -
URL Params
None
-
Query Params
Optional:
archived=trueIf
archived=trueparam is passed, api returns json with archived (deleted) users.
Если передан параметр?archived=true, апи вернет json с удаленными пользователями. -
Data Params
None
-
Success Response:
- Code: 200 OK
Content:[ { "data": { "firstName": "Brian", "patronymic": "", "surname": "Smith", "birthday": "1989-12-08", "mail": "b@gmail.com", "phone": "+77743212121" }, "_id": "63e37f2578e976f7eec632ea", "role": "manager", "companies": [ { "data": { "companyName": "Cyber Company" }, "_id": "63e3e28f3bf7fbab6532f051", "users": [ "63e37f79609334e79cd043d9", "63e37fa2609334e79cd043dc", "63e37f2578e976f7eec632ea" ], "id": "63e3e28f3bf7fbab6532f051" }, ... ], "todos": [ { "data": { "type": "common", "startTime": "2023-02-09T08:00", "endTime": "2023-02-09T09:30", "title": "заголовок таска", "text": "тело таска" }, "extra": { "year": "2023", "month": "02", "day": "09" }, "_id": "63e3edd4079d257910bc50ca", "isDone": true, "company": "63e3e28f3bf7fbab6532f051", "users": [ "63e37f79609334e79cd043d9", "63e37fa2609334e79cd043dc", "63e37f2578e976f7eec632ea" ] }, ... ], "id": "63e37f2578e976f7eec632ea" }, ... ]
- Code: 200 OK
-
Error Response:
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
-
Notes:
None
Creates a new user.
Создает нового пользователя.
Details
-
URL
/users
-
Method:
POST -
Headers:
'Authorization': 'Bearer [access-token]''Content-Type': 'application/json' -
URL Params
None
-
Query Params
None
-
Data Params
{ "data": { "firstName": "Инесса", "patronymic": "Михайловна", "surname": "Рябчик", "birthday": "1975-10-07", "mail": "inessa@gmail.com", "phone": "+77742548", "password": "123321123" }, "role": "salesman", "settings" : { "language": "en" } } -
Success Response:
- Code: 201 CREATED
Content:{ "newUser": { "data": { "firstName": "Инесса", "patronymic": "Михайловна", "surname": "Рябчик", "birthday": "1975-10-07", "mail": "inessa@gmail.com", "phone": "+77742548", "password": "123321123" }, "role": "salesman", "settings": { "language": "en" } } }
- Code: 201 CREATED
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
-
Notes:
Only manager and admin can create new users. All fields except 'settings' are required. Accepted roles: 'manager', 'salesman'. Mail should be unique and a correct email. Password should be at least 8 symbols long. Role must be either 'manager' or 'salesman'.
Только менеджер и админ имеют право создавать новых пользователей. Все поля кроме 'patronymic' и 'settings' обязательны. Поле mail должно быть уникальным и в правильном формате. Пароль должнен быть длиной не менее 8 символов. В качестве роли можно указать только 'manager' или 'salesman'.
Updates attributes of specified user.
Обновляет данные указанного пользователя.
Details
-
URL
/users/:id
-
Method:
PATCH -
Headers:
'Authorization': 'Bearer [access-token]''Content-Type': 'application/json' -
URL Params
Required:
id=[string] -
Query Params
None
-
Data Params
{ "data": { "firstName": "Iii" } } -
Success Response:
- Code: 200 OK
Content:{ "updatedData": { "data": { "firstName": "Iii" }, "_id": "63e77d56d2a812a80b9987af" } }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
Code: 404 NOT FOUND
-
-
Notes:
None
Mark specified user as 'archived'.
Помечает указанного пользователя удаленным ('archived').
Details
-
URL
/users/:id
-
Method:
DELETE -
Headers:
'Authorization': 'Bearer [access-token]' -
URL Params
Required:
id=[string] -
Query Params
None
-
Data Params
None
-
Success Response:
- Code: 200 OK
Content:{ "deletedUser": { "data": { "firstName": "Iii", "patronymic": "Ii", "surname": "Ii", "birthday": "1985-12-03", "mail": "ii@gmail.com", "phone": "+777", "password": "$2a$05$xhYMhvNaf7FB3.Bw422rG.ys3eYL.MrIKHmw4wyPAyIWfcBtVUIdG" }, "settings": { "language": "ru" }, "_id": "63e77d56d2a812a80b9987af", "role": "salesman", "archived": false, "__v": 0, "id": "63e77d56d2a812a80b9987af" } }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
Code: 404 NOT FOUND
-
-
Notes:
None
Mark specified user as not 'archived'.
Помечает указанного пользователя не удаленным.
Details
-
URL
/users/archived/:id
-
Method:
PATCH -
Headers:
'Authorization': 'Bearer [access-token]''Content-Type': 'application/json' -
URL Params
Required:
id=[string] -
Query Params
None
-
Data Params
{ "archived": false } -
Success Response:
- Code: 200 OK
Content:{ "undeletedUser": { "data": { "firstName": "Iii", "patronymic": "Ii", "surname": "Ii", "birthday": "1985-12-03", "mail": "ii@gmail.com", "phone": "+777", "password": "$2a$05$xhYMhvNaf7FB3.Bw422rG.ys3eYL.MrIKHmw4wyPAyIWfcBtVUIdG" }, "settings": { "language": "ru" }, "_id": "63e77d56d2a812a80b9987af", "role": "salesman", "archived": true, "__v": 0, "id": "63e77d56d2a812a80b9987af" } }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
Code: 404 NOT FOUND
-
-
Notes:
None
Returns json data about companies.
Возвращает json с данными о компаниях.
Details
-
URL
/companies
-
Method:
GET -
Headers:
'Authorization': 'Bearer [access-token]' -
URL Params
None
-
Query Params
Optional:
archived=trueIf
archived=trueparam is passed, api returns json with archived (deleted) companies.
Если передан параметр?archived=true, апи вернет json с удаленными компаниями. -
Data Params
None
-
Success Response:
-
Code: 200 OK
Content:[ { "data": { "companyName": "Мотиватор", "inn": 1232102311, "address": "asdasd" }, "contacts": { "commonPhone": [ "+78124267070" ], "commonMail": "office@motivator.ru", "workers": [] }, "_id": "63fc910fdd900e640ce6e8fb", "users": [ { "data": { "surname": "D", "mail": "d@gmail.com" }, "_id": "63e37fa2609334e79cd043dc", "role": "salesman", "id": "63e37fa2609334e79cd043dc" } ], "__v": 0, "todos": [], "id": "63fc910fdd900e640ce6e8fb" }, ... ]
-
-
Error Response:
None
-
Notes:
None
Creates a new company.
Создает новую компанию.
Details
-
URL
/companies
-
Method:
POST -
Headers:
'Authorization': 'Bearer [access-token]''Content-Type': 'application/json' -
URL Params
None
-
Query Params
None
-
Data Params
{ "data": { "companyName": "CF", "inn": 1234567893, "address": "address" }, "contacts": { "commonPhone": [ "+777" ], "commonMail": "cf@gmail.com", "workers": [ { "firstName": "CFA", "patronymic": "CFA", "surname": "CFA", "birthday": "1989-04-08", "mail": "cfa@gmail.com", "phone": [ "+777" ] } ] }, "users": [ "63e37f79609334e79cd043d9" ] } -
Success Response:
- Code: 201 CREATED
Content:{ "newCompany": { "data": { "companyName": "CF", "inn": 1234567893, "address": "address" }, "contacts": { "commonPhone": [ "+777" ], "commonMail": "cf@gmail.com", "workers": [ { "firstName": "CFA", "patronymic": "CFA", "surname": "CFA", "birthday": "1989-04-08", "mail": "cfa@gmail.com", "phone": [ "+777" ], "_id": "63e789a0d6f1b265be916f22" } ] }, "users": [ "63e37f79609334e79cd043d9" ], "archived": false, "_id": "63e789a0d6f1b265be916f21", "__v": 0, "id": "63e789a0d6f1b265be916f21" } }
- Code: 201 CREATED
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
-
Notes:
Company name and phone are required. Mail should be unique and a correct email.
Название и телефон компании обязательны. Поле mail должно быть уникальным и в правильном формате.
Updates attributes of a specified company.
Обновляет данные указанной компании.
Details
-
URL
/companies/:id
-
Method:
PATCH -
Headers:
'Authorization': 'Bearer [access-token]''Content-Type': 'application/json' -
URL Params
Required:
id=[string] -
Query Params
None
-
Data Params
{ "data": { "companyName": "CFf" }, "contacts": { "workers": [ { "firstName": "CFAa" } ] }, "users": [ "63e37f79609334e79cd043d9" ] } -
Success Response:
- Code: 200 OK
Content:{ "updatedData": { "data": { "companyName": "CFf" }, "contacts": { "workers": [ { "firstName": "CFAa" } ] }, "users": [ "63e37f79609334e79cd043d9" ] } }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
Code: 404 NOT FOUND
-
-
Notes:
None
Mark specified company as 'archived'.
Помечает указанную компанию удаленной ('archived').
Details
-
URL
/companies/:id
-
Method:
DELETE -
Headers:
'Authorization': 'Bearer [access-token]' -
URL Params
Required:
id=[string] -
Query Params
None
-
Data Params
None
-
Success Response:
- Code: 200 OK
Content:{ "deletedCompany": { "data": { "companyName": "CE", "inn": 1234567892, "address": "address" }, "contacts": { "commonPhone": [ "+777" ], "commonMail": "ce@gmail.com", "workers": [ { "firstName": "CEA", "patronymic": "CEA", "surname": "CEA", "birthday": "1988-01-02", "mail": "cea@gmail.com", "phone": [ "+777" ], "_id": "63e6a2f8a36dfd3f59501f01" } ] }, "_id": "63e6a2f8a36dfd3f59501f00", "users": [ "63e37f79609334e79cd043d9" ], "archived": false, "__v": 0, "id": "63e6a2f8a36dfd3f59501f00" } }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
Code: 404 NOT FOUND
-
-
Notes:
None
Mark specified company as not 'archived'.
Помечает указанную компанию не удаленной.
Details
-
URL
/companies/archived/:id
-
Method:
PATCH -
Headers:
'Authorization': 'Bearer [access-token]'Is inserted into requests automatically by an axios interceptor.
Вставляется в запросы автоматически.'Content-Type': 'application/json' -
URL Params
Required:
id=[string] -
Query Params
None
-
Data Params
{ "archived": false } -
Success Response:
- Code: 200 OK
Content:{ "undeleteCompany": { "data": { "companyName": "CE", "inn": 1234567892, "address": "address" }, "contacts": { "commonPhone": [ "+777" ], "commonMail": "ce@gmail.com", "workers": [ { "firstName": "CEA", "patronymic": "CEA", "surname": "CEA", "birthday": "1988-01-02", "mail": "cea@gmail.com", "phone": [ "+777" ], "_id": "63e6a2f8a36dfd3f59501f01" } ] }, "_id": "63e6a2f8a36dfd3f59501f00", "users": [ "63e37f79609334e79cd043d9" ], "archived": true, "__v": 0, "id": "63e6a2f8a36dfd3f59501f00" } }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
Code: 404 NOT FOUND
-
-
Notes:
None
Returns json data about todos.
Возвращает json с данными о задачах.
Details
-
URL
/todos
-
Method:
GET -
Headers:
'Authorization': 'Bearer [access-token]' -
URL Params
None
-
Query Params
Optional:
range=month&date=2023-02If
range=monthparam is passed, api returns json with complete, missed and future tasks count by days for the specified month. If 'date' param is not passed, current month will be used.
Если передан параметрrange=month, апи вернет json с количеством завершенных, пропущенных и будущих задач по дням за указанный месяц. Если параметр 'date' не передан, возьмется текущий месяц.range=day&date=2023-02-11If
range=dayparam is passed, api returns json with todos for the specified day and column number for those todos. If 'date' param is not passed, current date will be used.
Если передан параметрrange=day, апи вернет json с задачами за указанный день и номером колонки задачи. Если параметр 'date' не передан, возьмется текущая дата.user=[id]By default salesman receives only his/her own tasks, while manager and admin receive all users' tasks. If
user=[id]parameter is passed, api will return tasks of the specified user.
По умолчанию продавец получает только свои задачи, а менеджер и админ получают задачи всех пользователей. Если передан параметрuser=[id], апи вернет json с задачами указанного пользователя.If query params are not passed, api will return all tasks.
Если query-параметры не указаны, вернется список задач за все время. -
Data Params
None
-
Success Response:
-
Code: 200 OK
Content:Without query params:
[ { "data": { "firstName": "B", "patronymic": "B", "surname": "B", "birthday": "1989-12-08", "mail": "b@gmail.com", "phone": "+777" }, "_id": "63e37f2578e976f7eec632ea", "role": "manager", "companies": [], "todos": [], "id": "63e37f2578e976f7eec632ea" }, ... ]'?range=month'
[ { "complete": 0, "future": 0, "missed": 0 }, ... ]'?range=day'
[ "todos": [ ... ], "todosPlacement": [ { "_id": "63e82f3bdcda56cdb4cd0607", "start": 1676174400000, "end": 1676179800000, "column": 1 }, ... ], "columnsNumber": 4 ]
-
-
Error Response:
None
-
Notes:
None
Creates a new todo.
Создает новую задачу.
Details
-
URL
/todos
-
Method:
POST -
Headers:
'Authorization': 'Bearer [access-token]''Content-Type': 'application/json' -
URL Params
None
-
Query Params
None
-
Data Params
{ "company": "63e3e28f3bf7fbab6532f051", "isDone": false, "data": { "type": "meet", "startTime": "2023-02-11T10:00", "endTime": "2023-02-11T012:30", "title": "заголовок таска", "text": "тело таска" } } -
Success Response:
- Code: 201 CREATED
Content:{ "newTodo": { "data": { "type": "meet", "startTime": "2023-02-11T10:00", "endTime": "2023-02-11T012:30", "title": "заголовок таска", "text": "тело таска" }, "isDone": false, "extra": { "year": "2023", "month": "02", "day": "11" }, "company": "63e3e28f3bf7fbab6532f051", "users": [ "63e37f79609334e79cd043d9", "63e37fa2609334e79cd043dc" ], "_id": "63e79f3cf883361ef9d4e5ef", "__v": 0 } }
- Code: 201 CREATED
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
-
Notes:
All fields except 'text' are required.
Все поля кроме 'text' обязательны.
Updates attributes of specified todo.
Обновляет данные указанной задачи.
Details
-
URL
/todos/:id
-
Method:
PATCH -
Headers:
'Authorization': 'Bearer [access-token]''Content-Type': 'application/json' -
URL Params
Required:
id=[string] -
Query Params
None
-
Data Params
{ "isDone": true } -
Success Response:
- Code: 200 OK
Content:{ "updatedData": { "isDone": true } }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
Code: 404 NOT FOUND
-
-
Notes:
None
Returns json data about contacts.
Возвращает json с данными о контактах.
Details
-
URL
/contacts
-
Method:
GET -
Headers:
'Authorization': 'Bearer [access-token]' -
URL Params
None
-
Query Params
Optional:
None
-
Data Params
None
-
Success Response:
- Code: 200 OK
Content:[ { "firstName": "CBBbb", "patronymic": "CBB", "surname": "CBB", "birthday": "1990-02-28", "mail": "cbb@gmail.com", "phone": [ "+777" ], "_id": "63e7e5c3d46c32fcbf7891fa", "companyName": "CB", "companyId": "63e3e28f3bf7fbab6532f051", "users": [ { "data": { "surname": "C", "mail": "c@gmail.com" }, "_id": "63e37f79609334e79cd043d9", "id": "63e37f79609334e79cd043d9" }, { "data": { "surname": "D", "mail": "d@gmail.com" }, "_id": "63e37fa2609334e79cd043dc", "id": "63e37fa2609334e79cd043dc" } ] } ]
- Code: 200 OK
-
Error Response:
- Code: 401 UNAUTHORIZED
- Code: 401 UNAUTHORIZED
-
Notes:
None
Creates a new contact.
Создает новый контакт.
Details
-
URL
/contacts
-
Method:
POST -
Headers:
'Authorization': 'Bearer [access-token]''Content-Type': 'application/json' -
URL Params
None
-
Query Params
None
-
Data Params
{ "contact": { "firstName": "CFAa", "patronymic": "CFAa", "surname": "CFAa", "birthday": "1989-04-08", "mail": "cfaa@gmail.com", "phone": [ "+777" ] }, "companyId": "63e3e28f3bf7fbab6532f051" } -
Success Response:
- Code: 201 CREATED
Content:{ "newClient": { "firstName": "CFAa", "patronymic": "CFAa", "surname": "CFAa", "birthday": "1989-04-08", "mail": "cfaa@gmail.com", "phone": [ "+777" ] } }
- Code: 201 CREATED
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
-
Notes:
Updates attributes of a specified contact.
Обновляет данные указанного контакта.
Details
-
URL
/contacts/:id
-
Method:
PATCH -
Headers:
'Authorization': 'Bearer [access-token]''Content-Type': 'application/json' -
URL Params
Required:
id=[string] -
Query Params
None
-
Data Params
{ "mail": "cfaaa@gmail.com" } -
Success Response:
- Code: 200 OK
Content:{ "updatedWorker": { "firstName": "CFAa", "patronymic": "CFAa", "surname": "CFAa", "birthday": "1989-04-08", "mail": "cfaaa@gmail.com", "phone": [ "+777" ], "_id": "63e81bbce2d6e2ef8dab3d88" } }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
Code: 404 NOT FOUND
-
-
Notes:
None
Delete specified contact.
Удаляет указанный контакт.
Details
-
URL
/contacts/:id
-
Method:
DELETE -
Headers:
'Authorization': 'Bearer [access-token]' -
URL Params
Required:
id=[string] -
Query Params
None
-
Data Params
None
-
Success Response:
- Code: 200 OK
Content:{ "deletedWorker": [ { "firstName": "CFAa", "patronymic": "CFAa", "surname": "CFAa", "birthday": "1989-04-08", "mail": "cfaaa@gmail.com", "phone": [ "+777" ], "_id": "63e81bbce2d6e2ef8dab3d88" } ] }
- Code: 200 OK
-
Error Response:
-
Code: 400 BAD REQUEST
-
Code: 401 UNAUTHORIZED
-
Code: 403 FORBIDDEN
-
Code: 404 NOT FOUND
-
-
Notes:
None