# Мегаплан API v3: Поставить задачу сотруднику

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

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

1. Получи токен: POST /api/v3/auth/access_token с username, password и grant_type = password (multipart-форма). Токен живёт 48 часов — сохрани его и обновляй заранее. Передавай в заголовке AUTHORIZATION: Bearer <token>.
2. Найди ответственного: GET /api/v3/employee — в ответе id сотрудников.
3. Создай задачу: POST /api/v3/task с contentType = Task, name и responsible — ссылочным объектом {"contentType": "Employee", "id": ...}. Описание — subject, срочность — isUrgent.
4. Ответ приходит в конверте meta + data: id новой задачи — в data.id, ошибки — в meta.
5. Чтобы поменять задачу, отправь POST /api/v3/task/{id} с изменяемыми полями — Мегаплан меняет сущности POST-запросом на их адрес, а не PUT или PATCH.

```bash
TOKEN=$(curl -s -X POST https://<аккаунт>.megaplan.ru/api/v3/auth/access_token \
  -F username=<логин> -F password=<пароль> -F grant_type=password | jq -r .access_token)

curl -X POST https://<аккаунт>.megaplan.ru/api/v3/task \
  -H "AUTHORIZATION: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
        "contentType": "Task",
        "name": "Перезвонить клиенту по заявке с сайта",
        "responsible": {"contentType": "Employee", "id": 1000003},
        "subject": "Иван Петров, +7 999 000-11-22, интересуется доставкой",
        "isUrgent": true
      }'
```

## Базовые URL

- Боевой: `https://<ваш-аккаунт>.megaplan.ru/api/v3/`
- Тестовый (демо-аккаунт): `https://demo.megaplan.ru/api/v3/`

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

Тип: Bearer-токен

Токен передаётся в каждом запросе в заголовке `AUTHORIZATION: Bearer <token>`. Для авторизации по логину и паролю токен получают запросом `POST /api/v3/auth/access_token` с `grant_type=password`; он живёт 48 часов (`expires_in` 172800). Приложения Мегаплана получают токен в `data->token` событий приложения.

```
curl --request POST \
    --url https://demo.megaplan.ru/api/v3/auth/access_token \
    --header 'content-type: multipart/form-data;' \
    --form username=dev-null@megoplan.ru \
    --form password=123 \
    --form grant_type=password
```

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

### POST /api/v3/auth/access_token — Получение токена

В ответе: `access_token`, `expires_in`, `token_type`, `scope`, `refresh_token`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `username` | body | string | да | Логин пользователя |
| `password` | body | string | да | Пароль |
| `grant_type` | body | string | да | password |

### POST /api/v3/task — Создать задачу

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `contentType` | body | string | да | Task |
| `name` | body | string | да | Название задачи |
| `responsible` | body | object | да | Ответственный: {"contentType": "Employee", "id": ...} |
| `subject` | body | string | нет | Описание |
| `isUrgent` | body | boolean | нет | Срочная |
| `isTemplate` | body | boolean | нет | Шаблон |
| `Category...CustomField...` | body | any | нет | Расширенные (пользовательские) поля |

Пример запроса:

```
{
    "contentType": "Task",
    "name": "Название задачи",
    "responsible": {
        "contentType": "Employee",
        "id": 1000003
    },
    "subject": "Описание задачи",
    "isUrgent": false,
    "isTemplate": false
}
```

### POST /api/v3/task/{id} — Изменить задачу

Изменение выполняется POST-запросом на адрес задачи с изменяемыми полями.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `id` | path | integer | да | ID задачи |
| `name` | body | string | нет | Новое название |

### GET /api/v3/employee — Список сотрудников

Список сотрудников аккаунта; карточка — `GET /api/v3/employee/{id}`.

## Нюансы

- Ответ всегда в конверте `meta` + `data`: в `meta` — `status`, ошибки и `pagination` (`count`, `limit`).
- Параметры GET-запросов передаются JSON-объектом прямо в строке запроса, например `GET /api/v3/currency?{"limit": "3"}`.
- Пагинация курсорная: `pageAfter`/`pageBefore` принимают ссылочную сущность (`contentType` + `id`), а не номер страницы.
- Коллекции отдают только базовые поля; для полного набора запросите карточку по `id` или передайте `fields`.
- Изменение сущности — `POST` на её адрес (`/api/v3/task/{id}`), а не PUT или PATCH.
- Пользовательские поля имеют имена вида `Category130CustomField...`; для фильтра по расширенным полям сделок нужно указать схему `program`.
- Полный список сущностей и эндпоинтов публикуется на каждом аккаунте: `/api/v3/docs`; RAML-описание — `/api/v3`.
- Пример ответа:

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

- [Создать клиента и сделку](https://mcp-everything.ru/integrations/megaplan/scenarios/sozdat-klienta-i-sdelku.md)
- [Выгрузить задачи с фильтром и постранично](https://mcp-everything.ru/integrations/megaplan/scenarios/vygruzit-zadachi-s-filtrom.md)

---

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