OData / типовые веб-сервисы
- Десятки сущностей и неочевидные связи
- Долгий онбординг без 1С-разработчика
- XML или громоздкие схемы обмена
- Сложно отладить из Postman или curl
Готовый продукт: JSON и HTTP вместо OData — счета, акты, оплаты и поиск документов для B2B-платформ и интеграторов
Для кого
Молодым разработчикам не нужно неделями разбирать OData, метаданные и внутреннюю модель 1С. Достаточно знать HTTP и JSON — как в любом современном веб-сервисе.
/invoices, /acts, /tax-invoices, /counterpartiesБыстрый старт
Штатными средствами 1С в конфигурацию «Бухгалтерия предприятия 3.0» (3.0.190.22+, в т.ч. КОРП).
Базовый URL: /{публикация}/hs/bit_http_api/. Создайте пользователя с ролью bitHttpApi_ОсновнаяРоль.
JSON с seller_inn, payer_inn и массивом items — счёт создаётся в 1С.
Из PHP, Python, Node — обычный HTTP-клиент. Суммы передаются в копейках (целые числа).
curl -X POST "https://your-1c/hs/bit_http_api/invoices" \
-u api_user:password \
-H "Content-Type: application/json" \
-d '{
"seller_inn": "7799434926",
"payer_inn": "770987654321",
"items": [{"name": "Услуга", "price": 100000, "quantity": 1}]
}'
Возможности
CRUD, списки за период с фильтрами, статус оплаты, PDF, поле comment, поиск по комментарию, статус ЭДО.
CRUD, списки по дате и счёту, фильтр isUpd, признак is_upd, печать УПД, tax_invoice_id, статус ЭДО.
Список с фильтрами, создание по акту, перезаполнение, пометка удаления и PDF.
v0.5.1Поиск по ИНН, создание и обновление реквизитов — перед выставлением счетов из CRM или B2B-портала.
Примеры запросов →Для интеграторов
Типовые сценарии для backend-разработчика: найти партнёра по ИНН перед выставлением счёта, создать карточку из CRM или обновить реквизиты. JSON, Basic Auth, те же URL, что в Swagger.
Перед POST /invoices проверьте, есть ли партнёр в 1С. Если карточки нет — ответ 404,
создайте её через POST ниже.
Запрос
curl -X GET \
"https://your-1c/hs/bit_http_api/counterparties/771234567890" \
-u api_user:password
Ответ 200
{
"inn": "771234567890",
"kpp": "771301001",
"name": "ООО Ромашка",
"address": "г. Москва, ул. Ленина, 1",
"account_number": "40702810500000012345",
"bank_bik": "044525225",
"email": "example@mail.ru"
}
Обязательны inn и name; для юрлица — kpp.
После создания используйте payer_inn в счёте.
Запрос
curl -X POST \
"https://your-1c/hs/bit_http_api/counterparties" \
-u api_user:password \
-H "Content-Type: application/json" \
-d '{
"inn": "771234567890",
"kpp": "771301001",
"name": "ООО Ромашка",
"address": "г. Москва, ул. Ленина, 1",
"email": "example@mail.ru"
}'
Ответ 201
{
"inn": "771234567890",
"kpp": "771301001",
"name": "ООО Ромашка",
"address": "г. Москва, ул. Ленина, 1",
"account_number": null,
"bank_bik": null,
"email": "example@mail.ru"
}
Банковские реквизиты и контакты — без пересоздания карточки. ИНН в path не меняется.
Запрос
curl -X PUT \
"https://your-1c/hs/bit_http_api/counterparties/771234567890" \
-u api_user:password \
-H "Content-Type: application/json" \
-d '{
"name": "ООО Ромашка",
"account_number": "40702810500000012345",
"bank_bik": "044525225",
"email": "billing@romashka.ru"
}'
Ответ 200
{
"inn": "771234567890",
"kpp": "771301001",
"name": "ООО Ромашка",
"address": "г. Москва, ул. Ленина, 1",
"account_number": "40702810500000012345",
"bank_bik": "044525225",
"email": "billing@romashka.ru"
}
История продукта
У клиента была своя B2B-платформа, отдельно от 1С:Бухгалтерия. API стал мостом между ними — не «для интернет-магазина», а для связки учёта и портала
is_upd, статусы ЭДО, поиск по комментариюПрактика
Как связали B2B-платформу заказчика с 1С:Бухгалтерия и развили расширение для других компаний с похожей задачей.
Читать кейс →Зачем отдельный REST-слой, чем он отличается от штатного обмена и с чего начать.
Обзор REST API →Как обернуть сырой обмен 1С в операции для сайта, CRM и AI — на примере коммерческого предложения.
Читать →Минимальный curl, разбор JSON-ответа и импорт OpenAPI в Postman.
Создать счёт через API →От установки bit_http_api до первого POST и проверки в Swagger — без опыта 1С.
Поднятие стенда →Справочник
1С:Бухгалтерия предприятия 3.0 (3.0.190.22+, в т.ч. КОРП) · расширение bit_http_api · актуальная версия 0.5.1
GET /invoices, GET /acts, GET /tax-invoices при пустой выборке возвращают HTTP 200 и тело [], а не 404 «Документы не найдены». Код 404 по-прежнему означает «конкретный объект не найден» (по id / ИНН).
Пошаговый POST счёта с curl — в статье Создать счёт через REST API.
REST API для интеграции 1С:Бухгалтерия с внешними системами через HTTP-запросы. Расширение устанавливается штатными средствами 1С:Предприятие.
Рекомендуется отдельный пользователь с ролями: bitHttpApi_ОсновнаяРоль, базовые права БСП, добавление и изменение данных бухгалтерии, удалённый доступ (OData). Для PDF-печати отключите безопасный режим — требуется временный файл на сервере.
/{ваша_публикация}/hs/bit_http_api/{полный_номер}_{дата} — пример: 0000-000596_20161227{номер}_{дата}_{ИНН_продавца}_{ИНН_покупателя} — пример: 123_20161227_7799434926_2286004196ГГГГММДД (пример: 20260801). В ответах поле date — ГГГГ-ММ-ДД.facsimile=0 отключает подписи и печати (v0.1.2). Ответ печати — JSON { "pdf_base64": "..." }Content-Type: application/json
Authorization: Basic {base64_credentials}
| Метод | Путь | Параметры | Описание | Ответ |
|---|---|---|---|---|
| GET | /invoices |
dateBegin, dateEnd, sellerInn, payerInn, offset, limit, comment |
Список счетов (v0.4.0). Важно (v0.5.1): пустая выборка → 200 + [], не 404. limit по умолчанию 10, offset — 0 |
Массив счетов |
| POST | /invoices |
seller_inn, payer_inn, items[], comment |
Создание счёта | Полная схема счёта |
| GET | /invoices/{id} |
?comment=1 — поиск по фрагменту в path (v0.2.0) |
Получение или поиск счёта | Полная схема |
| PUT | /invoices/{id} |
Все поля счёта | Редактирование (нельзя при оплатах) | Обновлённый счёт |
| DELETE | /invoices/{id} |
— | Пометка удаления (нельзя при оплатах) | HTTP 204 |
| GET | /invoices/{id}/print |
?facsimile=0 |
PDF счёта | { "pdf_base64": "..." } |
УПД в 1С — это акт (реализация) с признаком УПД (is_upd), не отдельный документ. Отдельный ресурс /upd не используется. Счёт-фактуру к акту/УПД оформляйте отдельно: POST /tax-invoices с act_id.
| Метод | Путь | Параметры | Описание | Ответ |
|---|---|---|---|---|
| GET | /acts |
dateBegin, dateEnd, sellerInn, payerInn, offset, limit, invoiceId, isUpd |
Список актов. isUpd=true|false — только УПД / только обычные акты (v0.5.1). Важно: пустая выборка → 200 + []. limit по умолчанию 10, offset — 0 |
Массив актов |
| POST | /acts |
invoice_id, items[], is_upd |
Создание акта / УПД. СФ не создаётся автоматически | Созданный акт |
| GET | /acts/{id} |
— | Получение акта (tax_invoice_id, is_upd, поля ЭДО) |
Полная схема |
| PUT | /acts/{id} |
Поля акта; is_upd необязателен |
Редактирование (нельзя при оплатах). Без is_upd в теле текущий признак УПД сохраняется (v0.5.1) |
Обновлённый акт |
| DELETE | /acts/{id} |
— | Пометка удаления (нельзя при оплатах) | HTTP 204 |
| GET | /acts/{id}/print |
?facsimile=0 |
PDF акта; при is_upd: true — печатная форма УПД (v0.5.0) |
{ "pdf_base64": "..." } |
| Метод | Путь | Параметры | Описание | Ответ |
|---|---|---|---|---|
| GET | /tax-invoices |
dateBegin, dateEnd, sellerInn, payerInn, offset, limit, actId |
Список СФ (v0.5.0). Важно (v0.5.1): пустая выборка → 200 + [], не 404. limit по умолчанию 10, offset — 0 |
Массив СФ |
| POST | /tax-invoices |
act_id в JSON |
Создание СФ на основании акта (v0.3.0) | Сущность «Счёт-фактура» |
| GET | /tax-invoices/{id} |
id или реквизиты номер_дата_ИНН_ИНН |
Получение СФ | Полная схема |
| PUT | /tax-invoices/{id} |
тело необязательно | Перезаполнение СФ по акту-основанию (v0.5.0) | Обновлённая СФ |
| DELETE | /tax-invoices/{id} |
— | Пометка удаления (v0.5.0) | HTTP 204 |
| GET | /tax-invoices/{id}/print |
?facsimile=0 |
PDF счёта-фактуры | { "pdf_base64": "..." } |
| Метод | Путь | Обязательные | Ответ |
|---|---|---|---|
| POST | /counterparties |
inn, name; kpp для юрлица |
Контрагент |
| GET | /counterparties/{inn} |
— | Данные контрагента |
| PUT | /counterparties/{inn} |
— | Обновлённые данные |
В ответах счетов, актов и счетов-фактур. API не опрашивает оператора ЭДО: только чтение локального регистра состояний. Отсутствие интеграции с ЭДО не ломает остальные методы.
| Поле | Тип | Описание |
|---|---|---|
edo_status |
string | Код состояния ЭДО по объекту учёта; пустая строка, если записей нет / ЭДО недоступен |
edo_status_presentation |
string | Представление состояния; пустая строка при отсутствии данных |
Успешные ответы — JSON. Ошибки — текст (ограничение платформы 1С).
| Код | Пример | Условие |
|---|---|---|
| 400 | «Не указаны обязательные поля: seller_inn» | Валидация |
| 401 | «Требуется авторизация» | Auth |
| 403 | «Документ имеет оплаты…» | Бизнес-правило |
| 404 | «Контрагент с ИНН … не найден» / «Не найден документ id …» | Объект по id/ИНН не найден. Важно: пустой результат списка (GET /invoices|acts|tax-invoices) — это не 404, а 200 + [] (v0.5.1) |
| 405 | «HTTP-метод не поддерживается» | Неверный метод |
| 409 | «Контрагент уже существует» | Конфликт |
| 500 | текст исключения | Ошибка записи / печати |
Суммы — целые числа в копейках.
{
"id": "СЧ-2024-001_20240515",
"number": "СЧ-2024-001",
"date": "2024-05-15",
"seller_inn": "7799434926",
"payer": {
"inn": "771234567890",
"kpp": "771301001",
"name": "ООО Ромашка",
"address": "г. Москва, ул. Ленина, 1",
"phone": "",
"account_number": "40702810500000012345",
"bank_bik": "044525225",
"bank_name": "ПАО Банк",
"bank_correspondent_account": "30101810100000000111",
"director_name": "",
"email": "example@mail.ru"
},
"status": "Оплачен",
"comment": "идентификатор в B2B-платформе",
"items": [
{ "name": "Услуга", "description": "Услуга", "price": 100000, "quantity": 2, "total": 200000 }
],
"payments": [
{ "date": "2024-05-16", "amount": 200000, "payment_method": "…" }
],
"total_amount": 200000,
"paid_amount": 200000,
"deleted": false,
"edo_status": "",
"edo_status_presentation": ""
}
{
"id": "0000-000006_20260225",
"number": "0000-000006",
"date": "2026-02-25",
"seller_inn": "228601494276",
"payer": { "inn": "228601494276", "name": "ИП Антюхин Иван Иванович" },
"invoice_id": "СЧ-2024-001_20240515",
"tax_invoice_id": "0000-0000006_20260225",
"is_upd": false,
"items": [
{ "name": "Услуга", "description": "Услуга", "price": 109865, "quantity": 1, "total": 109865 }
],
"total_amount": 269865,
"deleted": false,
"paid_amount": 0,
"edo_status": "",
"edo_status_presentation": ""
}
tax_invoice_id — id счёта-фактуры, если оформлен; иначе отсутствует / пусто (v0.3.0). is_upd — признак УПД (ЭтоУниверсальныйДокумент) (v0.5.0). На PUT /acts/{id} без поля в теле признак не меняется (v0.5.1).
{
"id": "0000-0000006_20260225",
"number": "0000-0000006",
"date": "2026-02-25",
"seller_inn": "228601494276",
"payer": { "inn": "228601494276", "name": "ИП Антюхин Иван Иванович" },
"act_id": "0000-000006_20260225",
"total_amount": 269865,
"deleted": false,
"edo_status": "",
"edo_status_presentation": ""
}
{
"inn": "771234567890",
"kpp": "771301001",
"name": "ООО Ромашка",
"address": "г. Москва, ул. Ленина, 1",
"account_number": "40702810500000012345",
"bank_bik": "044525225",
"email": "example@mail.ru"
}
POST /{публикация}/hs/bit_http_api/invoices
Content-Type: application/json
Authorization: Basic ...
{
"seller_inn": "7799434926",
"payer_inn": "770987654321",
"comment": "order-8842",
"items": [{ "name": "Услуга", "price": 1000000, "quantity": 1 }]
}
Важно (v0.5.1): если по фильтрам ничего не найдено — ответ 200 с телом [], не 404.
GET /{публикация}/hs/bit_http_api/invoices?dateBegin=20260201&dateEnd=20260228&sellerInn=7799434926&offset=0&limit=10
Authorization: Basic ...
Важно (v0.5.1): пустая выборка → 200 + []. Фильтр УПД: ?isUpd=true.
GET /{публикация}/hs/bit_http_api/acts?invoiceId=СЧ-2024-001_20240515&limit=10
Authorization: Basic ...
GET /{публикация}/hs/bit_http_api/acts?dateBegin=20260801&dateEnd=20260818&isUpd=true&limit=10
Authorization: Basic ...
GET /{публикация}/hs/bit_http_api/invoices/order-8842?comment=1
Authorization: Basic ...
POST /{публикация}/hs/bit_http_api/acts
Content-Type: application/json
Authorization: Basic ...
{
"invoice_id": "0000-000039_20250727",
"is_upd": true,
"items": [
{
"name": "Технический осмотр транспортного средства",
"price": 500000,
"quantity": 1,
"total": 500000
}
]
}
Печать УПД:
GET /{публикация}/hs/bit_http_api/acts/{id}/print?facsimile=0
Authorization: Basic ...
POST /{публикация}/hs/bit_http_api/tax-invoices
Content-Type: application/json
Authorization: Basic ...
{ "act_id": "0000-000006_20260225" }
Важно (v0.5.1): пустая выборка списка → 200 + [], не 404.
GET /{публикация}/hs/bit_http_api/tax-invoices?dateBegin=20260801&dateEnd=20260804&offset=0&limit=50&actId=ТСББ-000135_20240325
Authorization: Basic ...
GET /{публикация}/hs/bit_http_api/tax-invoices/826_20251119_7805711112_7805077802
Authorization: Basic ...
PUT /{публикация}/hs/bit_http_api/tax-invoices/0ФБП-000002_20260107
Authorization: Basic ...
DELETE /{публикация}/hs/bit_http_api/tax-invoices/0ФБП-000002_20260107
Authorization: Basic ...
GET /{публикация}/hs/bit_http_api/invoices/СЧ-2024-001_20240515/print?facsimile=0
Authorization: Basic ...
GET /{публикация}/hs/bit_http_api/counterparties/771234567890
Authorization: Basic ...
POST /{публикация}/hs/bit_http_api/counterparties
Content-Type: application/json
Authorization: Basic ...
{
"inn": "771234567890",
"kpp": "771301001",
"name": "ООО Ромашка",
"address": "г. Москва, ул. Ленина, 1",
"email": "example@mail.ru"
}
PUT /{публикация}/hs/bit_http_api/counterparties/771234567890
Content-Type: application/json
Authorization: Basic ...
{
"name": "ООО Ромашка",
"account_number": "40702810500000012345",
"bank_bik": "044525225",
"email": "billing@romashka.ru"
}
PUT /acts/{id} без is_upd в теле сохраняет текущий признак УПДGET /acts?isUpd=true|false — фильтр списка по УПДGET /invoices, GET /acts, GET /tax-invoices при пустой выборке возвращают HTTP 200 и [] вместо 404 «Документы не найдены». 404 остаётся для «объект по id/ИНН не найден»GET /tax-invoices — список СФ: dateBegin, dateEnd, sellerInn, payerInn, offset, limit, actIdPUT /tax-invoices/{id} — перезаполнение СФ по акту-основаниюDELETE /tax-invoices/{id} — пометка удаления (204)is_upd; POST / PUT /acts принимают is_updis_upd: true — форма УПДedo_status, edo_status_presentationGET /invoices?dateBegin=&dateEnd=&sellerInn=&payerInn=&offset=&limit=&comment=GET /acts?dateBegin=&dateEnd=&sellerInn=&payerInn=&offset=&limit=&invoiceId=&isUpd=limit=10, offset=0GET /acts/{id}) поле tax_invoice_id — id счёта-фактуры или пустоPOST /tax-invoices — создание счёта-фактуры по act_idGET /tax-invoices/{id} — получение счёта-фактурыGET /tax-invoices/{id}/print — PDF счёта-фактуры/invoices/{фрагмент}?comment=1GET /counterparties/{inn}facsimile=0 для методов печати — без подписей и печатейcomment при создании счётаЛицензия расширения bit_http_api — 137 250 ₽. Внедрение CodeLab (если нужно) — 30 000 ₽ отдельно. Заявка в блоке Заказать — пришлём счёт.
Для установки расширения и публикации HTTP-сервиса — да, один раз. Дальше веб-разработчик работает только с REST и JSON.
CommerceML — пакетный обмен файлами. REST API — оперативные запросы: создать счёт сейчас, сразу получить PDF, проверить оплату.
Базовое расширение заточено под 1С:Бухгалтерия предприятия 3.0 (3.0.190.22+). Дополнительные документы, поля и интеграции — по ТЗ, команда CodeLab.
В вашей базе 1С. API — тонкий HTTP-слой, не дублирует учёт во внешней БД.
Пошагово с curl и разбором ответа — в статье Создать счёт через REST API. Схема полей — в документации.
УПД в 1С — это акт с признаком is_upd, не отдельный ресурс. POST /acts с is_upd: true; печать отдаёт форму УПД. Счёт-фактуру оформляйте отдельно: POST /tax-invoices с act_id. Фильтр списка: GET /acts?isUpd=true (v0.5.1). Подробности — в документации.
С версии 0.5.1 списки GET /invoices, GET /acts и GET /tax-invoices при пустой выборке возвращают HTTP 200 и []. Код 404 — только «объект по id/ИНН не найден». См. историю версий.
Скачать: bit_http_api-openapi.yaml. Полный справочник методов — HTTP-сервис bit_http_api.
Покупка
Лицензия расширения bit_http_api для 1С:Бухгалтерия 3.0 — 137 250 ₽. Внедрение на вашей базе (если нужно) — 30 000 ₽ отдельно. Оставьте заявку — пришлём счёт.
Лицензия продукта
Внедрение при необходимости — 30 000 ₽
Лицензия — 137 250 ₽. Внедрение при необходимости — 30 000 ₽. Заявка уходит в CodeLab.