# Supplier. Поставщики

> Источник: https://wiki.virtualpos.ru/hc/api/supplier  
> Обновлено: 2026-10-08

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

> **Примечание:**
> Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье [Общие сведения](https://wiki.virtualpos.ru/hc/api/overview). Здесь описаны только особенности методов раздела `supplier`.

## Методы

| Метод | Адрес | Что делает |
| --- | --- | --- |
| Получить поставщиков | `/api/supplier` | Возвращает одного или всех поставщиков |
| Создать или изменить | `/api/supplier/update` | Обновляет поставщика или создаёт нового |

Удаления поставщиков через API нет.

> **Важно:**
> **Где передавать параметры.** Ключ `apikey` и формат `format` принимаются и в адресной строке, и в теле POST-запроса. Параметры `id`, `external_id` и `create_if_not_exist` в методе `update` читаются **только из адресной строки (GET)**. Остальные параметры можно передавать и в адресной строке, и в теле POST. Значения с кириллицей и пробелами кодируйте.

## Получение поставщиков

```
GET https://[компания].myvirtualpos.ru/api/supplier?apikey=MySecret&type_id=2
```

### Параметры запроса

- **id** — Число. Ид поставщика
- **external_id** — Строка. Код поставщика во внешней системе (например, в 1С)
- **type_id** — Число. Ид типа: вернутся только поставщики этого типа
- **format** — `json` (по умолчанию) или `xml`

Условия объединяются по «и». Без параметров возвращаются все поставщики одним ответом; постраничной выдачи нет.

### Структура ответа

- **success** — `1` — данные получены
- **type** — Тип данных, всегда `supplier`
- **count** — Количество поставщиков в ответе
- **suppliers** — Список поставщиков. Каждый обёрнут в объект `supplier`

### Поля поставщика

Пустые значения в JSON приходят как `null`, в XML — как пустой элемент.

**Основное**

- **id** — Число. Ид поставщика
- **external_id** — Строка. Код во внешней системе
- **name** — Строка. Название
- **legal_name** — Строка. Юридическое название
- **type_id** — Число. Ид типа поставщика
- **type_name** — Строка. Название типа, например «Внешний поставщик» или «Банк»
- **code** — Строка. Код
- **is_supplier**, **is_buyer**, **is_bank**, **is_individual** — Число. Признаки роли: `1` — поставщик, покупатель, банк, физическое лицо
- **created_date**, **last_update_date** — Строка. Дата и время создания и последнего изменения
- **created_by**, **last_update_by** — Число. Ид пользователя, создавшего и изменившего запись

**Реквизиты и контакты**

- **inn**, **kpp** — Строка. ИНН и КПП
- **OKPO**, **OKONH** — Строка. Коды ОКПО и ОКОНХ
- **address**, **delivaddress** — Строка. Юридический адрес и адрес доставки
- **phone**, **email**, **www** — Строка. Телефон, электронная почта и сайт
- **chief_first_name**, **chief_last_name** — Строка. Имя и фамилия руководителя
- **corraccount**, **bankaccount** — Строка. Корреспондентский и расчётный счета
- **BIK**, **bank_name** — Строка. БИК (9 цифр) и название банка

**Настройки**

- **price_coef** — Строка. Коэффициент поставщика для сводного прайс-листа
- **pricelist_life_length** — Число. Срок жизни прайс-листа поставщика в часах
- **znak_sys_id**, **znak_branch_id** — Строка. Идентификаторы в системе маркировки
- **organisation_id** — Число. Ид юридического лица, если поставщик — внутренний
- **customer_id** — Число. Ид клиента, если поставщик — физическое лицо
- **attribute1** … **attribute15** — Строка. Значения гибких полей

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

```json
{
  "success": 1,
  "type": "supplier",
  "count": 1,
  "suppliers": [
    {
      "supplier": {
        "id": 151,
        "name": "Мой поставщик",
        "legal_name": "ООО «Мой поставщик»",
        "inn": "7700000000",
        "kpp": "770001001",
        "address": null,
        "phone": "+7 900 000-00-01",
        "email": "info@example.com",
        "www": null,
        "created_date": "2026-09-26 10:45:53",
        "created_by": null,
        "last_update_date": "2026-09-26 10:45:54",
        "last_update_by": null,
        "type_id": 2,
        "code": null,
        "OKPO": null,
        "OKONH": null,
        "corraccount": null,
        "bankaccount": null,
        "BIK": null,
        "bank_name": null,
        "delivaddress": null,
        "external_id": "S-151",
        "price_coef": "1.200",
        "pricelist_life_length": 0,
        "znak_sys_id": null,
        "znak_branch_id": null,
        "chief_first_name": "Иван",
        "chief_last_name": null,
        "is_supplier": 1,
        "is_bank": 0,
        "is_buyer": 0,
        "is_individual": 0,
        "organisation_id": null,
        "customer_id": null,
        "type_name": "Внешний поставщик"
      }
    }
  ]
}
```

В примере опущены пустые гибкие поля `attribute1`…`attribute15`. Тот же ответ при `format=xml` (сокращённо):

```xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <success>1</success>
  <type>supplier</type>
  <count>1</count>
  <suppliers>
    <supplier>
      <id>151</id>
      <name>Мой поставщик</name>
      <inn>7700000000</inn>
      <!-- остальные поля поставщика -->
      <type_name>Внешний поставщик</type_name>
    </supplier>
  </suppliers>
</root>
```

Если ничего не найдено, метод возвращает успешный ответ с `count` равным `0` и пустым списком `suppliers`.

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

```
POST https://[компания].myvirtualpos.ru/api/supplier/update?apikey=MySecret&external_id=S-151&create_if_not_exist=1
name=Мой поставщик&inn=7700000000&kpp=770001001&is_supplier=1
```

Поставщик ищется по `id`, а если он не указан — по `external_id`. Если поставщик не найден, а передан `create_if_not_exist=1`, создаётся новый. Изменяются только переданные параметры.

### Параметры

- **id** — Число. Ид изменяемого поставщика. Только GET
- **external_id** — Строка. Код поставщика во внешней системе. Если `id` не указан, по нему ищется поставщик; одновременно это поле поставщика: при создании код сохраняется. Только GET
- **create_if_not_exist** — `1` — создать поставщика, если он не найден. Только GET
- **name** — Строка. Название. Обязательно при создании
- **legal_name**, **inn**, **kpp**, **address**, **delivaddress** — Строка. Юридическое название, ИНН, КПП, адреса
- **phone**, **email**, **www** — Строка. Контакты; `email` должен быть корректным адресом
- **type_id** — Число. Ид типа поставщика; тип должен существовать. По умолчанию для нового поставщика — `2` (внешний поставщик)
- **code**, **OKPO**, **OKONH** — Строка. Код, ОКПО, ОКОНХ
- **corraccount**, **bankaccount**, **bank_name** — Строка. Счета и название банка
- **BIK** — Строка, 9 цифр. БИК
- **chief_first_name**, **chief_last_name** — Строка. Имя и фамилия руководителя
- **is_supplier**, **is_buyer**, **is_bank**, **is_individual** — `1` или `0`. Признаки роли
- **price_coef** — Число. Коэффициент поставщика
- **pricelist_life_length** — Число. Срок жизни прайс-листа в часах
- **organisation_id**, **customer_id** — Число. Ид юридического лица и клиента, с которыми связан поставщик
- **attribute1** … **attribute15** — Значения гибких полей

### Ответ

```json
{"success":1,"id":"151","isnew":"1"}
```

- **success** — `1` — поставщик сохранён
- **id** — Ид поставщика. При создании приходит строкой, при изменении — числом
- **isnew** — `"1"` — создан, `"0"` — изменён существующий

## Примеры запросов

| Задача | Запрос |
| --- | --- |
| Все поставщики | `/api/supplier?apikey=MySecret` |
| Поставщик по коду из 1С | `/api/supplier?apikey=MySecret&external_id=S-151` |
| Только банки | `/api/supplier?apikey=MySecret&type_id=3` |
| Создать поставщика | `/api/supplier/update?apikey=MySecret&create_if_not_exist=1&external_id=S-151&name=Supplier&is_supplier=1` |
| Изменить телефон | `/api/supplier/update?apikey=MySecret&id=151&phone=%2B79000000001` |

## Ошибки

Ошибка авторизации и общие ошибки описаны в статье [Общие сведения](https://wiki.virtualpos.ru/hc/api/overview). Ошибки приходят с кодом HTTP 200 и `success` равным `0`:

| Сообщение | Причина | Что делать |
| --- | --- | --- |
| You have to specify [id] or [external_id] to update record | Нет `id`, `external_id` и `create_if_not_exist` | Передайте идентификатор или `create_if_not_exist=1` |
| Record not found | Поставщик не найден, а `create_if_not_exist` не указан | Проверьте идентификатор или передайте `create_if_not_exist=1` |
| Data validation failed. … | Не заполнено название, некорректные `email` или `BIK`, нецелые значения там, где нужны целые | Исправьте поля, перечисленные в сообщении |
| Cannot save data. … | Ошибка сохранения; например, `type_id` указывает на несуществующий тип | Проверьте ссылки на другие записи |

## Связанные разделы

- [Общие сведения](https://wiki.virtualpos.ru/hc/api/overview) — Ключ доступа, вызов методов, форматы ответов и ошибки
- [Inflow. Поступления](https://wiki.virtualpos.ru/hc/api/inflow) — Поступления от поставщиков
- [Returns. Возвраты поставщику](https://wiki.virtualpos.ru/hc/api/returns) — Возвраты поставщикам
