# Электронный Дневник API

## Авторизация

<mark style="color:green;">`POST`</mark> `https://example.com/api/auth/`

Метод позволяет получить User ID и User Secret для дальнейшего использования API

#### Request Body

| Name         | Type   | Description                       |
| ------------ | ------ | --------------------------------- |
| vk\_user\_id | string | Vk User ID                        |
| device\_type | string | Тип устройства (pc, ios, android) |
| diary        | string | Название дневника                 |
| login        | string | Логин пользователя                |
| password     | string | Пароль пользователя               |
| region       | number | ID региона (для NetSchool)        |
| province     | number | ID области (для NetSchool)        |
| city         | number | ID города (для NetSchool)         |
| school       | number | ID школы (для NetSchool)          |

{% tabs %}
{% tab title="200 Пример успешной авторизации." %}

```javascript
// Successful authorization.
{
    "status": true, // Response status 
    "message": "Вы успешно авторизированы!",
    "id": 1000000000, // User ID
    "secret": "ffffffffff", // User Secret
    "created": true, // Logged in the first time or not
    "students": {
        "list": [
            {
                "id": 300,
                "name": "Павел Дуров",
                "class": "10а",
                "school_id": 400,
                "school_name": "МБОУ СОШ № 41"
            }
        ],
        "default": 300
    }
}

// Authorization failed.
{
    "status": false, // Response status
    "message": "Неправильный пароль или имя пользователя",    
}
```

{% endtab %}

{% tab title="422 Дргуие ошибки в авторизации." %}

```javascript
// Проблемы подключения к дневнику
{
    'error_msg': 'Communication error with diary. Unknown problem.',
    'error_code': 5,
}

// Пропущен специальный параметр для уникального дневника
{
    'error_msg': 'Missing parameter: region',
    'error_code': 1,
}

// и т.д
```

{% endtab %}
{% endtabs %}

## (VK) Привязка аккаунта

<mark style="color:green;">`POST`</mark> `https://example.com/api/auth/bind_account/vk/`

Метод привязывает VK Account к вашему аккаунту в дневнике

#### Request Body

| Name                            | Type   | Description        |
| ------------------------------- | ------ | ------------------ |
| id                              | number | User ID            |
| secret                          | string | User Secret        |
| sign                            | string | VK App query param |
| vk\_app\_id                     | number | VK App query param |
| vk\_user\_id                    | number | VK App query param |
| vk\_language                    | string | VK App query param |
| vk\_platform                    | string | VK App query param |
| vk\_is\_app\_user               | number | VK App query param |
| vk\_access\_token\_settings     | string | VK App query param |
| vk\_are\_notifications\_enabled | number | VK App query param |

{% tabs %}
{% tab title="200 Пример привязки аккаунта." %}

```javascript
// Successful bind.
{
    "status": true, 
    "message": "Accounts successfully linked"
}

// Binding failed.
{
    "status": false,
    "message": "Unable to linked accounts"
}
```

{% endtab %}
{% endtabs %}

## (VK) Авторизация через привязанный аккаунт

<mark style="color:blue;">`GET`</mark> `https://example.com/api/auth/bind_account/vk/`

Метод позволяет получить User ID и User Secret для дальнейшего использования API

#### Request Body

| Name                            | Type   | Description |
| ------------------------------- | ------ | ----------- |
| sign                            | string |             |
| vk\_app\_id                     | number |             |
| vk\_user\_id                    | number |             |
| vk\_language                    | string |             |
| vk\_platform                    | string |             |
| vk\_is\_app\_user               | number |             |
| vk\_access\_token\_settings     | string |             |
| vk\_are\_notifications\_enabled | number |             |

{% tabs %}
{% tab title="200 Пример успешного получения данных" %}

```javascript
// Successful authorization.
{
    "status": true, // Response status 
    "message": "Account found!",
    "id": 1000000000, // User ID
    "secret": "ffffffffff", // User Secret
    "created": true, // Logged in the first time or not
    "students": {
        "list": [
            {
                "id": 300,
                "name": "Павел Дуров",
                "class": "10а",
                "school_id": 400,
                "school_name": "МБОУ СОШ № 41"
            }
        ],
        "default": 300
    }
}
```

{% endtab %}

{% tab title="422 Пример получения данных с ошибкой" %}

```javascript
{
    "status": false,
    "message": "Invalid query sign"
}
```

{% endtab %}
{% endtabs %}

## (VK) Отвязка аккаунта&#x20;

<mark style="color:blue;">`GET`</mark> `https://example.com/api/auth/bind_account/vk/logout/`

Метод позволяет отвязать аккаунт от профиля вк

#### Query Parameters

| Name         | Type    | Description |
| ------------ | ------- | ----------- |
| id           | integer | User ID     |
| secret       | string  | User Secret |
| vk\_user\_id | integer | Vk User ID  |

{% tabs %}
{% tab title="200 " %}

```javascript
{
    'status': true, 
    'message': 'Success logout'
    }
```

{% endtab %}
{% endtabs %}

## (App) Привязка аккаунта

<mark style="color:green;">`POST`</mark> `https://example.com/api/auth/bind_account/app/`

Метод привязывает VK Account к вашему аккаунту в дневнике

#### Request Body

| Name     | Type   | Description |
| -------- | ------ | ----------- |
| id       | number | User ID     |
| secret   | string | User Secret |
| user\_id | number | VK User ID  |
| token    | string | VK Token    |

{% tabs %}
{% tab title="200 Пример привязки аккаунта" %}

```javascript
// Successful bind.
{
    "status": true, 
    "message": "Accounts successfully linked"
}

// Binding failed.
{
    "status": false,
    "message": "Unable to linked accounts"
}
```

{% endtab %}
{% endtabs %}

## (App) Авторизация через привязанный аккаунт

<mark style="color:blue;">`GET`</mark> `https://example.com/api/auth/bind_account/app/`

Метод позволяет получить User ID и User Secret для дальнейшего использования API

#### Request Body

| Name     | Type   | Description   |
| -------- | ------ | ------------- |
| user\_id | number | VK User ID    |
| token    | string | VK User Token |

{% tabs %}
{% tab title="200 Пример успешного получения данных" %}

```javascript
{
    "status": true, // Response status 
    "message": "Account found",
    "id": 1000000000, // User ID
    "secret": "fffff", // User Secret
}
```

{% endtab %}

{% tab title="422 Пример получения данных с ошибкой" %}

```javascript
{
    "status": false,
    "message": "Invalid user token"
}
```

{% endtab %}
{% endtabs %}

## Данные для авторизации

<mark style="color:blue;">`GET`</mark> `https://example.com/api/auth/get_data/`

Метод получает параметры для авторизации в NetSchool

#### Query Parameters

| Name     | Type   | Description |
| -------- | ------ | ----------- |
| region   | number | ID региона  |
| province | number | ID области  |
| city     | number | ID города   |

{% tabs %}
{% tab title="200 Примеры получения параметров для авторизации." %}

```javascript
// With region ID
{
    "data": [
        {
            "id": -4007,
            "name": "Городской округ Конфетка"
        },
        {
            "id": 27,
            "name": "Классный район"
        }
    ]
}

// With region ID and province ID
{
    "data": [
        {
            "id": 3,
            "name": "Калуга, г."
        }
    ]
}


// With region ID and province ID and city ID
{
    "data": [
        {
            "id": 555,
            "name": "НОУ \"Школа прекрасная\""
        },
        {
            "id": 557,
            "name": "НОЧУ \"СОШ \"Радуга\""
        }
    ]
}
```

{% endtab %}

{% tab title="422 Ошибки получения параметров для авторизации." %}

```javascript
// Проблемы подключения к дневнику
{
    "error": "Communication error with diary. Unknown problem."
}

// Пропущен специальный параметр для уникального дневника
{
    "error": "Missing special parameter for diary: NetSchool"
}

// и т.д
```

{% endtab %}
{% endtabs %}

## Список дневников

<mark style="color:blue;">`GET`</mark> `https://example.com/api/auth/get_types/`

Метод позволяет получать список доступных дневников

#### Query Parameters

| Name | Type    | Description         |
| ---- | ------- | ------------------- |
| full | boolean | Show all diary info |

{% tabs %}
{% tab title="200 " %}

```javascript
// Full output
{
    "data": {
        "diaries": {
            "mosru": {
                "name": "Дневник МЭШ",
                "status": true
            },
            "netschool": {
                "name": "Сетевой Город",
                "status": true
            },
            "edutatar": {
                "name": "Электронное образование в Республике Татарстан",
                "status": true
            },
            "mosreg": {
                "name": "Школьный портал Московской области",
                "status": false
            },
            "dnevnikru": {
                "name": "Дневник.ру",
                "status": false
            }
        },
        "types": [
            "mosru",
            "netschool",
            "edutatar",
            "mosreg",
            "dnevnikru"
        ]
    }
}

// or short
{
    "data": {
        "types": [
            "mosru",
            "netschool",
            "edutatar",
            "mosreg",
            "dnevnikru"
        ]
    }
}
```

{% endtab %}
{% endtabs %}

## Информация о профиле

<mark style="color:blue;">`GET`</mark> `https://example.com/api/profile/info/`

Метод позволяет получать информацию о вашем профиле

#### Query Parameters

| Name        | Type   | Description |
| ----------- | ------ | ----------- |
| student\_id | number | Student ID  |
| id          | number | User ID     |
| secret      | string | User Secret |

{% tabs %}
{% tab title="200 " %}

```javascript
{
    "data": {
        "class_name": "10а",
        "name": {
            "first_name": "Дуров",
            "last_name": "Павел",
            "middle_name": "Валерьевич"
        },
        "diary": "netschool",
        "status": "У", // or 'Р' (Ученик или Родитель)
        
        "exp": 97.9353493527481,
        "student_id": 400,
        
        "personal": {
            "phone": "88005553535",
            "email": "user@example.com",
            "birth_date": "1984-10-10",
            "sex": "M" // or 'W' (Man  or Woman)
        },
        
        "students": [
            {
                "id": 1,
                "name": "Громова Арабелла",
                "student_id": 400
            }
        ]
    }
}
```

{% endtab %}
{% endtabs %}

## Выбор ученика

<mark style="color:green;">`POST`</mark> `https://example.com/api/profile/students/`

Метод позволяет выбрать ученика по умолчанию

#### Query Parameters

| Name        | Type   | Description      |
| ----------- | ------ | ---------------- |
| id          | number | User ID          |
| secret      | string | User Secret      |
| student\_id | number | Diary student ID |

{% tabs %}
{% tab title="200 Пример ответа на успешный запрос" %}

```javascript
{
    'status': true, 
    'student_id': 22848 // Student id that you have chosen
}
```

{% endtab %}

{% tab title="422 Пример ответа на запрос с ошибкой" %}

```javascript
{
    'status': false, 
    'error': 'Not found user_id 4123 in [22848]'
}
```

{% endtab %}
{% endtabs %}

## Список учеников

<mark style="color:blue;">`GET`</mark> `https://example.com/api/profile/students/`

Метод позволяет получить список всех учеников на аккаунте

#### Query Parameters

| Name   | Type   | Description |
| ------ | ------ | ----------- |
| id     | number | User ID     |
| secret | string | User Secret |

{% tabs %}
{% tab title="200 Пример успешного получения списка учеников" %}

```javascript
{
    "students": [
        {
            "id": 300,
            "name": "Павел Дуров",
            "class": "10а",
            "school_id": 400,
            "school_name": "МБОУ СОШ № 41"
        }
    ],
    "default": 300
}
```

{% endtab %}
{% endtabs %}

## Journal Dates

<mark style="color:blue;">`GET`</mark> `https://example.com/api/diary/journal/dates/`

Метод позволяет получать данные дневника в определенный промежуток времени

#### Query Parameters

| Name        | Type   | Description                   |
| ----------- | ------ | ----------------------------- |
| student\_id | number | Student ID                    |
| id          | number | User ID                       |
| secret      | string | User Secret                   |
| start       | string | Date of start period DD.MM.YY |
| end         | string | Date of end period DD.MM.YY   |

{% tabs %}
{% tab title="200 Пример успешного получения данных" %}

```javascript
{
    "data": {
        "days": [
            {
                "date": "2019.09.16",
                "subjects": [
                    {
                        "name": "Физика",
                        "number": 1,
                        "assignments": [
                            {
                                "text": "Ускорение. Прямолинейное движение с постоянным ускорением."
                            }
                        ],
                        "marks": [
                            {
                                "value": 5,
                                "type": "five",
                                "date": "2019.09.16"
                            }
                        ],
                        "time": [
                            "08:30",
                            "09:15"
                        ]
                    },
                    {
                        "name": "Физкультура",
                        "number": 2,
                        "assignments": [
                            {
                                "text": "не задано"
                            }
                        ],
                        "time": [
                            "09:30",
                            "10:15"
                        ]
                    },
                    {
                        "name": "Алгебра и начала анализа",
                        "number": 3,
                        "assignments": [
                            {
                                "text": "не задано"
                            }
                        ],
                        "time": [
                            "10:30",
                            "11:15"
                        ]
                    },
                    {
                        "name": "Английский язык",
                        "number": 4,
                        "assignments": [
                            {
                                "text": "стр. 166 упр. 2 (дописать)"
                            }
                        ],
                        "time": [
                            "11:30",
                            "12:15"
                        ]
                    },
                    {
                        "name": "Основы общей химии",
                        "number": 5,
                        "time": [
                            "12:30",
                            "13:15"
                        ]
                    },
                    {
                        "name": "элективный курс по математике",
                        "number": 6,
                        "time": [
                            "13:35",
                            "14:20"
                        ]
                    },
                    {
                        "name": "Информатика и ИКТ",
                        "number": 7,
                        "assignments": [
                            {
                                "text": "п.4, №5, 6, 7, 8(б), 9(б), 12(б), задача на Паскале, №15 демо ЕГЭ"
                            },
                            {
                                "text": "Структура информации."
                            }
                        ],
                        "marks": [
                            {
                                "value": 5,
                                "type": "five",
                                "date": "2019.09.16"
                            }
                        ],
                        "room": "23",
                        "time": [
                            "14:30",
                            "15:15"
                        ]
                    }
                ]
            }
        ]
    }
}
```

{% endtab %}
{% endtabs %}

## Journal Range

<mark style="color:blue;">`GET`</mark> `https://example.com/api/diary/journal/range/`

Метод позволяет получать данные дневника в промежуток времени относительно текущей даты

#### Query Parameters

| Name        | Type   | Description                                     |
| ----------- | ------ | ----------------------------------------------- |
| student\_id | number | Student ID                                      |
| id          | number | User ID                                         |
| secret      | string | User Secret                                     |
| before      | number | Number of days in advance from the current date |
| after       | number | Number of days from the current date            |

{% tabs %}
{% tab title="200 Пример успешного получения данных" %}

```javascript
{
    "data": {
        "days": [
            {
                "date": "2019.09.16",
                "subjects": [
                    {
                        "name": "Физика",
                        "number": 1,
                        "assignments": [
                            {
                                "text": "Ускорение. Прямолинейное движение с постоянным ускорением."
                            }
                        ],
                        "marks": [
                            {
                                "value": 5,
                                "type": "five",
                                "date": "2019.09.16"
                            }
                        ],
                        "time": [
                            "08:30",
                            "09:15"
                        ]
                    },
                    {
                        "name": "Физкультура",
                        "number": 2,
                        "assignments": [
                            {
                                "text": "не задано"
                            }
                        ],
                        "time": [
                            "09:30",
                            "10:15"
                        ]
                    },
                    {
                        "name": "Алгебра и начала анализа",
                        "number": 3,
                        "assignments": [
                            {
                                "text": "не задано"
                            }
                        ],
                        "time": [
                            "10:30",
                            "11:15"
                        ]
                    },
                    {
                        "name": "Английский язык",
                        "number": 4,
                        "assignments": [
                            {
                                "text": "стр. 166 упр. 2 (дописать)"
                            }
                        ],
                        "time": [
                            "11:30",
                            "12:15"
                        ]
                    },
                    {
                        "name": "Основы общей химии",
                        "number": 5,
                        "time": [
                            "12:30",
                            "13:15"
                        ]
                    },
                    {
                        "name": "элективный курс по математике",
                        "number": 6,
                        "time": [
                            "13:35",
                            "14:20"
                        ]
                    },
                    {
                        "name": "Информатика и ИКТ",
                        "number": 7,
                        "assignments": [
                            {
                                "text": "п.4, №5, 6, 7, 8(б), 9(б), 12(б), задача на Паскале, №15 демо ЕГЭ"
                            },
                            {
                                "text": "Структура информации."
                            }
                        ],
                        "marks": [
                            {
                                "value": 5,
                                "type": "five",
                                "date": "2019.09.16"
                            }
                        ],
                        "room": "23",
                        "time": [
                            "14:30",
                            "15:15"
                        ]
                    }
                ]
            }
        ]
    }
}
```

{% endtab %}
{% endtabs %}

## Marks Dates

<mark style="color:blue;">`GET`</mark> `https://example.com/api/diary/marks/dates/`

Метод позволяет получать данные оценок в определенный промежуток времени

#### Query Parameters

| Name         | Type   | Description                   |
| ------------ | ------ | ----------------------------- |
| presentation | string | Data type (map or list)       |
| student\_id  | number | Student ID                    |
| id           | number | User ID                       |
| secret       | string | User Secret                   |
| start        | string | Date of start period DD.MM.YY |
| end          | string | Date of end period DD.MM.YY   |

{% tabs %}
{% tab title="200 Пример успешного получения данных" %}

```javascript
// Presentation: Map
{
    "data": {
        "dates": {
            "2019.09.16": [
                {
                    "value": 5,
                    "subject": "Физика",
                    "type": "five",
                    "date": "2019.09.16"
                },
                {
                    "value": 5,
                    "subject": "Информатика и ИКТ",
                    "type": "five",
                    "date": "2019.09.16"
                }
            ]
        },
        "lessons": [
            "Информатика и ИКТ",
            "Физика"
        ]
    }
}

// Presentation: list
{
    "data": {
        "list": [
            {
                "value": 5,
                "subject": "Физика",
                "type": "five",
                "date": "2019.09.16"
            },
            {
                "value": 5,
                "subject": "Информатика и ИКТ",
                "type": "five",
                "date": "2019.09.16"
            }
        ],
        "lessons": [
            "Информатика и ИКТ",
            "Физика"
        ]
    }
}
```

{% endtab %}
{% endtabs %}

## Marks Range

<mark style="color:blue;">`GET`</mark> `https://example.com/api/diary/marks/range/`

Метод позволяет получать данные оценок в промежуток времени относительно текущей даты

#### Query Parameters

| Name         | Type    | Description                                     |
| ------------ | ------- | ----------------------------------------------- |
| presentation | string  | Data type (map or list)                         |
| student\_id  | integer | Student ID                                      |
| id           | integer | User ID                                         |
| secret       | string  | User Secret                                     |
| before       | number  | Number of days in advance from the current date |
| after        | number  | Number of days from the current date            |

{% tabs %}
{% tab title="200 Пример успешного получения данных" %}

```javascript
// Presentation: Map
{
    "data": {
        "dates": {
            "2019.09.16": [
                {
                    "value": 5,
                    "subject": "Физика",
                    "type": "five",
                    "date": "2019.09.16"
                },
                {
                    "value": 5,
                    "subject": "Информатика и ИКТ",
                    "type": "five",
                    "date": "2019.09.16"
                }
            ]
        },
        "lessons": [
            "Информатика и ИКТ",
            "Физика"
        ]
    }
}

// Presentation: list
{
    "data": {
        "list": [
            {
                "value": 5,
                "subject": "Физика",
                "type": "five",
                "date": "2019.09.16"
            },
            {
                "value": 5,
                "subject": "Информатика и ИКТ",
                "type": "five",
                "date": "2019.09.16"
            }
        ],
        "lessons": [
            "Информатика и ИКТ",
            "Физика"
        ]
    }
}
```

{% endtab %}
{% endtabs %}

## All Marks

<mark style="color:blue;">`GET`</mark> `https://example.com/api/diary/marks/all/`

Метод позволяет получать список всех оценок

#### Query Parameters

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| student\_id | integer | Student ID  |
| id          | integer | User ID     |
| secret      | string  | User Secret |

{% tabs %}
{% tab title="200 Пример успешного получения данных" %}

```javascript
{
    "data": [
        {
            "name": "Англ. язык (база)",
            "year_mark": "4",
            "periods": [
                {
                    "title": "За первое полугодие",
                    "final_mark": "4",
                    "marks": [
                        {
                            "value": 4,
                            "type": "five",
                            "date": "2019.09.13"
                        }
                    ]
                },
                {
                    "title": "За второе полугодие",
                    "final_mark": "4",
                    "marks": [
                        {
                            "value": 5,
                            "type": "five",
                            "date": "2019.09.24"
                        },
                        {
                            "value": 5,
                            "type": "five",
                            "date": "2019.09.24"
                        }
                    ]
                }
            ]
        },
```

{% endtab %}
{% endtabs %}

## Список одноклассников

<mark style="color:blue;">`GET`</mark> `https://example.com/api/diary/classmates/`

Метод позволяет получать список всех зарегестрированных одноклассников

#### Query Parameters

| Name   | Type    | Description |
| ------ | ------- | ----------- |
| id     | integer | User ID     |
| secret | string  | User Secret |

{% tabs %}
{% tab title="200 " %}

```javascript
{
    "data": [
        {
            "id": 1713,
            "name": "Сева Жидков",
            "student_id": 59137,
            "status": "У",
            "b_date": "2003-02-20",
            "vk_account": 91670994,
            "exp": 83.1841
        },
        {
            "id": 567,
            "name": "Руслан Степанов",
            "student_id": 59143,
            "status": "У",
            "b_date": "2003-11-06",
            "vk_account": 170457741,
            "exp": 96.81611
        }
    ]
}
```

{% endtab %}
{% endtabs %}

## Список измененных дз

<mark style="color:blue;">`GET`</mark> `https://example.com/api/diary/homework/`

Метод позволяет получать список всех измененных дз

#### Query Parameters

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| student\_id | string  | Student ID  |
| id          | integer | User ID     |
| secret      | string  | User Secret |

{% tabs %}
{% tab title="200 " %}

```javascript
[
    {
        "id": 1,
        "text": "Измененный текст",
        "subject": "Русский язык",
        "number": 1,
        "date": "2019-10-25",
        "creator": {
            "id": 9658702045814958,
            "first_name": "Данила",
            "last_name": "Волков",
            "status": "У"
        }
    }
]
```

{% endtab %}
{% endtabs %}

## Создание измененного дз

<mark style="color:green;">`POST`</mark> `https://example.com/api/diary/homework/create/`

Метод позволяет создавать измененное дз / изменять созданное

#### Query Parameters

| Name        | Type    | Description       |
| ----------- | ------- | ----------------- |
| id          | integer | User ID           |
| secret      | string  | User Secret       |
| student\_id | integer | Student ID        |
| text        | string  | Your edit text    |
| subject     | string  | Subject name      |
| number      | integer | Subject number    |
| date        | string  | Day date DD.MM.YY |

{% tabs %}
{% tab title="200 " %}

```javascript
{
    "id": 1,
    "created": true,
    "edited": true
}
```

{% endtab %}
{% endtabs %}

## Отправить жалобу на дз

<mark style="color:green;">`POST`</mark> `https://example.com/api/diary/homework/report/`

Метод позволяет отправить жалобу на человека, изменившего дз

#### Query Parameters

| Name        | Type    | Description        |
| ----------- | ------- | ------------------ |
| id          | integer | User ID            |
| secret      | string  | User Secret        |
| student\_id | string  | Student ID         |
| edit\_id    | integer | Homework edited ID |

{% tabs %}
{% tab title="200 " %}

```javascript
{
    "status": true
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://edudiary.gitbook.io/api/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
