reply.by

REST API

API для управления контрагентами, документами и напоминаниями. Все запросы — JSON через HTTPS, авторизация по Bearer-токену из /app/api-keys. Доступ включён на тарифах Pro и Agency.

Базовый URL

https://reply.apps.newklient.com/api/v1

Аутентификация

В каждом запросе передавайте заголовок Authorization: Bearer rk_live_…. Токен получается в кабинете на странице /app/api-keys (только OWNER).

curl -H "Authorization: Bearer $REPLY_BY_TOKEN" https://reply.apps.newklient.com/api/v1/documents

Эндпоинты

Контрагенты

  • GET/counterpartiesсписок (q, limit, offset)
  • POST/counterpartiesсоздать (или upsert по UNP)
  • GET/counterparties/{id}один контрагент

Документы

  • GET/documentsсписок (status, counterparty_id, limit, offset)
  • POST/documentsсоздать + запланировать напоминания
  • GET/documents/{id}документ + напоминания
  • PATCH/documents/{id}сменить статус (RETURNED/CANCELED) или notes

Пример: создать контрагента и документ

1. Создаём (или находим по УНП) контрагента:

curl -X POST https://reply.apps.newklient.com/api/v1/counterparties \
  -H "Authorization: Bearer $REPLY_BY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ООО «Покупатель»",
    "unp": "100123456",
    "emails": ["buh@example.by"],
    "phones": ["+375291234567"]
  }'

2. Заводим документ:

curl -X POST https://reply.apps.newklient.com/api/v1/documents \
  -H "Authorization: Bearer $REPLY_BY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "counterparty_id": "uuid-from-step-1",
    "type": "ACT",
    "number": "А-2026/00001",
    "document_date": "2026-05-01",
    "sent_at": "2026-05-01T10:00:00Z",
    "amount_byn": 1250.00
  }'

После POST /documents reply.by автоматически запланирует напоминания контрагенту по email/SMS на 7-й, 15-й, 22-й и 30-й день (если задано правило по умолчанию).

Пример: интеграция с 1С 8.x

Минимальный модуль для отправки документа в reply.by при проведении акта. Добавьте в общий модуль или подписку на событие проведения. Если не хотите писать с нуля — готовый source-код для сборки .epf доступен бесплатно: программист 1С соберёт обработку за 10 минут.

Процедура ОтправитьДокументВReplyBy(ДокументАкт) Экспорт
    Соединение = Новый HTTPСоединение(
        "reply.apps.newklient.com",
        443,
        ,
        ,
        ,
        ,
        Новый ЗащищенноеСоединениеOpenSSL()
    );

    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Authorization", "Bearer " + Константы.ReplyByToken.Получить());
    Заголовки.Вставить("Content-Type", "application/json");

    // 1. upsert контрагента по УНП
    КонтрагентТело = Новый Структура;
    КонтрагентТело.Вставить("name", СокрЛП(ДокументАкт.Контрагент.Наименование));
    КонтрагентТело.Вставить("unp", СокрЛП(ДокументАкт.Контрагент.УНП));
    КонтрагентТело.Вставить("emails",
        Новый Массив(СокрЛП(ДокументАкт.Контрагент.Email)));

    Запрос1 = Новый HTTPЗапрос("/api/v1/counterparties", Заголовки);
    Запрос1.УстановитьТелоИзСтроки(
        ОбщегоНазначения.ЗначениеВJSON(КонтрагентТело),
        КодировкаТекста.UTF8
    );
    Ответ1 = Соединение.ОтправитьДляОбработки(Запрос1);
    Если Ответ1.КодСостояния >= 300 Тогда
        ВызватьИсключение "reply.by counterparty: " + Ответ1.ПолучитьТелоКакСтроку();
    КонецЕсли;
    КонтрагентId =
        ОбщегоНазначения.JSONВЗначение(Ответ1.ПолучитьТелоКакСтроку()).data.id;

    // 2. создаём документ
    ДокументТело = Новый Структура;
    ДокументТело.Вставить("counterparty_id", КонтрагентId);
    ДокументТело.Вставить("type", "ACT");
    ДокументТело.Вставить("number", СокрЛП(ДокументАкт.Номер));
    ДокументТело.Вставить("document_date",
        Формат(ДокументАкт.Дата, "ДФ=yyyy-MM-dd"));
    ДокументТело.Вставить("sent_at",
        Формат(ТекущаяДатаСеанса(), "ДФ=yyyy-MM-ddTHH:mm:ssZ"));
    ДокументТело.Вставить("amount_byn", ДокументАкт.СуммаДокумента);

    Запрос2 = Новый HTTPЗапрос("/api/v1/documents", Заголовки);
    Запрос2.УстановитьТелоИзСтроки(
        ОбщегоНазначения.ЗначениеВJSON(ДокументТело),
        КодировкаТекста.UTF8
    );
    Ответ2 = Соединение.ОтправитьДляОбработки(Запрос2);
    Если Ответ2.КодСостояния >= 300 Тогда
        ВызватьИсключение "reply.by document: " + Ответ2.ПолучитьТелоКакСтроку();
    КонецЕсли;
КонецПроцедуры

Token (Константы.ReplyByToken) сохраните как защищённый параметр в конфигурации 1С — НЕ записывайте напрямую в код.

Коды ошибок

  • 401 unauthorized / invalid_token — токен отсутствует или некорректен
  • 403 revoked — ключ отозван в админ-кабинете
  • 403 expired — у ключа истёк срок действия
  • 403 plan_does_not_include_api — тариф workspace не включает API
  • 403 read_only_key — попытка POST/PATCH read-only ключом
  • 400 invalid_input — невалидные поля (см. details)
  • 404 not_found — объект не найден в этом workspace

Версионирование

Префикс пути /api/v1. Несовместимые изменения выпускаются как /v2с минимум 6-месячным окном поддержки /v1. Новые поля в ответах могут добавляться без bump версии — клиенты должны игнорировать неизвестные ключи.