Qut Pay Сайт Кабинет База знаний Инструкции Документация API ҚАЗРУС
ГлавнаяБаза знаний → Решение проблем

Ошибка «счёт не найден» — почему и что проверить

Обновлено: 2026-09-14 · Версия в Markdown

Коротко

invoice_not_found (HTTP 404) означает не «счёта нет», а «этому ключу такой счёт не виден». Обычно счёт на месте, но вы запрашиваете его другим ключом, в другом режиме или из другой организации. Порядок проверки: идентификатор → режим (qp_test_ / qp_live_) → привязка ключа к кассиру → организация.

Симптом → причина → решение

СимптомПричинаРешение
Только что созданный счёт не находитсяВзяли не поле id из ответаИспользуйте поле id из ответа POST /invoices
В кабинете счёт виден, через API — нетСчёт создан в песочнице, запрос идёт боевым ключомПриведите ключ в соответствие режиму
Вчера работало, сегодня 404Ключ заменили, новый привязан к другому кассируПосмотрите привязку ключа в кабинете
Один сервис счёт видит, другой нетУ сервисов разные ключи, один из них привязанДайте общий ключ или снимите привязку
Поиск по externalOrderId ничего не даётИскали как по idФильтруйте через список счетов

Порядок проверки

1. Верный ли идентификатор

Счёт запрашивается по полю id из ответа POST /api/v1/invoices. Частые путаницы:

Если нужно искать по номеру заказа, используйте список GET /api/v1/invoices. Подробнее: Metadata и номер заказа.

2. Совпадает ли режим

Песочница и боевой режим — два отдельных мира. Счёт, созданный ключом qp_test_…, ключу qp_live_… не виден вообще, и наоборот.

Самый частый сценарий: разработчик потестировал в песочнице, перешёл в боевой режим, а старые тестовые идентификаторы остались в коде или в тестах. Результат — чистый 404.

Проверка: посмотрите на префикс ключа, который сейчас используется. qp_test_ — песочница, qp_live_ — боевой режим. Разница описана здесь: Чем песочница отличается от боевого режима.

3. Привязан ли ключ к кассиру

Ключ можно привязать к конкретному кассиру. Боевые счета привязанного ключа идут только через этого кассира, и чужие счета такой ключ не видит — на запрос возвращается 404.

Это не ошибка, а задуманное поведение: чтобы две точки или два подразделения не видели счета друг друга.

Когда встречается:

Решение: выдайте отчётности отдельный непривязанный ключ либо дайте каждому сервису ключ своего кассира. Подробнее: Привязка API-ключа к кассиру.

4. Та ли организация

Если в аккаунте несколько организаций, у каждой свои ключи. Запрос чужого счёта вернёт 404 или forbidden — счёт существует, но он не ваш.

Проверка: посмотрите в кабинете, в какой организации создан ключ. Подробнее: Несколько организаций в одном аккаунте.

Диагностика за минуту

Запросите список тем же самым ключом:

GET /api/v1/invoices
X-API-Key: <тот же самый ключ>
РезультатВывод
Список пустойНе тот режим или ключ вообще из другой организации
Счета есть, но нужного нетКлюч привязан к другому кассиру либо идентификатор неверный
Нужный счёт в списке естьИдентификатор скопирован неправильно
Пришёл 401Проблема в ключе, а не в счёте: API отвечает 401

Чего делать не стоит

Вопросы и ответы

Мог ли счёт удалиться? Нет. Счета не удаляются, они меняют статус: cancelled, expired. Такой счёт по-прежнему открывается через GET.

В кабинете счёт вижу, API не находит. Как так? В кабинете вы видите всю организацию, а привязанный ключ — только счета своего кассира. Это самая частая причина.

Можно ли задавать идентификатор самому? Нет, id выдаём мы и изменить его нельзя. Для своего номера есть externalOrderId.

Подойдёт ли id из вебхука? Да, invoice.id в вебхуке — тот же самый идентификатор. Если по нему приходит 404, значит не совпадает режим или ключ.

Можно ли перенести счета из песочницы в боевой режим? Нет. Данные песочницы в боевой режим не переходят, это разные среды. После перехода вы создаёте новые счета.

Связанные статьи

Привязка API-ключа к кассируКогда в организации несколько проектов или точек, каждый ключ можно привязать к своему кассиру. Что видит привязанный ключ, чего не видит, почему нельзя удалить кассира и как настроить привязку в кабинете.Чем песочница отличается от боевого режимаВ песочнице Kaspi не вызывается вообще, реальных денег нет и кассир не нужен — оплату вы симулируете сами. Полное сравнение двух режимов и что проверить при переходе в боевой.API отвечает 403 — не хватает прав403 значит, что ключ распознан, но на это действие прав нет. Причин пять: не хватает scope, неактивный тариф, чужая организация, привязка ключа к кассиру, действие только для песочницы.API отвечает 401 — ключ не принимается401 unauthorized означает, что в запросе нет действующего API-ключа. Причины, порядок проверки и рабочий пример curl. Чаще всего виноват заголовок или префикс Bearer.Metadata и номер заказаЧем externalOrderId отличается от metadata, как оба поля возвращаются в вебхуке, что можно класть в metadata и что туда нельзя класть никогда — с конкретными примерами.

Остались вопросы? WhatsApp +77788813333 · kazprose@gmail.com
Написать можно и из кабинета: Поддержка.

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