---
slug: "vetis-mercury"
name: "Ветис.API — Меркурий (ФГИС ВетИС)"
vendor: "Россельхознадзор (ФГБУ «ВНИИЗЖ»)"
industry: "gov"
docsUrl: "https://help.vetrf.ru/wiki/Ветис.API"
version: 2
updatedAt: "2026-10-24"
---

# Ветис.API — Меркурий (ФГИС ВетИС)

Отрасль: Госсервисы. Актуально на 2026-10-24.

Универсальный шлюз Ветис.API связывает сторонние информационные системы с компонентами ВетИС (Меркурий, Хорриот, Цербер, Икар) и даёт доступ к справочникам и реестрам. Для хозяйствующих субъектов основной сервис — ApplicationManagementService Меркурия: оформление производственных, транспортных и входящих партий, гашение и аннулирование ВСД, получение ВСД и записей складского журнала, управление пользователями. Интерфейс — SOAP; работа с заявками псевдо-асинхронная: подать заявку, затем запросить результат.

## Сценарии

### Получить список входящих ВСД

Учётная система предприятия видит ветеринарные сопроводительные документы на поставки и готовит приёмку заранее.

1. Получи доступ: подай заявку через форму aplms.vetrf.ru (сначала тестовый контур t2-aplms.vetrf.ru). Придут логин и пароль для базовой аутентификации и apiKey; в запросах также нужен issuerId — идентификатор заявителя.
2. Подай заявку submitApplicationRequest на POST /platform/services/3.0/ApplicationManagementService: apiKey, application.serviceId = mercury-g2b.service:3.0, issuerId, issueDate, а в application.data — запрос операции GetVetDocumentList (getVetDocumentListRequest).
3. В запросе укажи initiator.login — логин пользователя Меркурия (логин базовой аутентификации не подойдёт), enterpriseGuid площадки, vetDocumentType = INCOMING, vetDocumentStatus = CONFIRMED и issueDateInterval — не длиннее 31 дня. Страницы — listOptions.count (до 1000) и offset.
4. В ответе на подачу — applicationId. Забери результат заявкой receiveApplicationResultRequest с apiKey, issuerId и applicationId; повторяй с паузой, пока заявка в обработке. applicationId хранится 3 дня.
5. В результате — vetDocumentList с атрибутами total, offset и count; если total больше полученного, запроси следующую страницу.

```bash
cat > list.xml <<'XML'
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:apldef="http://api.vetrf.ru/schema/cdm/application/ws-definitions"
  xmlns:apl="http://api.vetrf.ru/schema/cdm/application"
  xmlns:merc="http://api.vetrf.ru/schema/cdm/mercury/g2b/applications/v3"
  xmlns:vd="http://api.vetrf.ru/schema/cdm/mercury/vet-document/v2"
  xmlns:bs="http://api.vetrf.ru/schema/cdm/base"
  xmlns:dt="http://api.vetrf.ru/schema/cdm/dictionary/v2">
  <SOAP-ENV:Body>
    <apldef:submitApplicationRequest>
      <apldef:apiKey>APIKEY</apldef:apiKey>
      <apl:application>
        <apl:serviceId>mercury-g2b.service:3.0</apl:serviceId>
        <apl:issuerId>ISSUER_ID</apl:issuerId>
        <apl:issueDate>2026-10-24T10:00:00</apl:issueDate>
        <apl:data>
          <merc:getVetDocumentListRequest>
            <merc:localTransactionId>list20261024</merc:localTransactionId>
            <merc:initiator><vd:login>mercury_user</vd:login></merc:initiator>
            <bs:listOptions><bs:count>1000</bs:count><bs:offset>0</bs:offset></bs:listOptions>
            <vd:vetDocumentType>INCOMING</vd:vetDocumentType>
            <vd:vetDocumentStatus>CONFIRMED</vd:vetDocumentStatus>
            <vd:issueDateInterval>
              <bs:beginDate>2026-10-01T00:00:00</bs:beginDate>
              <bs:endDate>2026-10-24T23:59:59</bs:endDate>
            </vd:issueDateInterval>
            <dt:enterpriseGuid>ENTERPRISE_GUID</dt:enterpriseGuid>
          </merc:getVetDocumentListRequest>
        </apl:data>
      </apl:application>
    </apldef:submitApplicationRequest>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML

curl -s -u "$VETIS_LOGIN:$VETIS_PASSWORD" -H 'Content-Type: text/xml; charset=utf-8' \
  --data-binary @list.xml https://api.vetrf.ru/platform/services/3.0/ApplicationManagementService
# в ответе applicationId — передай его в receiveApplicationResultRequest:

cat > result.xml <<'XML'
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:apldef="http://api.vetrf.ru/schema/cdm/application/ws-definitions">
  <SOAP-ENV:Body>
    <apldef:receiveApplicationResultRequest>
      <apldef:apiKey>APIKEY</apldef:apiKey>
      <apldef:issuerId>ISSUER_ID</apldef:issuerId>
      <apldef:applicationId>APPLICATION_ID</apldef:applicationId>
    </apldef:receiveApplicationResultRequest>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
XML

curl -s -u "$VETIS_LOGIN:$VETIS_PASSWORD" -H 'Content-Type: text/xml; charset=utf-8' \
  --data-binary @result.xml https://api.vetrf.ru/platform/services/3.0/ApplicationManagementService
```

### Погасить входящий ВСД при приёмке товара

Кладовщик принял поставку мяса или молочной продукции — ВСД гасится из учётной системы, а товар попадает в складской журнал Меркурия.

1. Возьми данные ВСД из списка входящих (предыдущий сценарий): отправителя, получателя, партию, транспорт и сам документ.
2. Подай заявку submitApplicationRequest, в application.data — запрос операции ProcessIncomingConsignment (processIncomingConsignmentRequest): localTransactionId, initiator, delivery с фактическими данными (дата, отправитель, получатель, партия, транспорт, сопроводительные документы) и deliveryFacts.
3. В deliveryFacts укажи vetCertificatePresence = ELECTRONIC, результаты docInspection и vetInspection (CORRESPONDS, если всё совпало) и decision: ACCEPT_ALL — принять всё, PARTIALLY — частично, RETURN_ALL — вернуть.
4. Если факт расходится с ВСД больше чем на 5% по объёму, нужен discrepancyReport — акт несоответствия; при возврате — returnedDelivery. Номера транспортных средств обязательны.
5. Результат забери receiveApplicationResultRequest по applicationId. Ошибка бизнес-правил придёт в результате заявки, а не в ответе на подачу — проверяй именно его.

```xml
<!-- Содержимое apl:data в submitApplicationRequest; обёртка — как в сценарии выше -->
<merc:processIncomingConsignmentRequest>
  <merc:localTransactionId>inc20261024a</merc:localTransactionId>
  <merc:initiator><vd:login>mercury_user</vd:login></merc:initiator>
  <merc:delivery>
    <vd:deliveryDate>2026-10-24T09:30:00</vd:deliveryDate>
    <vd:consignor><!-- ХС и площадка отправителя из ВСД --></vd:consignor>
    <vd:consignee><!-- ХС и площадка получателя --></vd:consignee>
    <vd:consignment><!-- продукция, объём, единица измерения по факту --></vd:consignment>
    <vd:transportInfo><!-- тип и номер транспортного средства --></vd:transportInfo>
    <vd:accompanyingForms><!-- ссылка на гасимый ВСД и ТТН --></vd:accompanyingForms>
  </merc:delivery>
  <merc:deliveryFacts>
    <vd:vetCertificatePresence>ELECTRONIC</vd:vetCertificatePresence>
    <vd:docInspection><vd:result>CORRESPONDS</vd:result></vd:docInspection>
    <vd:vetInspection><vd:result>CORRESPONDS</vd:result></vd:vetInspection>
    <vd:decision>ACCEPT_ALL</vd:decision>
  </merc:deliveryFacts>
</merc:processIncomingConsignmentRequest>
```

### Сверить остатки и оформить отгрузку

Перед отгрузкой покупателю — проверить, что партия есть в складском журнале, и оформить транспортный ВСД.

1. Получи остатки площадки: заявка submitApplicationRequest с операцией GetStockEntryList (getStockEntryListRequest) — в результате актуальные записи складского журнала с объёмами и GUID записей.
2. Сверь их со своим складом: расхождение значит, что какая-то приёмка или списание не дошли до Меркурия.
3. Оформи отгрузку операцией PrepareOutgoingConsignment: в ней указываются запись складского журнала, из которой списывается объём, получатель и транспорт. Полная структура — в спецификации операции на help.vetrf.ru.
4. Справочные объекты (ХС, площадки, продукция) указывай по UUID или GUID; если передать оба, приоритет у UUID.
5. Отлаживай на тестовом контуре api2.vetrf.ru:8002 и проверяй результат в веб-интерфейсе t2-mercury.vetrf.ru.

```xml
<!-- Содержимое apl:data в submitApplicationRequest -->
<merc:getStockEntryListRequest>
  <merc:localTransactionId>stock20261024</merc:localTransactionId>
  <merc:initiator><vd:login>mercury_user</vd:login></merc:initiator>
  <bs:listOptions><bs:count>1000</bs:count><bs:offset>0</bs:offset></bs:listOptions>
  <dt:enterpriseGuid>ENTERPRISE_GUID</dt:enterpriseGuid>
</merc:getStockEntryListRequest>
```

## Базовые URL

- Боевой: `https://api.vetrf.ru`
- Тестовый: `https://api2.vetrf.ru:8002`
- WSDL v3.0: `https://api.vetrf.ru/schema/platform/services/v3.0b-last/ams-mercury-g2b.service_v3.0.wsdl`

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

Тип: Basic Auth

Базовая аутентификация логином и паролем, которые присылаются письмом после получения доступа; затем проверяется `apiKey`, передаваемый в теле запроса. Заявка на доступ подаётся через форму `https://t2-aplms.vetrf.ru/pub/` (тестовый контур) или `https://aplms.vetrf.ru/pub/` (продуктивный, нужна УКЭП руководителя). Поддержка — api@vetrf.ru.

## Методы

### POST /platform/services/3.0/ApplicationManagementService — submitApplicationRequest: подача заявки

В ответе: `applicationId`, `status`, `rcvDate`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `apiKey` | body | string | да | Ключ API |
| `application.serviceId` | body | string | да | mercury-g2b.service:3.0 |
| `application.issuerId` | body | string | да | Идентификатор заявителя |
| `application.issueDate` | body | string | да | Дата подачи заявки |
| `application.data` | body | object | да | Тело заявки: запрос конкретной операции Меркурия |

### POST /platform/services/3.0/ApplicationManagementService — receiveApplicationResultRequest: результат заявки

Идентификатор заявки хранится 3 дня.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `apiKey` | body | string | да | Ключ API |
| `issuerId` | body | string | да | Идентификатор заявителя |
| `applicationId` | body | string | да | ID заявки из ответа submitApplicationRequest |

### POST /platform/services/3.0/ApplicationManagementService — GetVetDocumentList: список ВСД

Передаётся в `application.data` как `getVetDocumentListRequest`. В ответе — `vetDocumentList` с атрибутами `total`, `offset`, `count`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `localTransactionId` | body | string | нет | ID заявки в клиентской системе |
| `initiator.login` | body | string | да | Логин пользователя Меркурия (логин базовой аутентификации не подходит) |
| `listOptions.count` | body | integer | нет | Количество, по умолчанию 100, максимум 1000 |
| `listOptions.offset` | body | integer | нет | Смещение, по умолчанию 0 |
| `vetDocumentType` | body | string | нет | INCOMING, OUTGOING, PRODUCTIVE, TRANSPORT, RETURNABLE |
| `vetDocumentStatus` | body | string | нет | CONFIRMED, WITHDRAWN, UTILIZED |
| `issueDateInterval.beginDate` | body | string | нет | Начало интервала оформления (интервал не больше 31 дня) |
| `issueDateInterval.endDate` | body | string | нет | Конец интервала |
| `consignor` | body | object | нет | Фильтр по отправителю (не для PRODUCTIVE) |
| `referencedDocument` | body | object | нет | Поиск по связанному документу (нужен vetDocumentType) |
| `enterpriseGuid` | body | string | да | GUID предприятия |

### POST /platform/services/3.0/ApplicationManagementService — ProcessIncomingConsignment: оформление входящей партии (гашение ВСД)

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `localTransactionId` | body | string | да | ID заявки в клиентской системе |
| `initiator` | body | object | да | Пользователь Меркурия, оформляющий операцию |
| `delivery` | body | object | да | Фактические данные партии: дата, отправитель, получатель, транспорт, входящий ВСД |
| `deliveryFacts` | body | object | да | Результаты приёмки; решение ACCEPT_ALL, PARTIALLY или RETURN_ALL |
| `discrepancyReport` | body | object | нет | Акт несоответствия (если данные ВСД и факт расходятся) |
| `returnedDelivery` | body | object | нет | Возвратный ВСД при частичном или полном возврате |

### POST /platform/services/3.0/ApplicationManagementService — PrepareOutgoingConsignment: оформление транспортной партии

Оформление исходящей партии и транспортного ВСД; структура — в спецификации операции.

### POST /platform/services/3.0/ApplicationManagementService — GetStockEntryList: записи складского журнала

Актуальный список записей складского журнала площадки; структура — в спецификации операции.

## Нюансы

- Все операции передаются через `submitApplicationRequest` (в `application.data`), а результат забирается `receiveApplicationResultRequest`; оба шага — синхронные вызовы.
- Справочные объекты (ХС, площадки, продукция) указываются UUID или GUID; при обоих приоритет у UUID.
- При гашении объём без акта несоответствия можно изменить не больше чем на 5%; номера транспортных средств обязательны.
- Другие операции: `RegisterProductionOperation`, `WithdrawVetDocument`, `GetVetDocumentByUuid`, `GetVetDocumentChangesList`, `GetStockEntryByGuid`, `GetStockEntryChangesList`, `MergeStockEntries`, `ResolveDiscrepancy`, `CheckShipmentRegionalization`, управление пользователями ХС.
- Тестовые веб-интерфейсы: `https://t2-mercury.vetrf.ru/hs`, `https://t2-accounts.vetrf.ru`.

## Ошибки

| Код | Описание |
|---|---|
| `некорректный запрос` | Запрос не соответствует схеме |
| `бизнес-правила` | Заявка не прошла проверку бизнес-правил |
| `внутренняя ошибка` | Внутренняя ошибка системы |

## Ограничения

- `GetVetDocumentList`: до 1000 ВСД за запрос, интервал дат — до 31 дня.
- Результат заявки хранится 3 дня.

## Источники

- [Компонент Ветис.API](https://help.vetrf.ru/wiki/Ветис.API)
- [Подсистема обработки заявок в Ветис.API](https://help.vetrf.ru/wiki/Подсистема_обработки_заявок_в_Ветис.API)
- [Профиль API 3.0 Меркурий](https://help.vetrf.ru/wiki/MercuryG2B:Services:v3.0)
- [GetVetDocumentList v3.0](https://help.vetrf.ru/wiki/MercuryG2B:GetVetDocumentList:v3.0)
- [ProcessIncomingConsignment v3.0](https://help.vetrf.ru/wiki/MercuryG2B:ProcessIncomingConsignment:v3.0)

---

Если этого недостаточно — официальная документация: https://help.vetrf.ru/wiki/Ветис.API
JSON: https://mcp-everything.ru/api/integrations/vetis-mercury. MCP: https://mcp-everything.ru/mcp
