# Яндекс Диск REST API: Скопировать, переместить или удалить папку

Сценарий из mcp-everything. Актуально на 2026-10-24.

Разложить файлы по папкам, архивировать старое, очистить место.

1. Скопируй: POST /v1/disk/resources/copy с from и path. Перемести: POST /v1/disk/resources/move с теми же параметрами. Удали: DELETE /v1/disk/resources с path (permanently = true — без Корзины).
2. Файл или пустая папка обрабатываются сразу (201 или 204). Для непустой папки придёт 202 и ссылка на операцию.
3. Проверяй статус: GET /v1/disk/operations/{operation_id} — success, in-progress или failed (тогда повтори исходный запрос).
4. Загрузить файл прямо из интернета на Диск можно через POST /v1/disk/resources/upload с url и path — это тоже длительная операция.

```bash
OP=$(curl -s -X POST -G https://cloud-api.yandex.net/v1/disk/resources/move -H "$H" \
  --data-urlencode 'from=disk:/Отчёты/2025' --data-urlencode 'path=disk:/Архив/Отчёты 2025' | jq -r .href)
curl -s "$OP" -H "$H"   # {"status": "in-progress"} → {"status": "success"}
```

## Базовые URL

- Боевой: `https://cloud-api.yandex.net`
- Загрузка и скачивание файлов идут через отдельные адреса, которые API возвращает в поле .: `href`

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

Тип: OAuth 2.0

OAuth-токен Яндекс ID передаётся в заголовке `Authorization` с типом токена перед значением. Для получения токена создают OAuth-приложение с правами Диска (`cloud_api:disk.write`, `cloud_api:disk.read`, `cloud_api:disk.app_folder`, `cloud_api:disk.info`) и открывают `https://oauth.yandex.ru/authorize?response_type=token&client_id=<ClientID>`.

Заголовки `Accept` и `Content-Type` — только `application/json`.

```
Authorization: OAuth 0c4181a7c2cf4521964a72ff57a34a07
```

## Методы сценария

### POST /v1/disk/resources/upload — Загрузка файла из интернета

Асинхронно скачивает файл по URL на Диск; ответ `202 Accepted` со ссылкой на статус операции.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `url` | query | string | да | Адрес файла, в URL-кодировке |
| `path` | query | string | да | Путь на Диске, в URL-кодировке |
| `fields` | query | string | нет | Ключи ответа |
| `disable_redirects` | query | boolean | нет | Запретить переход по редиректу, по умолчанию false |

### POST /v1/disk/resources/copy — Копирование

Файл или пустая папка — синхронно (`201 Created`); непустая папка — асинхронно (`202 Accepted`, ссылка на статус операции).

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `from` | query | string | да | Путь к копируемому ресурсу |
| `path` | query | string | да | Путь к копии, до 32760 символов |
| `overwrite` | query | boolean | нет | Перезаписать ресурсы с совпадающими именами, по умолчанию false |
| `force_async` | query | boolean | нет | Выполнить асинхронно |
| `fields` | query | string | нет | Ключи ответа |

### POST /v1/disk/resources/move — Перемещение

Ответы такие же, как у копирования.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `from` | query | string | да | Текущий путь к ресурсу |
| `path` | query | string | да | Новый путь, до 32760 символов |
| `overwrite` | query | boolean | нет | Перезаписать, по умолчанию false |
| `force_async` | query | boolean | нет | Выполнить асинхронно |
| `fields` | query | string | нет | Ключи ответа |

### DELETE /v1/disk/resources — Удаление

Файл или пустая папка — `204 No Content`; непустая папка — `202 Accepted` со ссылкой на статус операции.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `path` | query | string | да | Путь к ресурсу |
| `permanently` | query | boolean | нет | Удалить без Корзины, по умолчанию false |
| `md5` | query | string | нет | MD5 файла для проверки, что удаляется нужный файл |
| `force_async` | query | boolean | нет | Выполнить асинхронно |
| `fields` | query | string | нет | Ключи ответа |

### GET /v1/disk/operations/{operation_id} — Статус операции

Статусы: `success`, `failed` (повторите исходный запрос), `in-progress`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `operation_id` | path | string | да | Идентификатор операции из ответа длительного запроса |

Пример ответа:

```json
{
  "status":"success"
}
```

## Нюансы

- Пути передаются в URL-кодировке; `disk:/foo` и `/foo` — одна и та же папка.
- Длительные операции (копирование, перемещение, удаление непустых папок, загрузка из интернета) возвращают `202 Accepted` и объект Link на статус — статус нужно опрашивать самостоятельно.
- Объект Link: `href` (URL), `method` (HTTP-метод для него), `templated` (нужна ли подстановка параметров по RFC 6570).
- Ссылки на загрузку действуют 30 минут, ссылки на скачивание — ограниченное время.
- Один токен даёт одному приложению доступ к Диску одного пользователя; потерянный токен в кабинете не найти — запросите новый.

## Другие сценарии

- [Загрузить файл на Диск](https://mcp-everything.ru/integrations/yandex-disk/scenarios/zagruzit-fayl-na-disk.md)
- [Скачать файл с Диска](https://mcp-everything.ru/integrations/yandex-disk/scenarios/skachat-fayl-s-diska.md)
- [Поделиться файлом по публичной ссылке](https://mcp-everything.ru/integrations/yandex-disk/scenarios/podelitsya-faylom-po-publichnoy-ssylke.md)

---

Если этого недостаточно — официальная документация: https://yandex.ru/dev/disk-api/doc/ru/
Вся интеграция одним документом: https://mcp-everything.ru/integrations/yandex-disk.md
