API Cert4U встраивает юридически значимое подписание документов прямо в вашу CRM, ERP, бухгалтерию или 1С. Все вызовы идут на один эндпоинт https://cert4u.ru/api.php?action=<ACTION> с авторизацией по ключу из личного кабинета. 21 метод (включая 3 метода вебхуков) покрывает полный цикл: загрузка документа, серверная подпись, отправка клиенту на УКЭП или ПЭП, проверка подписей и скачивание ZIP-архива с протоколом.
Cert4U — это не REST с путями вида /api/v1/.... Все запросы идут на единый файл, а нужный метод задаётся параметром action:
https://cert4u.ru/api.php?action=<ACTION>
Ключ выдаётся самостоятельно в личном кабинете: раздел Настройки → API-ключи → создать ключ. API доступен на тарифах Бизнес и Корпорат. На тарифе Старт API нет; на Тестовом — до 10 операций в день для ознакомления. Подробнее о применении для компаний — на странице электронная подпись для бизнеса.
Заголовок предпочтителен. Поддерживаются три варианта (любой):
# 1) Заголовок X-Api-Key (рекомендуется) X-Api-Key: ВАШ_КЛЮЧ # 2) Authorization: Bearer Authorization: Bearer ВАШ_КЛЮЧ # 3) Параметр запроса (legacy) https://cert4u.ru/api.php?action=api_1c_documents&api_key=ВАШ_КЛЮЧ
Каждый ключ видит только данные своего аккаунта — фильтр по владельцу применяется ко всем спискам документов, клиентов, вебхуков. Чужие документы по API недоступны.
429.429; тариф без API или закончились отправки — 402.Idempotency-Key на методах создания и отправки — см. идемпотентность.Кодировка — UTF-8, ответ — JSON:
# Успех { "success": true, ... } # Ошибка { "success": false, "message": "Описание ошибки" }
Три рабочих примера. Полные параметры каждого метода — в справочнике API (api-docs.html).
curl "https://cert4u.ru/api.php?action=api_1c_documents&limit=20" \ -H "X-Api-Key: ВАШ_КЛЮЧ" # Ответ: { "success": true, "documents": [ { "id": "d_001", "name": "Договор №14.pdf", "status": "new" } ] }
Подпишите файл УКЭП организации в 1С (МенеджерКриптографии), КриптоАРМ или cryptcp и загрузите вместе с .sig. Прикреплённая или открепленная — задаётся при подписании, см. как выбрать формат.
curl -X POST "https://cert4u.ru/api.php?action=api_1c_upload_signed" \ -H "X-Api-Key: ВАШ_КЛЮЧ" \ -F "document=@dogovor.pdf" \ -F "signature=@dogovor.pdf.sig" \ -F "doc_name=Договор №14" \ -F "description=Поставка" # Ответ: { "success": true, "document": { "id": "d_042", "status": "signed_admin", ... }, "crypto_verify": true, "sig_format": "attached" }
Подпись вашей организации не нужна (подписывает только контрагент)? Используйте api_1c_send_document — загрузка и отправка одним запросом.
Документ в статусе signed_admin отправляется клиенту — он получает ссылку и код ПЭП:
# Отправка клиенту (ПЭП по SMS) curl -X POST "https://cert4u.ru/api.php?action=api_1c_send" \ -H "X-Api-Key: ВАШ_КЛЮЧ" \ -d "doc_id=d_042" \ -d "client_id=c_007" \ -d "sign_type=pep_only" # Ответ: { "success": true, "document": { "id": "d_042", "status": "sent", ... }, "sign_url": "https://cert4u.ru/client.html?token=...", "pep_code": "483920", "sandbox": false }
Клиента можно не создавать заранее: вместо client_id передайте client_name + client_phone и/или client_email — получатель найдётся среди контактов вашего аккаунта или будет создан скрытый контакт.
Совет: чтобы протестировать шаги без реальной SMS и расхода лимитов, включите песочницу — код ПЭП тогда всегда 000000.
api_1c_send_document загружает файл и сразу отправляет его получателю на подпись (ПЭП или УКЭП — на выбор). Клиента заводить не нужно:
curl -X POST "https://cert4u.ru/api.php?action=api_1c_send_document" \ -H "X-Api-Key: ВАШ_КЛЮЧ" \ -H "Idempotency-Key: 1c-doc-000123" \ -F "document=@dogovor.pdf" \ -F "client_name=Петров Пётр Петрович" \ -F "client_phone=+79001234567" \ -F "sign_type=pep_only" # Ответ: { "success": true, "document_id": "d_043", "sign_url": "https://cert4u.ru/client.html?token=...", "sign_token": "...", "pep_code": "533441", "client": { "id": "c_015", "name": "Петров Пётр Петрович", ... }, "sandbox": false }
Базовый вызов для любого метода: https://cert4u.ru/api.php?action=<action>. Полные параметры, форматы ответов и примеры — в справочнике api-docs.html. Для готовой интеграции с учётной системой смотрите страницу интеграция 1С и подписание.
Ниже 18 методов работы с документами и клиентами; ещё 3 метода управляют вебхуками.
| action | HTTP | Параметры | Назначение |
|---|---|---|---|
api_1c_send_document | POST | document, client_name, client_phone | client_email, sign_type?, doc_name?, description?, company?, inn? | Отправка одним запросом: загрузить файл и сразу отправить получателю, без создания клиента. Ответ: document_id, sign_url, sign_token, pep_code, client. Multipart |
api_1c_documents | GET | limit?, offset? | Список документов аккаунта |
api_1c_document | GET | id | Один документ |
api_1c_upload | POST | document, doc_name?, description?, client_id? | Загрузить документ (status new), multipart |
api_1c_sign_admin | POST | doc_id | Отключён (HTTP 410): серверная подпись не является УКЭП — используйте api_1c_upload_signed |
api_1c_send | POST | doc_id, client_id ИЛИ inline client_name + client_phone | client_email, sign_type? (ukep_only|pep_only) | Отправить клиенту (нужен signed_admin). Получатель — по ID или напрямую (ФИО + телефон/почта, без создания клиента). Ответ: sign_url, pep_code |
api_1c_verify | GET | id | doc_id | Проверка подписей (КриптоПро, 63-ФЗ), sig_format, блок cosigned_signature при совместной подписи, download_zip_url |
api_1c_clients | GET | — | Список клиентов аккаунта |
api_1c_clients | POST | name, email | phone, company?, inn?, ogrn?, kpp?, address?, contact_person?, position? | Создать клиента. Если в аккаунте уже есть клиент с таким телефоном/email — вернёт его (existed: true). Ответ: client, existed |
api_1c_download_zip | GET | id | Скачать ZIP: документ, protocol.pdf и подписи — одна совместная Документ.pdf.sig либо отдельные _server.sig / _client.sig (_client.pep.txt для ПЭП) |
api_1c_pep_send | POST | client_id, и (doc_id ИЛИ document+doc_name) | Загрузить (или взять документ в статусе new) и отправить на ПЭП одним вызовом (SMS-код), multipart |
api_1c_pep_send_code | POST | doc_id, method? (sms|email|both) | Переотправить ПЭП-код |
api_1c_pep_status | GET | doc_id | id | Статус документа и клиента; пока статус sent — sign_url (ссылку можно получить повторно без новой SMS) |
api_1c_pep_bulk | POST | doc_id, client_ids (массив или через запятую) | Массовая ПЭП-рассылка одного документа многим |
api_1c_revoke | POST | doc_id, reason? | Отозвать документ → revoked |
api_1c_upload_container | POST | pin, container | container_base64 | Загрузить зашифрованный контейнер УКЭП (AES-256, PIN не хранится) |
api_1c_delete_container | POST | — | Удалить контейнер |
api_1c_upload_signed | POST | document, signature, doc_name, client_id?, cert_info? | Загрузить документ с вашей УКЭП (.sig CAdES-BES, открепленная или прикреплённая, DER или base64), multipart. Ответ: crypto_verify, sig_format, при ошибке crypto_error / content_mismatch |
api_1c_settings | GET | — | Формат УКЭП, выбранный в аккаунте: sig_attached (true/false), sig_format (attached|detached) |
Виды подписи: УКЭП (CAdES, КриптоПро) и ПЭП (одноразовый код по SMS/email). Подробности валидации и юридической значимости — в справочнике.
detached) — файл .sig содержит только подпись, документ лежит отдельно.attached) — документ находится внутри .sig.Документ.pdf.sig, в api_1c_verify — блок cosigned_signature.Формат выбирается в личном кабинете: Настройки → Формат подписи УКЭП (настройка вашего аккаунта). 1С узнаёт его через api_1c_settings, прежде чем сформировать подпись для api_1c_upload_signed. Проверка подписей принимает оба формата независимо от настройки. Подробнее — в справочнике.
Как сформировать нужный формат: в 1С — последний параметр НачатьПодписаниеДанныхCAdES(…, ТипПодписиCAdES.BES, Отсоединенная): Ложь → прикреплённая, Истина → открепленная; в cryptcp — без ключа -detached → прикреплённая, с ним → открепленная; в КриптоПро Browser plug-in — SignCades(oSigner, CADESCOM_CADES_BES, bDetached). Примеры — в справочнике.
new → signed_admin → sent → completed (обе стороны подписали)
↘ rejected (клиент отклонил)
↘ revoked (отозван через api_1c_revoke)| Статус | Что значит |
|---|---|
new | Документ загружен, ещё не подписан отправителем |
signed_admin | Загружен с УКЭП отправителя (api_1c_upload_signed), можно отправлять клиенту |
sent | Отправлен клиенту, ожидает его подписи |
completed | Подписали обе стороны — комплект готов |
rejected | Клиент отклонил подписание |
revoked | Документ отозван отправителем |
При ошибке возвращается {"success":false,"message":"..."} с соответствующим HTTP-кодом.
| HTTP | Когда |
|---|---|
200 | Успешно |
400 | Ошибка валидации: не хватает обязательного параметра или неверный формат |
401 | Ключ отсутствует или неверный (проверьте X-Api-Key / Bearer / api_key) |
402 | Тариф или лимит операций исчерпан (тариф без API или дневной лимит превышен) |
403 | Метод недоступен этому ключу |
404 | Документ/клиент/ресурс не найден (или принадлежит другому аккаунту) |
429 | Превышен rate limit (60/мин) или дневной лимит операций |
Тарифы и лимиты — на странице тарифов. Если получаете 402/403 — проверьте, что тариф включает API (Бизнес/Корпорат).
Вместо опроса статусов настройте вебхук — Cert4U сам отправит POST на ваш URL при изменении документа. Управление вебхуками — те же методы api.php?action=…, авторизация как у остальных методов, доступ только владельцу ключа.
| action | HTTP | Параметры | Назначение |
|---|---|---|---|
api_1c_webhook_set | POST | url (https), events? (массив или csv; по умолчанию — все) | Установить/обновить. Возвращает secret (генерится при первой установке) |
api_1c_webhook_get | GET | — | Текущая конфигурация (secret маскируется до last6) |
api_1c_webhook_delete | POST | — | Удалить вебхук |
| event | Когда | Источник |
|---|---|---|
document.sent | Документ отправлен клиенту | Встроенно в api_1c_send / api_1c_send_document / api_1c_pep_send / api_1c_pep_bulk (кроме песочницы) |
document.signed | Клиент подписал | Крон-вотчер |
document.completed | Подписали обе стороны | Крон-вотчер |
document.rejected | Клиент отклонил | Крон-вотчер |
document.revoked | Документ отозван | Встроенно в api_1c_revoke |
Серверные события (sent, revoked) отправляются сразу в момент вызова метода. События клиентского подписания (signed, completed, rejected) ловит крон-вотчер, сравнивающий статусы со снимком состояния и шлющий вебхуки на изменения.
POST на ваш url, тело JSON. Таймаут 10 секунд, доставка best-effort.
POST https://ваш-сервер/webhook Content-Type: application/json X-Cert4U-Event: document.signed X-Cert4U-Signature: sha256=<hex hmac_sha256(тело, secret)> { "event": "document.signed", "doc_id": "d_042", "status": "signed", "client_id": "c_007", "occurred_at": "2026-06-17T10:15:00Z", "document": { "id": "d_042", "name": "Договор №14", "status": "signed", "client_name": "Иванов И.И." } }
Проверка подлинности: заголовок X-Cert4U-Signature содержит sha256=<hex>, где hex — это HMAC-SHA256 от тела запроса с вашим secret. Всегда сверяйте подпись перед обработкой.
Песочница позволяет интегратору тестировать сценарии без реальной отправки SMS/email и без расхода денег и тарифных лимитов.
Любым из трёх способов:
sandbox=true на API-ключе;X-Cert4U-Sandbox: 1;sandbox=1.В методах api_1c_send, api_1c_send_document, api_1c_pep_send, api_1c_pep_bulk:
000000;sandbox:true, и в ответе возвращается "sandbox":true;document.sent не отправляется.На api_1c_pep_send_code (переотправка кода) песочница не распространяется — код отправляется реально.
curl -X POST "https://cert4u.ru/api.php?action=api_1c_pep_send" \ -H "X-Api-Key: ВАШ_КЛЮЧ" \ -H "X-Cert4U-Sandbox: 1" \ -F "client_id=c_007" \ -F "document=@dogovor.pdf" \ -F "doc_name=Тест" # Ответ: { "success": true, "sandbox": true, "pep_code": "000000" }
Чтобы обрыв связи и повтор запроса не создавали дубли документов и повторные платные SMS, передавайте заголовок Idempotency-Key: <уникальная строка> (или параметр idempotency_key). Поддерживают: api_1c_upload, api_1c_upload_signed, api_1c_send_document, api_1c_pep_send, api_1c_pep_bulk.
Повтор с тем же ключом в течение 24 часов возвращает ранее созданный документ и "idempotent": true (для api_1c_pep_bulk — "results": []) без новой отправки. Ключи действуют в пределах вашего аккаунта. Удобно использовать GUID документа 1С.
curl -X POST "https://cert4u.ru/api.php?action=api_1c_upload" \ -H "X-Api-Key: ВАШ_КЛЮЧ" \ -H "Idempotency-Key: 5f0c9a2e-1c-000123" \ -F "document=@dogovor.pdf" \ -F "doc_name=Договор №14"
Кодировка API — UTF-8. Кириллицу в query-параметрах необходимо URL-кодировать (urlencode). В 1С:Предприятие используйте встроенную функцию:
КодироватьСтроку(Значение, КодировкаURL.КодировкаURL)
Готовая обработка и пошаговая инструкция по подключению — на странице интеграция 1С и подписание. Параметры всех методов — в справочнике api-docs.html.
В личном кабинете: Настройки → API-ключи → создать ключ (self-serve). API доступен на тарифах Бизнес и Корпорат. На Старте API нет, на Тестовом — 10 операций в день.
Один эндпоинт: https://cert4u.ru/api.php?action=<ACTION>. Это не пути /api/v1/... — метод задаётся параметром action. Авторизация — X-Api-Key, либо Authorization: Bearer, либо api_key в query.
Кодировка UTF-8, query-параметры с кириллицей нужно урл-кодировать. В 1С — КодироватьСтроку(Значение, КодировкаURL.КодировкаURL).
Да — включите песочницу (sandbox=true на ключе, X-Cert4U-Sandbox: 1 или sandbox=1). SMS/email не уходят, код ПЭП всегда 000000, лимиты не списываются.
Нет. API мультиарендный: ключ видит только данные своего аккаунта — фильтр по владельцу применяется ко всем методам. Подробнее об использовании в компании — электронная подпись для бизнеса.