API для внешних систем

Базовый URL: https://lovischet.ru
DEMO режим (dry-run):
Токен: lvs_demo_token
Демо-документ: DEMO
Публичная ссылка: https://share.lovischet.ru/invoice/DEMO
Портал (просмотр): https://lk.lovischet.ru/invoice/DEMO

Разделы

Авторизация и методы

  • x-api-key: <API ключ команды>
  • Authorization: Bearer <API ключ> - альтернативный способ.
  • ?api_key=<API ключ> - fallback для чтения и отладки.
  • x-tenant-id обычно не нужен для обычного team API key и используется в основном для legacy/fallback сценариев.
Если ключ деактивирован в справочнике, API вернет 401 с кодом api_key_inactive. Если передан demo token, API работает в dry-run режиме.
МетодНазначение
GET /api/v1/ref/catalogСправочники для подстановки.
GET /api/v1/invoicesСписок документов команды. Query: q, date_from, date_to, limit, offset.
GET /api/v1/invoices/{public_id}Карточка документа, статусы, validation, metadata и share links.
POST /api/v1/invoicesСоздать документ в режиме editor_mode=api. Поддерживает root object или поле invoice.
PUT /api/v1/invoices/{public_id}Только полный update через поле invoice. Partial update не поддерживается.

Типы данных

  • string текст, ИНН/БИК/реквизиты, email, комментарии
  • number суммы, проценты, количество
  • boolean флаги (public_share_enabled, show_payment_qr)
  • array товары, подписанты, получатели
  • object блоки seller, buyer, manager, buyer_contact

Коды ответов

200Успешно
207Документ сохранен, часть писем не отправлена
400Ошибка данных
401Проблема авторизации API (api_key_missing, api_key_invalid, api_key_inactive, api_key_over_tariff_limit)
403Проблема scope/продавца/тарифа (tenant_scope_not_resolved, seller_org_not_allowed)
404Документ не найден
409Конфликт public_id, GUID в PUT или ограничение отправки
413JSON payload слишком большой
429Rate limit по IP, ключу или команде
500Внутренняя ошибка

Ограничения API v1

  • Максимальный размер JSON payload: 5 МБ.
  • При превышении лимита API возвращает 413 payload_too_large.
  • Продавец по API должен совпадать с одной из активных организаций команды по ИНН.
  • Если организация продавца сверх лимита тарифа, API откажет.
  • Для PUT partial update не поддерживается: нужен полный объект документа в поле invoice.
  • Сервис применяет лимиты по тарифу и может отказать во внешнем шаринге или отправке писем.
  • В ответах share_gate показывает, доступна ли внешняя публикация сейчас, а notifications.blocked_by_service_gate - были ли письма остановлены сервисом.
  • Медиа через API не принимаются. Логотип, печать, факсимиле и другие изображения должны браться из данных организации и настроек сервиса.
  • Если указан buyer_edo_id, после сохранения запускается синхронизация входящих связей по ЭДО.

Rate limit и тарифные лимиты

  • Базовый IP limit по умолчанию: 10 rps.
  • Дополнительно действуют лимиты по API ключу и по команде: в секунду, минуту и сутки.
  • Профиль лимитов зависит от тарифа команды.
  • При срабатывании лимита API возвращает 429 и retry_after_sec.

1С: прямые ссылки + POST

1С часто использует GET с параметрами для чтения, и POST для создания/обновления.

GET https://lovischet.ru/api/v1/invoices/DEMO?api_key=lvs_demo_token
// 1С (BSL) - POST /api/v1/invoices
Перем БазаURL, Токен, Соединение, Запрос, ТелоJSON, Ответ;

БазаURL = "https://lovischet.ru";
Токен = "lvs_demo_token";

Соединение = Новый HTTPСоединение(СтрЗаменить(БазаURL, "https://", ""), 443,,,,,Истина);
Запрос = Новый HTTPЗапрос("/api/v1/invoices");
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.Заголовки.Вставить("x-api-key", Токен);

ТелоJSON =
"{" +
"  \"invoice\": {" +
"    \"number\": \"1C-DEMO-001\"," +
"    \"date\": \"2026-03-05\"," +
"    \"currency\": \"RUB\"," +
"    \"invoice_direction\": \"outgoing\"," +
"    \"buyer\": {\"name\": \"ООО Покупатель\"}," +
"    \"seller\": {\"name\": \"ООО Поставщик\", \"inn\": \"7700000000\"}," +
"    \"items\": [{\"name\": \"Услуга\",\"qty\": 1,\"price\": 1000}]" +
"  }," +
"  \"notify_recipients\": Ложь" +
"}";

Запрос.УстановитьТелоИзСтроки(ТелоJSON, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить(Ответ.ПолучитьТелоКакСтроку());

PHP пример

<?php
$baseUrl = 'https://lovischet.ru';
$apiKey = 'lvs_demo_token';

$payload = [
  'invoice' => [
    'number' => 'PHP-DEMO-001',
    'date' => '2026-03-05',
    'currency' => 'RUB',
    'invoice_direction' => 'outgoing',
    'buyer' => ['name' => 'ООО Покупатель', 'email' => 'buyer@example.com'],
    'seller' => ['name' => 'ООО Поставщик', 'inn' => '7700000000'],
    'items' => [
      ['name' => 'Услуга', 'qty' => 2, 'unit' => 'шт', 'price' => 1700, 'vat_pct' => 20]
    ],
    // медиа через API не передаются
    'show_payment_qr' => true
  ],
  'notify_recipients' => false,
];

$ch = curl_init($baseUrl . '/api/v1/invoices');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => [
    'Content-Type: application/json; charset=utf-8',
    'x-api-key: ' . $apiKey,
  ],
  CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
  CURLOPT_RETURNTRANSFER => true,
]);

$result = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "HTTP: $code\n";
echo $result;

Python пример

import requests

base_url = "https://lovischet.ru"
api_key = "lvs_demo_token"

headers = {
    "x-api-key": api_key,
    "Content-Type": "application/json; charset=utf-8",
}

payload = {
    "invoice": {
        "number": "PY-DEMO-001",
        "date": "2026-03-05",
        "currency": "RUB",
        "invoice_direction": "outgoing",
        "buyer": {"name": "ООО Покупатель", "email": "buyer@example.com"},
        "seller": {"name": "ООО Поставщик", "inn": "7700000000"},
        "items": [
            {"name": "Сервис", "qty": 10, "unit": "мес", "price": 1700, "vat_pct": 20}
        ],
        "show_payment_qr": True,
    },
    "notify_recipients": False,
}

r = requests.post(f"{base_url}/api/v1/invoices", headers=headers, json=payload, timeout=45)
print(r.status_code)
print(r.text)

d = requests.get(f"{base_url}/api/v1/invoices/DEMO", headers=headers, timeout=30)
print(d.status_code)
print(d.text)

cURL: полный пример с DEMO

curl -X POST "https://lovischet.ru/api/v1/invoices" \
  -H "Content-Type: application/json" \
  -H "x-api-key: lvs_demo_token" \
  -d '{
    "invoice": {
      "number": "DEMO-2026-API-001",
      "date": "2026-03-05",
      "currency": "RUB",
      "invoice_direction": "outgoing",
      "public_share_enabled": true,
      "information_system": "1С",
      "seller": {
        "name": "ООО Демо Поставщик",
        "inn": "7700000000",
        "bank_name": "ПАО Сбербанк",
        "bik": "044525225",
        "account": "40702810900000012345"
      },
      "buyer": {
        "name": "ООО Демо Покупатель",
        "inn": "7800000000",
        "email": "demo.buyer@lovischet.ru"
      },
      "items": [
        {"name":"Лицензия","qty":10,"unit":"мес","price":1700,"vat_pct":20}
      ],
      "api_recipients": [
        {"email":"director@example.com","name":"Иванов И.И.","position":"Директор"},
        {"email":"buh@example.com","name":"Петрова А.А.","position":"Бухгалтер"}
      ],
      "show_payment_qr": true
    },
    "notify_recipients": false
  }'