# МойСклад JSON API 1.2: Создать покупателя и заказ

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

Заказ из интернет-магазина: найти или создать контрагента, затем создать заказ с позициями и резервом.

1. Найди контрагента: GET /api/remap/1.2/entity/counterparty?search=... (или `filter` по `inn`, `phone`, `email`).
2. Если не найден — создай: POST /api/remap/1.2/entity/counterparty (обязательно только `name`).
3. Создай заказ: POST /api/remap/1.2/entity/customerorder с `organization` и `agent` (ссылки в формате `meta`) и массивом `positions` (`quantity`, `price`, `assortment.meta`, `reserve`).
4. Позиций в одном запросе — не больше 1000; дальше добавляй через ресурс позиций заказа.

```shell
curl --compressed -X POST \
  "https://api.moysklad.ru/api/remap/1.2/entity/counterparty" \
  -H "Authorization: Basic <Credentials>" \
  -H "Accept-Encoding: gzip" \
  -H "Content-Type: application/json" \
  -d '{"name": "ООО Радуга", "inn": "125152124152", "email": "raduga@stroi.ru"}'
```

## Базовые URL

- Боевой: `https://api.moysklad.ru`
- Все пути начинаются с .: `/api/remap/1.2`

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

Тип: Bearer-токен

Два способа: Basic Auth (заголовок `Authorization: Basic` с `логин:пароль` в Base64) или токен доступа (`Authorization: Bearer <AccessToken>`). Токен пользователя выдаёт POST /api/remap/1.2/security/token; для решений из маркетплейса используется токен решения. Лимит запросов зависит от способа: токены решений расходуют лимит медленнее, чем логин/пароль и токен пользователя.

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

### GET /api/remap/1.2/entity/counterparty — Список контрагентов

Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/dictionaries/counterparty#2-kontragent

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `limit` | query | integer | нет | До 1000 |
| `offset` | query | integer | нет | Отступ |
| `search` | query | string | нет | Контекстный поиск по полям |
| `filter` | query | string | нет | Фильтр по полям, например inn, phone, email |
| `async` | query | boolean | нет | Асинхронная выгрузка |

### POST /api/remap/1.2/entity/counterparty — Создание контрагента

Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/dictionaries/counterparty#2-kontragent

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `name` | body | string | да | Наименование |
| `inn` | body | string | нет | ИНН |
| `kpp` | body | string | нет | КПП |
| `legalTitle` | body | string | нет | Полное наименование |
| `legalAddress` | body | string | нет | Юридический адрес |
| `email` | body | string | нет | Email |
| `phone` | body | string | нет | Телефон |
| `tags` | body | array | нет | Группы (теги) |
| `externalCode` | body | string | нет | Внешний код |

### POST /api/remap/1.2/entity/customerorder — Создание заказа покупателя

Документация: https://dev.moysklad.ru/doc/api/remap/1.2/#/documents/customerOrder#2-zakaz-pokupatelya

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `organization.meta` | body | object | да | Ваше юрлицо |
| `agent.meta` | body | object | да | Контрагент-покупатель |
| `positions[].assortment.meta` | body | object | нет | Товар, услуга или модификация |
| `positions[].quantity` | body | number | нет | Количество |
| `positions[].price` | body | number | нет | Цена в копейках |
| `positions[].discount` | body | number | нет | Скидка, % |
| `positions[].vat` | body | integer | нет | НДС, % |
| `positions[].reserve` | body | number | нет | Резерв |
| `store.meta` | body | object | нет | Склад |
| `state.meta` | body | object | нет | Статус заказа |
| `name` | body | string | нет | Номер заказа |
| `moment` | body | string | нет | Дата документа |

## Нюансы

- Обязательно сжатие: заголовок `Accept-Encoding: gzip`, иначе `415` без тела.
- Ссылки на объекты передаются в формате `meta` (`href`, `type`, `mediaType`).
- Списки возвращают `meta` (`size`, `limit`, `offset`, `nextHref`, `previousHref`) и `rows`; `limit` — до 1000.
- Массив `positions` в запросе на обновление полностью заменяет позиции документа: непереданные удаляются.
- Цены и суммы — в копейках.
- Функции под заголовком `X-Lognex-Remap-Beta-Feature` не подпадают под гарантию неизменности структуры.
- Остаток по заголовкам: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-Lognex-Retry-TimeInterval`, `X-Lognex-Reset`, `X-Lognex-Retry-After`.
- Вебхуки работают только на платных тарифах и в пробный период; при бесплатном тарифе их нельзя создать.
- Есть MCP-сервер документации JSON API (раздел MCP-dev) — он ищет по документации и не выполняет запросы к аккаунту.

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

- [Получить токен и начать работу](https://mcp-everything.ru/integrations/moysklad/scenarios/poluchit-token-i-nachat-rabotu.md)
- [Выгрузить каталог с остатками](https://mcp-everything.ru/integrations/moysklad/scenarios/vygruzit-katalog-s-ostatkami.md)
- [Отгрузить заказ](https://mcp-everything.ru/integrations/moysklad/scenarios/otgruzit-zakaz.md)
- [Получать уведомления об изменениях](https://mcp-everything.ru/integrations/moysklad/scenarios/poluchat-uvedomleniya-ob-izmeneniyah.md)
- [Выгрузить большой отчёт асинхронно](https://mcp-everything.ru/integrations/moysklad/scenarios/vygruzit-bolshoy-otchet-asinhronno.md)

---

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