> Источник: https://apipay.kz/kaspi-pay-1c · apipay.kz
> ApiPay — независимый сервис приёма платежей поверх вашего Kaspi Pay.

# Kaspi Pay в 1С: выставление счетов из 1С

**TL;DR.** Готового модуля Kaspi для 1С нет, типовая конфигурация сама счёт в Kaspi Pay не выставит. Связка работает так: документ 1С отправляет `POST /api/v1/invoices` к REST API ApiPay, покупатель получает счёт в приложении Kaspi и платит, а 1С узнаёт об оплате и проводит платёж. Основной путь узнать об оплате — опрос `GET /api/v1/invoices/{id}` регламентным заданием; вебхук `invoice.status_changed` — опция для 1С, опубликованной в интернет. Доработку конфигурации выполняет ваш 1С-специалист: это интеграция по API, а не плагин «в один клик».

## Почему 1С сама не принимает Kaspi Pay

1С — Бухгалтерия, УНФ, УТ, ERP — ведёт учёт продаж, но напрямую с Kaspi Pay не связана. Публичного платёжного API у Kaspi нет, готового модуля для 1С тоже нет. Поэтому нужен внешний мост между 1С и Kaspi Pay.

## Что даёт связка 1С + ApiPay

ApiPay — REST API поверх вашего собственного Kaspi Pay. Сервис работает от имени сотрудника со **штатной ролью «Кассир»** — того же, кто выставляет счета вручную. Разница в том, что счёт выставляет ваша программа, а не человек.

- **Счёт выставляется прямо из документа 1С** — по номеру телефона покупателя.
- **Оплата проводится автоматически** — 1С сама узнаёт статус, без переноса выписки руками.
- **Платёж связан с документом** полем `external_order_id`, которое вы задаёте при создании счёта.
- **Терминал не нужен.** Деньги идут напрямую на ваш Kaspi-счёт: доступа к ним у ApiPay нет.

Подходит оптовой торговле, рознице, услугам — любому бизнесу на 1С. ApiPay проводки не делает и учётные документы не формирует: это задача вашей конфигурации. Сервис приносит в 1С данные о платеже — какой счёт, на какую сумму, когда оплачен и к какому документу относится.

## Как это работает

1. **1С создаёт счёт.** Обработка или регламентное задание вызывает `POST /api/v1/invoices` с номером телефона покупателя, суммой и номером документа.
2. **Покупатель платит в приложении Kaspi** — получает push и оплачивает привычным способом.
3. **1С узнаёт об оплате.** Основной путь — опрос `GET /api/v1/invoices/{id}` регламентным заданием: у 1С чаще всего нет публичного адреса, она крутится в локальной сети или на терминальном сервере. У этого запроса отдельный поднятый лимит — 1000 запросов в минуту. Пачку неоплаченных счетов опрашивают одним `POST /api/v1/invoices/status/check`. Если 1С опубликована в интернет, тот же результат даёт вебхук `invoice.status_changed`.
4. **1С проводит платёж** — находит документ по `external_order_id` и при необходимости запускает отгрузку.

Реагировать нужно на **последний** пришедший статус, дубли отсекать дедупом по паре `(invoice.id, invoice.status)`.

## Что нужно для подключения

- **Аккаунт Kaspi Pay с сотрудником в роли «Кассир».** Кассир подключается в кабинете ApiPay: «Настройки» → «Авторизация Kaspi» → «Подключить». Мастер занимает 2–3 минуты и заканчивается вводом кода из SMS.
- **Отдельный номер телефона для кассира.** Пока номер привязан, входить под ним в приложение Kaspi Pay (для бизнеса) нельзя — привязка разорвётся. Личным приложением Kaspi на этом номере пользоваться можно.
- **Одобренная анкета «Расскажите о бизнесе».** Маршрут: регистрация → анкета → подключение кассира → боевые счета. До одобрения анкеты боевых счетов ноль; песочница доступна сразу после регистрации и отладку не задерживает.
- **API-ключ ApiPay.** Им авторизуются запросы из 1С. Серверный секрет: в браузерный код и в публичный репозиторий не помещается.
- **1С-специалист.** Он встроит вызовы API в конфигурацию через HTTP-сервисы или внешние обработки.

## Пример вызова API из 1С

```
POST https://api.apipay.kz/api/v1/invoices
X-API-Key: ваш_ключ
Content-Type: application/json

{
  "phone_number": "87001234567",
  "amount": 15000,
  "description": "Оплата заказа №123",
  "external_order_id": "1c-doc-000000123",
  "external_order_id_idempotency": "1c-doc-000000123"
}
```

Ответ `201` со `status: "processing"` — норма: счёт принят, до Kaspi ещё не доехал; итог придёт следующим статусом.

**Два поля-ссылки не путать.** `external_order_id` (≤255 символов) — ссылка на документ для матчинга оплаты, возвращается в счёте и в вебхуке. `external_order_id_idempotency` (≤191) — ключ идемпотентности проведения: 1С штатно повторяет HTTP-запрос при таймауте, а документ можно провести повторно, и без ключа так создастся второй счёт, а покупатель получит второй push. С ключом повтор отвечает `409 duplicate_idempotency_key` и возвращает `invoice_id` и `status` уже созданного счёта — это не ошибка, продолжайте по ним. Если прежний счёт истёк, отменён или ушёл в `error`, тот же ключ выпускает новый счёт: это перевыставление, а не дубль. Рецепт для 1С — класть номер документа в оба поля.

Пачку документов выставляют одним `POST /api/v1/invoices/bulk` — до 100 счетов, лимит 20 запросов в минуту; структурная ошибка в теле отклоняет весь батч целиком.

## Что попадает в 1С

Из объекта счёта (`GET /api/v1/invoices/{id}`) обработка берёт:

| Поле | Что в нём |
|---|---|
| `id` | Идентификатор счёта в ApiPay — по нему опрашивают статус |
| `external_order_id` | Ваша ссылка на документ 1С |
| `amount` | Сумма строкой: `"15000.00"` — парсить как строку, не как число |
| `status` | `processing`, `pending`, `cancelling`, `paid`, `cancelled`, `expired`, `error`, `partially_refunded` |
| `paid_at` | Момент оплаты, UTC `+00:00`; `null`, пока счёт не оплачен |
| `created_at` | Момент выставления счёта, UTC `+00:00` |
| `kaspi_invoice_id` | Идентификатор операции на стороне Kaspi |

Терминальны для 1С `paid`, `cancelled`, `expired`, `error`. У `error` счёт до Kaspi не дошёл: документ помечают неоплаченным и выставляют счёт заново. Статуса `refunded` нет — полный возврат оставляет `paid`.

Раз в сутки полезна сверка `GET /api/v1/invoices` за прошедшие сутки с `date_field=paid_at` и `origin=apipay`: она догоняет то, что не доехало вебхуком. Фильтр `origin` обязателен — иначе в выборку попадут продажи, проведённые в приложении Kaspi Pay мимо ApiPay: у них нет `external_order_id`, документа в 1С им не найти. Для «оплаченного» фильтр по статусам двойной: `status[]=paid&status[]=partially_refunded`.

Если в чек Kaspi нужны позиции (фискализация, Нацкаталог), номенклатура заранее заводится в каталог ApiPay и счёт создаётся корзиной `cart_items`. Ключ маппинга «номенклатура 1С ↔ товар каталога» — `external_ref` (код или GUID номенклатуры), не штрихкод и не имя.

## Ограничения

- **Готового плагина «в один клик» нет** — доработку конфигурации выполняет ваш 1С-специалист.
- **Сумма счёта — только целые тенге**, от 1 до 99 999 999. Сумма с копейками отбивается `422 amount_must_be_whole_tenge`, счёт не создан.
- **Описание счёта — до 60 символов**, длиннее отклоняется с `422 description_too_long`.
- **Счёт по номеру телефона живёт 24 часа.**
- **Часовые пояса.** Счета, возвраты и каталог — UTC `+00:00`; только `GET /tariff` и `GET /account/health` отдают `+05:00`. Частый баг 1С — сдвиг времени проведения.
- **Рабочий режим требует активной подписки:** без неё создание счёта отвечает `403 tariff_inactive`, ретрай бесполезен до продления.
- **`429` с `Retry-After`** — лимит исчерпан; повторять не раньше момента из `meta.reset_at`.

## Сколько стоит

ApiPay не берёт процент с оборота, только фиксированную месячную подписку:

| Тариф | Цена | Лимит |
|---|---|---|
| Старт | 10 000 ₸/мес | до 30 счетов в день |
| Бизнес | 25 000 ₸/мес | до 100 счетов в день |
| Про | 60 000 ₸/мес | до 300 счетов в день |
| Про Макс | 90 000 ₸/мес | до 600 счетов в день |

Больше 600 счетов в день — договорная цена, напишите в WhatsApp +7 700 307 65 12. При первом подключении кассира открываются 3 дня бесплатного доступа; песочница бесплатна всегда.

Kaspi удерживает свою обычную комиссию за приём платежа по вашим условиям Kaspi Pay — она не связана с ApiPay.

## Частые вопросы

**Есть ли готовый модуль Kaspi Pay для 1С?**
Нет. Приём Kaspi в 1С настраивается через REST API ApiPay, доработку конфигурации выполняет 1С-специалист. Это интеграция по API, а не плагин «в один клик».

**Как автоматически провести оплату Kaspi в 1С?**
Основной путь — опрос статуса: регламентное задание вызывает `GET /api/v1/invoices/{id}` (или пакетный `POST /api/v1/invoices/status/check`) и проводит платёж, когда статус стал `paid`. Если 1С опубликована в интернет, тот же результат даёт вебхук `invoice.status_changed`. Оплату с документом связывает `external_order_id`.

**Как загрузить оплаты Kaspi в 1С, если счета выставлялись не через API?**
Остаётся ручной путь: выгрузить операции за период в кабинете Kaspi Pay, загрузить файл в 1С тем механизмом, который предусмотрен в вашей конфигурации, и сопоставить строки с заказами. Разбор обоих путей — в статье «Как импортировать платежи Kaspi Pay в 1С». Вопросы про сроки зачисления, комиссию и реквизиты — в справке Kaspi для продавцов: https://guide.kaspi.kz/

**Какие конфигурации 1С поддерживаются?**
Любая, из которой можно сделать HTTP-запрос: Бухгалтерия, УНФ (Управление нашей фирмой), УТ (Управление торговлей), ERP.

**Почему счёт долго висит в `processing`?**
Штатно это длится секунды. Не пересоздавайте счёт, пока он в `processing`: получатся два живых счёта, и покупатель может оплатить оба.

## Куда дальше

- Выставление Kaspi-счетов из 1С: https://apipay.kz/guides/integraciya-apipay-s-1c.md
- Импорт платежей Kaspi Pay в 1С: https://apipay.kz/guides/import-platezhey-kaspi-pay-v-1c.md
- Каталог для 1С без дублей: https://apipay.kz/guides/katalog-dlya-integratorov-1c.md
- Массовая заливка каталога из 1С: https://apipay.kz/guides/massovaya-zagruzka-kataloga-iz-1c.md
- Подключение кассира Kaspi: https://apipay.kz/connect-cashier.md
- Анкета о бизнесе и лимит: https://apipay.kz/guides/anketa-o-biznese-i-limit.md
- Подключение Kaspi Pay к сайту и CRM: https://apipay.kz/kaspi-pay-integration.md
- Вебхуки и проверка подписи: https://apipay.kz/guides/nastroyka-webhookov-apipay.md
- Полная документация API: https://apipay.kz/apipay-api-docs.md
- Справочник кодов ошибок: https://apipay.kz/errors.md
- О сервисе: https://apipay.kz/index.md

---

ApiPay — независимый сервис и не аффилирован с АО «Kaspi Bank». Kaspi, Kaspi Pay и 1С — товарные знаки их правообладателей.
