Ветис.API — Меркурий (ФГИС ВетИС) 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 больше полученного, запроси следующую страницу.
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. Ошибка бизнес-правил придёт в результате заявки, а не в ответе на подачу — проверяй именно его.
<!-- Содержимое 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.
<!-- Содержимое 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

Авторизация

Тип: 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: записи складского журнала

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

Нюансы

Ошибки

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

Ограничения

Источники


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