BitcofyDevelopers
RUENКабинет ↗
BITCOFY MERCHANT API

Приём платежей без догадок

Единое руководство по Merchant API: от первого инвойса до сверки выплат. Начните с готовой страницы оплаты, затем подключите уведомления и автоматизацию на своём сервере.

BASE URLhttps://pay.bitcofy.prov1

Первый платёж

  1. Создайте проект в кабинете. Если проект ожидает активации, завершите её до интеграции.
  2. В разделе «Интеграции» получите project_id, ключ API и секрет API. Храните секреты на сервере.
  3. Создайте инвойс запросом ниже. Сохраните invoice_id и связь с вашим order_id.
  4. Перенаправьте покупателя на invoice_url из ответа. Страница Bitcofy предложит доступные сети и активы.
  5. Примите подписанное уведомление или проверьте инвойс через API. Выдавайте товар по подтверждённому результату, а не по возврату покупателя на ваш сайт.
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/invoices' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
    "project_id": "YOUR_PROJECT_ID",
    "order_id": "order-1001",
    "amount": "49.90",
    "currency": "USD",
    "buy_type": "package",
    "success_url": "https://merchant.example/order/success",
    "cancel_url": "https://merchant.example/order/cancel"
  }'

amount — стоимость в USD или RUB, а не количество USDT. Покупатель отправляет криптовалюту в сумме выбранной платёжной опции. Не рассчитывайте её самостоятельно из рекламного курса: используйте amount_crypto, комиссию и срок фиксации из API.

Повтор создания с тем же project_id и order_id возвращает существующий инвойс. Новые поля такого повтора не обновляют старый инвойс. Для нового заказа нужен новый order_id.

Доступ и секреты

Базовый адрес: https://pay.bitcofy.pro. Пути справочника уже содержат /api/v1: не добавляйте его второй раз.

ОперацияЧто передатьНазначение
Публичная информацияБез ключаСети, курсы и возможности интеграции
Чтение данных проектаX-API-Key или Authorization: Bearer <project_api_key>Доступ только к своему проекту
Изменение данных проектаКлюч API и X-API-SecretСоздание инвойсов, настройки, выплаты
Подписанная выплата или решение по заявкеДоступ на запись и signature, nonce, timestampДополнительная подпись Ed25519
Вход в кабинетСессия пользователяНе является ключом Merchant API

Ключ API имеет префикс bpk_, секрет API — bps_, секрет подписи webhook — bwhsec_live_. Это разные значения. Приватный ключ Ed25519 остаётся у вас; в API регистрируется публичный ключ в Base64.

Заголовки HTTP не зависят от регистра. Названия полей JSON, сетей и активов используйте в точности как в ответах API. X-API-Secret не заменяет ключ API. Для POST/PUT с JSON передавайте Content-Type: application/json.

Жизненный цикл инвойса

Состояние инвойса, подтверждения перевода и доступный для вывода баланс — разные сущности. Отслеживайте их отдельно.

СтатусЧто означаетКак поступить
createdИнвойс создан, платёжное окно ещё не запущеноПоказать ссылку на оплату
waiting_paymentВыбрана платёжная опция и запущено окно оплатыОжидать перевод до срока сессии
pendingОбнаружен перевод, обработка не завершенаДождаться подтверждений и окончательного решения
paidОплата принятаОбработать заказ один раз
paid_overПринята оплата с переплатойУчесть фактически зачисленную сумму
partially_paid, wrong_amount, additional_paymentТребуется обработка неполной или отличающейся суммыСверить платежи и разрешение инвойса; не считать полной оплатой автоматически
late_paymentЗафиксирована поздняя оплатаПроверить платежи и результат зачисления по своей политике заказа
expired, cancelОкно истекло или инвойс отменёнНе выдавать заказ только на основании перехода по ссылке

Ориентируйтесь на required_confirmations в выбранной опции и confirmations/credited в платежах. Число подтверждений зависит от сети и конфигурации; не фиксируйте одно значение для всех сетей. Сам факт появления транзакции или её хеша не означает зачисление.

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

Готовая страница оплаты и доступные активы

Рекомендуемый путь — открыть invoice_url. Публичные методы by-hash обслуживают готовую страницу оплаты; это отдельный сценарий, а не замена защищённому Merchant API.

Для POST …/payment-session сначала откройте готовую страницу инвойса в том же браузере: сервер проверяет cookie доступа и ограничивает частоту запросов. Одного invoice_hash для запуска сессии недостаточно. Ответ 403 с просьбой открыть страницу означает отсутствие действующего доступа.

Список сетей /api/v1/public/networks описывает возможности платформы. Для конкретного инвойса используйте его payment_options: доступность зависит от настроек проекта и администратора и может измениться. Не предлагайте покупателю отключённую опцию из закешированного списка.

Адрес и сумма берутся из одной выбранной пары network + asset. Совпадающий символ токена в разных сетях не означает взаимозаменяемость. success_url и cancel_url управляют переходом браузера, а не подтверждают оплату.

Уведомления об операциях

Настройте HTTPS-адрес в кабинете или через POST /api/v1/projects/{project_id}/webhook/config. Отправьте тест через POST …/webhook/test. Состояние доставок доступно в GET …/webhook/events.

Сервер присылает JSON и заголовки X-Bitcofy-Event-Id, X-Bitcofy-Event-Type, X-Bitcofy-Timestamp, X-Bitcofy-Signature, X-Bitcofy-Retry-Count. Подпись — HMAC-SHA256 в hex, ключ — секрет webhook, сообщение — точная строка timestamp, точка и исходные байты тела. Не разбирайте и не сериализуйте JSON заново до проверки.

javascript
import { createHmac, timingSafeEqual } from 'node:crypto';

// rawBody: Buffer с исходным телом HTTP-запроса, до JSON.parse.
export function verifyWebhook(rawBody, timestamp, signature, secret) {
  if (!Buffer.isBuffer(rawBody) || typeof timestamp !== 'string' ||
      typeof signature !== 'string' || !/^[a-f0-9]{64}$/i.test(signature)) return false;
  const expected = createHmac('sha256', secret)
    .update(timestamp + '.', 'utf8').update(rawBody).digest();
  return timingSafeEqual(expected, Buffer.from(signature, 'hex'));
}
  1. Проверьте подпись, допустимую давность timestamp и принадлежность события вашему проекту. Окно давности задайте в своей интеграции с учётом часов серверов.
  2. Сохраните событие и дедуплицируйте по event_id атомарно с изменением заказа. Повторная доставка не должна повторно зачислять деньги или выдавать товар.
  3. Ответьте любым 2xx после надёжного сохранения. Длительную обработку выполняйте в очереди.
  4. Если события пришли не по порядку или состояние неоднозначно, запросите актуальный инвойс либо выплату через API.

На попытку доставки отводится 5 секунд. При ошибке выполняется до 10 попыток всего: интервалы 15, 30, 60, 120, 240 секунд, далее не более 300 секунд между попытками; фактический запуск зависит от очереди. После исчерпания попыток событие помечается недоставленным окончательно. Не полагайтесь на уведомления как на единственный способ сверки.

Основные события: invoice.created, invoice.status_changed, payout.created, payout.processing, payout.status_changed, payout.rejected, webhook.test. Для выплат возможны дополнительные события переходов; используйте event_type и текущий объект, а не порядок доставки.

Выплаты и заявки

Выберите подходящий сценарий: прямая подписанная выплата через POST /api/v1/payouts или заявка POST /api/v1/projects/{project_id}/payout-requests с отдельным подтверждением/отклонением.

До отправки проверьте /balances, сеть, актив и адрес. Общий учётный баланс и available_for_withdrawal могут различаться: часть средств ещё ожидает сбора. Значения комиссии и доступности берите из ответов API, а не задавайте константами.

Для прямой выплаты amount включает комиссию: сумма получателю определяется после её вычета. Сверяйте gross_amount, fee_amount и net_amount в результате. Нельзя считать HTTP 200 доказательством завершённой отправки в сеть: выплата обрабатывается асинхронно.

СостояниеЗначение
requestedЗаявка ожидает решения
approved, rejectedРешение по заявке; подтверждение ещё не означает завершение выплаты
pending / provider_status=processingВыплата обрабатывается
success / provider_status=completedУспешное завершение
send_error / provider_status=failedОшибка отправки; сверить актуальный результат и возврат резерва

Сохраняйте request_id, payout_id, idempotency_key, tx_hash и итоговые флаги ответа. Для единой сверки используйте GET …/payouts/reconcile, передав ровно один из request_id, payout_id или idempotency_key.

Подпись Ed25519

Создайте пару ключей на своём сервере и зарегистрируйте публичный ключ через POST …/security/payout-key. Подпись кодируется в Base64. Ключ и секрет API всё равно обязательны.

Сообщение прямой выплаты — UTF-8, поля соединяются \n, без перевода строки в конце:

text
bitcofy-payout-v1
{project_id}
{network}
{asset}
{amount}
{destination_address}
{idempotency_key}
{nonce}
{timestamp_utc}

Для подтверждения или отклонения заявки используется другое сообщение. В строке action передайте approve или reject. При подтверждении строка причины остаётся пустой:

text
bitcofy-payout-approval-v1
{project_id}
{request_id}
{action}
{rejection_reason_or_empty}
{nonce}
{timestamp_utc}

timestamp должен отличаться от текущего времени сервера не более чем на 5 минут. Сервер нормализует его в UTC через Python isoformat(): например, 2026-09-29T12:00:00+00:00. Чтобы избежать различий Z/+00:00 и дробных секунд, отправляйте и подписывайте UTC-время без долей секунды с суффиксом +00:00. Для каждого нового подписанного действия генерируйте уникальный nonce.

Передавайте денежное amount строкой десятичного числа без экспоненты и подписывайте ту же строку. Не используйте числа с плавающей точкой. Пример сообщения, возвращённый сервером, показывает формат, но не заменяет сообщение вашей конкретной операции.

Примеры ниже подписывают уже собранное каноническое сообщение. private_key генератора API — 32-байтовый seed в Base64. Это не 64-байтовый расширенный ключ TweetNaCl/Go: преобразуйте seed, как показано ниже.

Node.js

javascript
import { createPrivateKey, sign } from 'node:crypto';

// message: canonical UTF-8 message shown above, no trailing newline.
export function signMessage(seedBase64, message) {
  const seed = Buffer.from(seedBase64, 'base64');
  if (seed.length !== 32) throw new Error('Expected a 32-byte Ed25519 seed');
  const pkcs8 = Buffer.concat([
    Buffer.from('302e020100300506032b657004220420', 'hex'), seed
  ]);
  const key = createPrivateKey({ key: pkcs8, format: 'der', type: 'pkcs8' });
  return sign(null, Buffer.from(message, 'utf8'), key).toString('base64');
}

Python

python
# Dependency: cryptography
import base64
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey

def sign_message(seed_base64: str, message: str) -> str:
    seed = base64.b64decode(seed_base64, validate=True)
    key = Ed25519PrivateKey.from_private_bytes(seed)  # 32-byte seed
    return base64.b64encode(key.sign(message.encode('utf-8'))).decode('ascii')

Go

go
package payouts

import (
    "crypto/ed25519"
    "encoding/base64"
    "fmt"
)

func SignMessage(seedBase64 string, message string) (string, error) {
    seed, err := base64.StdEncoding.DecodeString(seedBase64)
    if err != nil || len(seed) != ed25519.SeedSize {
        return "", fmt.Errorf("expected a Base64 32-byte Ed25519 seed")
    }
    key := ed25519.NewKeyFromSeed(seed)
    signature := ed25519.Sign(key, []byte(message))
    return base64.StdEncoding.EncodeToString(signature), nil
}

Повторы, таймауты и сверка

СитуацияПравильное действие
Таймаут создания инвойсаНайти по order_id или повторить создание с тем же order_id
Таймаут выплатыСначала запросить результат по тому же idempotency_key либо через reconcile
Выплата найденаПродолжать наблюдать её состояние; не создавать новую
Новая подписанная попытка после сверкиСохранить ключ логической операции, обновить timestamp и nonce, заново подписать
400, 401, 403, 422Исправить параметры, доступ или подпись; слепой повтор не поможет
409 при выплатеРазобрать структурированную причину, доступный баланс и резерв
429 или временная недоступностьУвеличивать задержку с разбросом; учитывать Retry-After, если он присутствует

Не меняйте idempotency_key только потому, что ответ потерялся: это может создать вторую выплату. Для проверки состояния используйте чтение и webhook, а не частые повторные POST. При сетевой ошибке результат записи может быть неизвестен.

Перед запуском

  1. Проверьте привязку ключа к проекту, активацию проекта и доступные активы.
  2. Пройдите успешную оплату, неполную сумму, истечение срока и позднюю оплату.
  3. Проверьте подпись webhook на исходном теле, повтор события и неупорядоченную доставку.
  4. Убедитесь, что возврат браузера не выдаёт заказ без подтверждения API.
  5. Проверьте потерянный ответ создания, восстановление по идентификатору и защиту от повторной выплаты.
  6. Для выплат проверьте комиссию, доступный баланс, Ed25519, timestamp и nonce.
  7. Логируйте идентификаторы и ответы об ошибках, но не ключи API, секреты и приватные ключи.

Документация для агентов

Достаточно передать агенту эту страницу: руководство и справочник уже присутствуют в HTML и не требуют JavaScript или входа.

  • Markdown на русском — руководство, параметры, ответы и ошибки всех публичных методов.
  • English Markdown — тот же контракт на английском.
  • llms.txt — короткий индекс материалов.
  • llms-full.txt — полная английская документация одним текстовым файлом.
  • OpenAPI JSON — актуальная публичная схема приложения.

Начните с сценария интеграции, затем уточните поля и ответы конкретного метода. Примеры с YOUR_PROJECT_ID и демонстрационными значениями нужно заменить; они не являются рабочими реквизитами. Сети, комиссии и требуемые подтверждения получайте из API.

Каждый запрос — по полочкам

Выберите метод. Параметры, успешный ответ и ошибки раскрываются отдельно. Примеры показывают формат; замените идентификаторы и подпишите реальные данные перед отправкой.

Справочники

GET

Доступность сервиса

/api/v1/health
Без ключа API
Параметры и пример запроса

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/health'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
appstringОбязательноApp
json
{
  "status": "ok",
  "app": "string"
}
Ошибки и действия

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
json
{
  "detail": "Error description"
}
GET

Курсы валют

/api/v1/public/rates
Без ключа API
Параметры и пример запроса

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/public/rates'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
ratesarray<object>ОбязательноRates
rates[].base_currencystringОбязательноBase Currency
rates[].quote_currencystringОбязательноQuote Currency
rates[].ratestringОбязательноRate шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
rates[].sourcestringОбязательноSource
rates[].captured_atstringОбязательноCaptured At формат: date-time
json
{
  "rates": [
    {
      "base_currency": "USD",
      "quote_currency": "USD",
      "rate": "string",
      "source": "api",
      "captured_at": "2026-07-13T12:00:00Z"
    }
  ]
}
Ошибки и действия

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
json
{
  "detail": "Error description"
}
GET

Сети и активы

/api/v1/public/networks
Без ключа API
  • Это реестр сетей. Доступность оплаты конкретного инвойса определяйте по его payment_options.
Параметры и пример запроса

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/public/networks'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

json
[
  {
    "example_key": "string"
  }
]
Ошибки и действия

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
json
{
  "detail": "Error description"
}
GET

Готовые интеграции

/api/v1/public/integrations
Без ключа API
Параметры и пример запроса

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/public/integrations'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
[].slugstringОбязательноSlug
[].display_namestringОбязательноDisplay Name
[].categorystringОбязательноCategory
[].descriptionstringОбязательноDescription
[].supports_webhooksbooleanОбязательноSupports Webhooks
[].supports_embedded_checkoutbooleanОбязательноSupports Embedded Checkout
[].docs_markdownstringОбязательноDocs Markdown
json
[
  {
    "slug": "string",
    "display_name": "string",
    "category": "string",
    "description": "string",
    "supports_webhooks": false,
    "supports_embedded_checkout": false,
    "docs_markdown": "string"
  }
]
Ошибки и действия

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
json
{
  "detail": "Error description"
}

Инвойсы и оплата

POST

Создать инвойс

/api/v1/invoices
X-API-Key + X-API-Secret
  • USD или RUB; buy_type: package или balance. Повтор project_id + order_id возвращает существующий инвойс без обновления.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

JSON body

ПолеТипНаличиеЗначение и ограничения
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
order_idstringОбязательноВаш идентификатор заказа. Повтор в том же проекте возвращает прежний инвойс.
amountnumber / stringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. >: 0; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
currencystringОбязательноUSD или RUB; валюта стоимости заказа, не криптоактив.
buy_typestringНеобязательноpackage — оплата заказа; balance — пополнение с учётом фактической подтверждённой суммы после комиссии. по умолчанию: "package"; мин. длина: 1; макс. длина: 32
callback_urlstring / nullНеобязательноПоле совместимости инвойса; не настраивает webhook проекта. Используйте /webhook/config.
success_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата после оплаты. Возврат не подтверждает зачисление.
cancel_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата при отмене.
customer_idstring / nullНеобязательноНеобязательный идентификатор покупателя в вашей системе.
customer_emailstring / nullНеобязательноНеобязательный корректный email покупателя. формат: email
metadataobjectНеобязательноПроизвольный JSON-объект вашего заказа. Системные поля billing_invoice_kind зарезервированы.
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/invoices' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "project_id": "project_demo_001",
  "order_id": "order_1001",
  "amount": "100.00",
  "currency": "USD",
  "buy_type": "package",
  "callback_url": "https://merchant.example/api/bitcofy/webhook",
  "success_url": "https://merchant.example/payment/success",
  "cancel_url": "https://merchant.example/payment/cancel",
  "customer_id": "customer_42",
  "customer_email": "buyer@example.com",
  "metadata": {
    "order_ref": "SO-1001",
    "source": "landing",
    "plan": "pro"
  }
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
invoice_idstringОбязательноИдентификатор инвойса из ответа создания.
invoice_hashstringОбязательноПубличный идентификатор из ссылки оплаты. Не публикуйте ссылки чужих заказов.
invoice_urlstringОбязательноГотовая ссылка страницы оплаты для покупателя.
requested_usd_amountstringОбязательноRequested Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
service_fee_usd_amountstring / nullНеобязательноService Fee Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
total_payable_usd_amountstring / nullНеобязательноTotal Payable Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
expires_atstringОбязательноExpires At формат: date-time
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
buy_typestringОбязательноpackage — оплата заказа; balance — пополнение с учётом фактической подтверждённой суммы после комиссии.
invoice_languagestringОбязательноInvoice Language
resolved_languagestringОбязательноResolved Language
success_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата после оплаты. Возврат не подтверждает зачисление.
cancel_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата при отмене.
payment_session_started_atstring / nullНеобязательноPayment Session Started At формат: date-time
payment_session_expires_atstring / nullНеобязательноPayment Session Expires At формат: date-time
payment_session_activebooleanНеобязательноPayment Session Active по умолчанию: false
selected_networkstring / nullНеобязательноSelected Network
selected_assetstring / nullНеобязательноSelected Asset
payment_optionsarray<object>ОбязательноPayment Options
payment_options[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
payment_options[].assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
payment_options[].option_keystringОбязательноOption Key
payment_options[].fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_locked_untilstringОбязательноRate Locked Until формат: date-time
payment_options[].required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
payment_options[].network_logo_urlstring / nullНеобязательноNetwork Logo Url
payment_options[].asset_logo_urlstring / nullНеобязательноAsset Logo Url
tracked_payment_optionobject / nullНеобязательноtracked payment option
tracked_payment_option.networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
tracked_payment_option.assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
tracked_payment_option.option_keystringОбязательноOption Key
tracked_payment_option.fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_locked_untilstringОбязательноRate Locked Until формат: date-time
tracked_payment_option.required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
tracked_payment_option.network_logo_urlstring / nullНеобязательноNetwork Logo Url
tracked_payment_option.asset_logo_urlstring / nullНеобязательноAsset Logo Url
json
{
  "invoice_id": "inv_demo_001",
  "invoice_hash": "dd8659b3058a",
  "invoice_url": "string",
  "requested_usd_amount": "string",
  "service_fee_usd_amount": "string",
  "total_payable_usd_amount": "string",
  "expires_at": "2026-07-13T12:00:00Z",
  "status": "ok",
  "buy_type": "package",
  "invoice_language": "auto",
  "resolved_language": "auto",
  "success_url": "https://merchant.example/payment/success",
  "cancel_url": "https://merchant.example/payment/cancel",
  "payment_session_started_at": "2026-07-13T12:00:00Z",
  "payment_session_expires_at": "2026-07-13T12:00:00Z",
  "payment_session_active": false,
  "selected_network": "Tron",
  "selected_asset": "USDT",
  "payment_options": [
    {
      "network": "Tron",
      "asset": "USDT",
      "option_key": "string",
      "fee_percent": "0",
      "fee_usd_amount": "0",
      "total_payable_usd_amount": "0",
      "amount_crypto": "string",
      "rate_value": "string",
      "rate_locked_until": "2026-07-13T12:00:00Z",
      "required_confirmations": 1,
      "network_logo_url": "Tron",
      "asset_logo_url": "USDT"
    }
  ],
  "tracked_payment_option": {
    "network": "Tron",
    "asset": "USDT",
    "option_key": "string",
    "fee_percent": "0",
    "fee_usd_amount": "0",
    "total_payable_usd_amount": "0",
    "amount_crypto": "string",
    "rate_value": "string",
    "rate_locked_until": "2026-07-13T12:00:00Z",
    "required_confirmations": 1,
    "network_logo_url": "Tron",
    "asset_logo_url": "USDT"
  }
}
Ошибки и действия400 · 401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Invoice not found after creation
json
{
  "detail": "Error description"
}
GET

Получить инвойс

/api/v1/invoices/{invoice_id}
X-API-Key
  • Обнаруженная транзакция ещё не равна зачислению. Проверяйте статус, confirmations, required_confirmations и credited там, где они присутствуют в ответе.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
invoice_idpath · stringОбязательноИдентификатор инвойса из ответа создания.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/invoices/YOUR_INVOICE_ID' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
invoice_idstringОбязательноИдентификатор инвойса из ответа создания.
invoice_hashstringОбязательноПубличный идентификатор из ссылки оплаты. Не публикуйте ссылки чужих заказов.
invoice_urlstringОбязательноГотовая ссылка страницы оплаты для покупателя.
requested_usd_amountstringОбязательноRequested Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
service_fee_usd_amountstring / nullНеобязательноService Fee Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
total_payable_usd_amountstring / nullНеобязательноTotal Payable Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
expires_atstringОбязательноExpires At формат: date-time
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
buy_typestringОбязательноpackage — оплата заказа; balance — пополнение с учётом фактической подтверждённой суммы после комиссии.
invoice_languagestringОбязательноInvoice Language
resolved_languagestringОбязательноResolved Language
success_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата после оплаты. Возврат не подтверждает зачисление.
cancel_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата при отмене.
payment_session_started_atstring / nullНеобязательноPayment Session Started At формат: date-time
payment_session_expires_atstring / nullНеобязательноPayment Session Expires At формат: date-time
payment_session_activebooleanНеобязательноPayment Session Active по умолчанию: false
selected_networkstring / nullНеобязательноSelected Network
selected_assetstring / nullНеобязательноSelected Asset
payment_optionsarray<object>ОбязательноPayment Options
payment_options[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
payment_options[].assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
payment_options[].option_keystringОбязательноOption Key
payment_options[].fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_locked_untilstringОбязательноRate Locked Until формат: date-time
payment_options[].required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
payment_options[].network_logo_urlstring / nullНеобязательноNetwork Logo Url
payment_options[].asset_logo_urlstring / nullНеобязательноAsset Logo Url
tracked_payment_optionobject / nullНеобязательноtracked payment option
tracked_payment_option.networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
tracked_payment_option.assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
tracked_payment_option.option_keystringОбязательноOption Key
tracked_payment_option.fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_locked_untilstringОбязательноRate Locked Until формат: date-time
tracked_payment_option.required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
tracked_payment_option.network_logo_urlstring / nullНеобязательноNetwork Logo Url
tracked_payment_option.asset_logo_urlstring / nullНеобязательноAsset Logo Url
order_idstringОбязательноВаш идентификатор заказа. Повтор в том же проекте возвращает прежний инвойс.
fiat_currencystringОбязательноFiat Currency
amount_fiatstringОбязательноAmount Fiat шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
deposit_addressesarray<object>ОбязательноDeposit Addresses
deposit_addresses[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
deposit_addresses[].addressstringОбязательноAddress
deposit_addresses[].derivation_pathstringОбязательноDerivation Path
deposit_addresses[].wallet_statusstringОбязательноWallet Status
json
{
  "invoice_id": "inv_demo_001",
  "invoice_hash": "dd8659b3058a",
  "invoice_url": "string",
  "requested_usd_amount": "string",
  "service_fee_usd_amount": "string",
  "total_payable_usd_amount": "string",
  "expires_at": "2026-07-13T12:00:00Z",
  "status": "ok",
  "buy_type": "package",
  "invoice_language": "auto",
  "resolved_language": "auto",
  "success_url": "https://merchant.example/payment/success",
  "cancel_url": "https://merchant.example/payment/cancel",
  "payment_session_started_at": "2026-07-13T12:00:00Z",
  "payment_session_expires_at": "2026-07-13T12:00:00Z",
  "payment_session_active": false,
  "selected_network": "Tron",
  "selected_asset": "USDT",
  "payment_options": [
    {
      "network": "Tron",
      "asset": "USDT",
      "option_key": "string",
      "fee_percent": "0",
      "fee_usd_amount": "0",
      "total_payable_usd_amount": "0",
      "amount_crypto": "string",
      "rate_value": "string",
      "rate_locked_until": "2026-07-13T12:00:00Z",
      "required_confirmations": 1,
      "network_logo_url": "Tron",
      "asset_logo_url": "USDT"
    }
  ],
  "tracked_payment_option": {
    "network": "Tron",
    "asset": "USDT",
    "option_key": "string",
    "fee_percent": "0",
    "fee_usd_amount": "0",
    "total_payable_usd_amount": "0",
    "amount_crypto": "string",
    "rate_value": "string",
    "rate_locked_until": "2026-07-13T12:00:00Z",
    "required_confirmations": 1,
    "network_logo_url": "Tron",
    "asset_logo_url": "USDT"
  },
  "order_id": "order_1001",
  "fiat_currency": "USD",
  "amount_fiat": "string",
  "deposit_addresses": [
    {
      "network": "Tron",
      "address": "TQ9ExampleDestinationAddress123456789",
      "derivation_path": "string",
      "wallet_status": "string"
    }
  ]
}
Ошибки и действия401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Invoice not found
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

Платежи инвойса

/api/v1/invoices/{invoice_id}/payments
X-API-Key
  • Обнаруженная транзакция ещё не равна зачислению. Проверяйте статус, confirmations, required_confirmations и credited там, где они присутствуют в ответе.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
invoice_idpath · stringОбязательноИдентификатор инвойса из ответа создания.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/invoices/YOUR_INVOICE_ID/payments' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
invoice_idstringОбязательноИдентификатор инвойса из ответа создания.
invoice_statusstringОбязательноInvoice Status
buy_typestringОбязательноpackage — оплата заказа; balance — пополнение с учётом фактической подтверждённой суммы после комиссии.
credited_total_amountstringНеобязательноCredited Total Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
credited_fee_totalstringНеобязательноCredited Fee Total по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
itemsarray<object>ОбязательноItems
items[].transaction_idstringОбязательноTransaction Id
items[].invoice_idstringОбязательноИдентификатор инвойса из ответа создания.
items[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
items[].assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
items[].tx_hashstringОбязательноTx Hash
items[].logical_indexstringОбязательноLogical Index
items[].addressstringОбязательноAddress
items[].amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
items[].confirmationsintegerОбязательноТекущее количество подтверждений обнаруженной транзакции.
items[].block_numberinteger / nullНеобязательноBlock Number
items[].statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
items[].buy_typestringОбязательноpackage — оплата заказа; balance — пополнение с учётом фактической подтверждённой суммы после комиссии.
items[].crediting_statusstringОбязательноCrediting Status
items[].net_amount_after_feestringНеобязательноNet Amount After Fee по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
items[].fee_amountstringНеобязательноFee Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
items[].detected_atstringОбязательноDetected At формат: date-time
items[].confirmed_atstring / nullНеобязательноConfirmed At формат: date-time
json
{
  "invoice_id": "inv_demo_001",
  "invoice_status": "string",
  "buy_type": "package",
  "credited_total_amount": "0",
  "credited_fee_total": "0",
  "items": [
    {
      "transaction_id": "string",
      "invoice_id": "inv_demo_001",
      "network": "Tron",
      "asset": "USDT",
      "tx_hash": "0xabc123def456",
      "logical_index": "string",
      "address": "TQ9ExampleDestinationAddress123456789",
      "amount": "string",
      "confirmations": 1,
      "block_number": 1,
      "status": "ok",
      "buy_type": "package",
      "crediting_status": "string",
      "net_amount_after_fee": "0",
      "fee_amount": "0",
      "detected_at": "2026-07-13T12:00:00Z",
      "confirmed_at": "2026-07-13T12:00:00Z"
    }
  ]
}
Ошибки и действия401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Invoice not found
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

Открыть инвойс по публичному идентификатору

/api/v1/public/invoices/by-hash/{invoice_hash}
Без ключа API
  • Обнаруженная транзакция ещё не равна зачислению. Проверяйте статус, confirmations, required_confirmations и credited там, где они присутствуют в ответе.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
invoice_hashpath · stringОбязательноПубличный идентификатор из ссылки оплаты. Не публикуйте ссылки чужих заказов.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/public/invoices/by-hash/YOUR_INVOICE_HASH'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
invoice_idstringОбязательноИдентификатор инвойса из ответа создания.
invoice_hashstringОбязательноПубличный идентификатор из ссылки оплаты. Не публикуйте ссылки чужих заказов.
invoice_urlstringОбязательноГотовая ссылка страницы оплаты для покупателя.
requested_usd_amountstringОбязательноRequested Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
service_fee_usd_amountstring / nullНеобязательноService Fee Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
total_payable_usd_amountstring / nullНеобязательноTotal Payable Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
expires_atstringОбязательноExpires At формат: date-time
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
buy_typestringОбязательноpackage — оплата заказа; balance — пополнение с учётом фактической подтверждённой суммы после комиссии.
invoice_languagestringОбязательноInvoice Language
resolved_languagestringОбязательноResolved Language
success_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата после оплаты. Возврат не подтверждает зачисление.
cancel_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата при отмене.
payment_session_started_atstring / nullНеобязательноPayment Session Started At формат: date-time
payment_session_expires_atstring / nullНеобязательноPayment Session Expires At формат: date-time
payment_session_activebooleanНеобязательноPayment Session Active по умолчанию: false
selected_networkstring / nullНеобязательноSelected Network
selected_assetstring / nullНеобязательноSelected Asset
payment_optionsarray<object>ОбязательноPayment Options
payment_options[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
payment_options[].assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
payment_options[].option_keystringОбязательноOption Key
payment_options[].fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_locked_untilstringОбязательноRate Locked Until формат: date-time
payment_options[].required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
payment_options[].network_logo_urlstring / nullНеобязательноNetwork Logo Url
payment_options[].asset_logo_urlstring / nullНеобязательноAsset Logo Url
tracked_payment_optionobject / nullНеобязательноtracked payment option
tracked_payment_option.networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
tracked_payment_option.assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
tracked_payment_option.option_keystringОбязательноOption Key
tracked_payment_option.fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_locked_untilstringОбязательноRate Locked Until формат: date-time
tracked_payment_option.required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
tracked_payment_option.network_logo_urlstring / nullНеобязательноNetwork Logo Url
tracked_payment_option.asset_logo_urlstring / nullНеобязательноAsset Logo Url
deposit_addressesarray<object>ОбязательноDeposit Addresses
deposit_addresses[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
deposit_addresses[].addressstringОбязательноAddress
json
{
  "invoice_id": "inv_demo_001",
  "invoice_hash": "dd8659b3058a",
  "invoice_url": "string",
  "requested_usd_amount": "string",
  "service_fee_usd_amount": "string",
  "total_payable_usd_amount": "string",
  "expires_at": "2026-07-13T12:00:00Z",
  "status": "ok",
  "buy_type": "package",
  "invoice_language": "auto",
  "resolved_language": "auto",
  "success_url": "https://merchant.example/payment/success",
  "cancel_url": "https://merchant.example/payment/cancel",
  "payment_session_started_at": "2026-07-13T12:00:00Z",
  "payment_session_expires_at": "2026-07-13T12:00:00Z",
  "payment_session_active": false,
  "selected_network": "Tron",
  "selected_asset": "USDT",
  "payment_options": [
    {
      "network": "Tron",
      "asset": "USDT",
      "option_key": "string",
      "fee_percent": "0",
      "fee_usd_amount": "0",
      "total_payable_usd_amount": "0",
      "amount_crypto": "string",
      "rate_value": "string",
      "rate_locked_until": "2026-07-13T12:00:00Z",
      "required_confirmations": 1,
      "network_logo_url": "Tron",
      "asset_logo_url": "USDT"
    }
  ],
  "tracked_payment_option": {
    "network": "Tron",
    "asset": "USDT",
    "option_key": "string",
    "fee_percent": "0",
    "fee_usd_amount": "0",
    "total_payable_usd_amount": "0",
    "amount_crypto": "string",
    "rate_value": "string",
    "rate_locked_until": "2026-07-13T12:00:00Z",
    "required_confirmations": 1,
    "network_logo_url": "Tron",
    "asset_logo_url": "USDT"
  },
  "deposit_addresses": [
    {
      "network": "Tron",
      "address": "TQ9ExampleDestinationAddress123456789"
    }
  ]
}
Ошибки и действия404 · 422 · 429

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
429Слишком много запросовУвеличьте интервал с небольшой случайной задержкой; учитывайте Retry-After, если он есть.

Возможные пояснения detail

  • Too many public invoice requests
  • Invoice not found
json
{
  "detail": "Error description"
}
POST

Открыть сессию оплаты

/api/v1/public/invoices/by-hash/{invoice_hash}/payment-session
Cookie страницы оплаты
  • Сначала откройте /payment_{invoice_hash} для получения cookie доступа. Обычно этот метод вызывает готовая страница оплаты.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
invoice_hashpath · stringОбязательноПубличный идентификатор из ссылки оплаты. Не публикуйте ссылки чужих заказов.

JSON body

ПолеТипНаличиеЗначение и ограничения
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса. мин. длина: 1; макс. длина: 32
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте. мин. длина: 1; макс. длина: 32
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/public/invoices/by-hash/YOUR_INVOICE_HASH/payment-session' \
  --cookie checkout-cookies.txt \
  --header 'Content-Type: application/json' \
  --data '{
  "network": "Ethereum",
  "asset": "USDT"
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
invoice_idstringОбязательноИдентификатор инвойса из ответа создания.
invoice_hashstringОбязательноПубличный идентификатор из ссылки оплаты. Не публикуйте ссылки чужих заказов.
invoice_urlstringОбязательноГотовая ссылка страницы оплаты для покупателя.
requested_usd_amountstringОбязательноRequested Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
service_fee_usd_amountstring / nullНеобязательноService Fee Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
total_payable_usd_amountstring / nullНеобязательноTotal Payable Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
expires_atstringОбязательноExpires At формат: date-time
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
buy_typestringОбязательноpackage — оплата заказа; balance — пополнение с учётом фактической подтверждённой суммы после комиссии.
invoice_languagestringОбязательноInvoice Language
resolved_languagestringОбязательноResolved Language
success_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата после оплаты. Возврат не подтверждает зачисление.
cancel_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата при отмене.
payment_session_started_atstring / nullНеобязательноPayment Session Started At формат: date-time
payment_session_expires_atstring / nullНеобязательноPayment Session Expires At формат: date-time
payment_session_activebooleanНеобязательноPayment Session Active по умолчанию: false
selected_networkstring / nullНеобязательноSelected Network
selected_assetstring / nullНеобязательноSelected Asset
payment_optionsarray<object>ОбязательноPayment Options
payment_options[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
payment_options[].assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
payment_options[].option_keystringОбязательноOption Key
payment_options[].fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_locked_untilstringОбязательноRate Locked Until формат: date-time
payment_options[].required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
payment_options[].network_logo_urlstring / nullНеобязательноNetwork Logo Url
payment_options[].asset_logo_urlstring / nullНеобязательноAsset Logo Url
tracked_payment_optionobject / nullНеобязательноtracked payment option
tracked_payment_option.networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
tracked_payment_option.assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
tracked_payment_option.option_keystringОбязательноOption Key
tracked_payment_option.fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_locked_untilstringОбязательноRate Locked Until формат: date-time
tracked_payment_option.required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
tracked_payment_option.network_logo_urlstring / nullНеобязательноNetwork Logo Url
tracked_payment_option.asset_logo_urlstring / nullНеобязательноAsset Logo Url
deposit_addressesarray<object>ОбязательноDeposit Addresses
deposit_addresses[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
deposit_addresses[].addressstringОбязательноAddress
json
{
  "invoice_id": "inv_demo_001",
  "invoice_hash": "dd8659b3058a",
  "invoice_url": "string",
  "requested_usd_amount": "string",
  "service_fee_usd_amount": "string",
  "total_payable_usd_amount": "string",
  "expires_at": "2026-07-13T12:00:00Z",
  "status": "ok",
  "buy_type": "package",
  "invoice_language": "auto",
  "resolved_language": "auto",
  "success_url": "https://merchant.example/payment/success",
  "cancel_url": "https://merchant.example/payment/cancel",
  "payment_session_started_at": "2026-07-13T12:00:00Z",
  "payment_session_expires_at": "2026-07-13T12:00:00Z",
  "payment_session_active": false,
  "selected_network": "Tron",
  "selected_asset": "USDT",
  "payment_options": [
    {
      "network": "Tron",
      "asset": "USDT",
      "option_key": "string",
      "fee_percent": "0",
      "fee_usd_amount": "0",
      "total_payable_usd_amount": "0",
      "amount_crypto": "string",
      "rate_value": "string",
      "rate_locked_until": "2026-07-13T12:00:00Z",
      "required_confirmations": 1,
      "network_logo_url": "Tron",
      "asset_logo_url": "USDT"
    }
  ],
  "tracked_payment_option": {
    "network": "Tron",
    "asset": "USDT",
    "option_key": "string",
    "fee_percent": "0",
    "fee_usd_amount": "0",
    "total_payable_usd_amount": "0",
    "amount_crypto": "string",
    "rate_value": "string",
    "rate_locked_until": "2026-07-13T12:00:00Z",
    "required_confirmations": 1,
    "network_logo_url": "Tron",
    "asset_logo_url": "USDT"
  },
  "deposit_addresses": [
    {
      "network": "Tron",
      "address": "TQ9ExampleDestinationAddress123456789"
    }
  ]
}
Ошибки и действия400 · 403 · 404 · 422 · 429

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
429Слишком много запросовУвеличьте интервал с небольшой случайной задержкой; учитывайте Retry-After, если он есть.

Возможные пояснения detail

  • Too many public invoice requests
  • Open the hosted invoice page before starting a payment session
  • Invoice not found
json
{
  "detail": "Error description"
}
GET

Платежи по публичному идентификатору

/api/v1/public/invoices/by-hash/{invoice_hash}/payments
Без ключа API
  • Обнаруженная транзакция ещё не равна зачислению. Проверяйте статус, confirmations, required_confirmations и credited там, где они присутствуют в ответе.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
invoice_hashpath · stringОбязательноПубличный идентификатор из ссылки оплаты. Не публикуйте ссылки чужих заказов.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/public/invoices/by-hash/YOUR_INVOICE_HASH/payments'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
invoice_idstringОбязательноИдентификатор инвойса из ответа создания.
invoice_statusstringОбязательноInvoice Status
itemsarray<object>ОбязательноItems
items[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
items[].assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
items[].confirmationsintegerОбязательноТекущее количество подтверждений обнаруженной транзакции.
items[].statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
json
{
  "invoice_id": "inv_demo_001",
  "invoice_status": "string",
  "items": [
    {
      "network": "Tron",
      "asset": "USDT",
      "confirmations": 1,
      "status": "ok"
    }
  ]
}
Ошибки и действия404 · 422 · 429

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
429Слишком много запросовУвеличьте интервал с небольшой случайной задержкой; учитывайте Retry-After, если он есть.

Возможные пояснения detail

  • Too many public invoice requests
  • Invoice not found
json
{
  "detail": "Error description"
}
GET

Найти инвойс по заказу

/api/v1/projects/{project_id}/invoices/by-order/{order_id}
X-API-Key
  • Обнаруженная транзакция ещё не равна зачислению. Проверяйте статус, confirmations, required_confirmations и credited там, где они присутствуют в ответе.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
order_idpath · stringОбязательноВаш идентификатор заказа. Повтор в том же проекте возвращает прежний инвойс.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/invoices/by-order/YOUR_ORDER_ID' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
invoice_idstringОбязательноИдентификатор инвойса из ответа создания.
invoice_hashstringОбязательноПубличный идентификатор из ссылки оплаты. Не публикуйте ссылки чужих заказов.
invoice_urlstringОбязательноГотовая ссылка страницы оплаты для покупателя.
requested_usd_amountstringОбязательноRequested Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
service_fee_usd_amountstring / nullНеобязательноService Fee Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
total_payable_usd_amountstring / nullНеобязательноTotal Payable Usd Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
expires_atstringОбязательноExpires At формат: date-time
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
buy_typestringОбязательноpackage — оплата заказа; balance — пополнение с учётом фактической подтверждённой суммы после комиссии.
invoice_languagestringОбязательноInvoice Language
resolved_languagestringОбязательноResolved Language
success_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата после оплаты. Возврат не подтверждает зачисление.
cancel_urlstring / nullНеобязательноАбсолютный HTTP(S) URL возврата при отмене.
payment_session_started_atstring / nullНеобязательноPayment Session Started At формат: date-time
payment_session_expires_atstring / nullНеобязательноPayment Session Expires At формат: date-time
payment_session_activebooleanНеобязательноPayment Session Active по умолчанию: false
selected_networkstring / nullНеобязательноSelected Network
selected_assetstring / nullНеобязательноSelected Asset
payment_optionsarray<object>ОбязательноPayment Options
payment_options[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
payment_options[].assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
payment_options[].option_keystringОбязательноOption Key
payment_options[].fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payment_options[].rate_locked_untilstringОбязательноRate Locked Until формат: date-time
payment_options[].required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
payment_options[].network_logo_urlstring / nullНеобязательноNetwork Logo Url
payment_options[].asset_logo_urlstring / nullНеобязательноAsset Logo Url
tracked_payment_optionobject / nullНеобязательноtracked payment option
tracked_payment_option.networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
tracked_payment_option.assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
tracked_payment_option.option_keystringОбязательноOption Key
tracked_payment_option.fee_percentstringНеобязательноFee Percent по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.fee_usd_amountstringНеобязательноFee Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.total_payable_usd_amountstringНеобязательноTotal Payable Usd Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.amount_cryptostringОбязательноКоличество криптоактива для выбранного маршрута оплаты. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_valuestringОбязательноRate Value шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
tracked_payment_option.rate_locked_untilstringОбязательноRate Locked Until формат: date-time
tracked_payment_option.required_confirmationsintegerОбязательноПорог подтверждений для этой сети; не фиксируйте число в интеграции.
tracked_payment_option.network_logo_urlstring / nullНеобязательноNetwork Logo Url
tracked_payment_option.asset_logo_urlstring / nullНеобязательноAsset Logo Url
order_idstringОбязательноВаш идентификатор заказа. Повтор в том же проекте возвращает прежний инвойс.
fiat_currencystringОбязательноFiat Currency
amount_fiatstringОбязательноAmount Fiat шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
deposit_addressesarray<object>ОбязательноDeposit Addresses
deposit_addresses[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
deposit_addresses[].addressstringОбязательноAddress
deposit_addresses[].derivation_pathstringОбязательноDerivation Path
deposit_addresses[].wallet_statusstringОбязательноWallet Status
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
json
{
  "invoice_id": "inv_demo_001",
  "invoice_hash": "dd8659b3058a",
  "invoice_url": "string",
  "requested_usd_amount": "string",
  "service_fee_usd_amount": "string",
  "total_payable_usd_amount": "string",
  "expires_at": "2026-07-13T12:00:00Z",
  "status": "ok",
  "buy_type": "package",
  "invoice_language": "auto",
  "resolved_language": "auto",
  "success_url": "https://merchant.example/payment/success",
  "cancel_url": "https://merchant.example/payment/cancel",
  "payment_session_started_at": "2026-07-13T12:00:00Z",
  "payment_session_expires_at": "2026-07-13T12:00:00Z",
  "payment_session_active": false,
  "selected_network": "Tron",
  "selected_asset": "USDT",
  "payment_options": [
    {
      "network": "Tron",
      "asset": "USDT",
      "option_key": "string",
      "fee_percent": "0",
      "fee_usd_amount": "0",
      "total_payable_usd_amount": "0",
      "amount_crypto": "string",
      "rate_value": "string",
      "rate_locked_until": "2026-07-13T12:00:00Z",
      "required_confirmations": 1,
      "network_logo_url": "Tron",
      "asset_logo_url": "USDT"
    }
  ],
  "tracked_payment_option": {
    "network": "Tron",
    "asset": "USDT",
    "option_key": "string",
    "fee_percent": "0",
    "fee_usd_amount": "0",
    "total_payable_usd_amount": "0",
    "amount_crypto": "string",
    "rate_value": "string",
    "rate_locked_until": "2026-07-13T12:00:00Z",
    "required_confirmations": 1,
    "network_logo_url": "Tron",
    "asset_logo_url": "USDT"
  },
  "order_id": "order_1001",
  "fiat_currency": "USD",
  "amount_fiat": "string",
  "deposit_addresses": [
    {
      "network": "Tron",
      "address": "TQ9ExampleDestinationAddress123456789",
      "derivation_path": "string",
      "wallet_status": "string"
    }
  ],
  "project_id": "project_demo_001"
}
Ошибки и действия401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Invoice not found
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

QR-код инвойса

/api/v1/invoices/{invoice_id}/qr
X-API-Key
  • Обнаруженная транзакция ещё не равна зачислению. Проверяйте статус, confirmations, required_confirmations и credited там, где они присутствуют в ответе.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
invoice_idpath · stringОбязательноИдентификатор инвойса из ответа создания.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/invoices/YOUR_INVOICE_ID/qr' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · image/svg+xml

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

xml
<svg xmlns="http://www.w3.org/2000/svg">…</svg>
Ошибки и действия401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Invoice not found
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

QR-код выбранного способа оплаты

/api/v1/public/invoices/by-hash/{invoice_hash}/payment-qr
Без ключа API
  • Обнаруженная транзакция ещё не равна зачислению. Проверяйте статус, confirmations, required_confirmations и credited там, где они присутствуют в ответе.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
invoice_hashpath · stringОбязательноПубличный идентификатор из ссылки оплаты. Не публикуйте ссылки чужих заказов.
networkquery · stringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetquery · stringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/public/invoices/by-hash/YOUR_INVOICE_HASH/payment-qr?network=tron&asset=USDT'
Успешный ответ

200 · image/svg+xml

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

xml
<svg xmlns="http://www.w3.org/2000/svg">…</svg>
Ошибки и действия404 · 422 · 429

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
429Слишком много запросовУвеличьте интервал с небольшой случайной задержкой; учитывайте Retry-After, если он есть.

Возможные пояснения detail

  • Too many public invoice requests
  • Invoice not found
  • Payment option not found
json
{
  "detail": "Error description"
}

Проект и ключи

GET

Ключи API проекта

/api/v1/projects/{project_id}/api-keys
X-API-Key
  • При выпуске ключ и секрет возвращаются один раз. В списке доступны префиксы и состояние.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/api-keys' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
[].key_idstringОбязательноИдентификатор ключа из списка ключей проекта.
[].project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
[].namestringОбязательноНазвание ключа для удобного различения в списке.
[].key_prefixstringОбязательноKey Prefix
[].secret_prefixstring / nullНеобязательноSecret Prefix
[].api_keystring / nullНеобязательноКлюч доступа к API проекта; при выпуске сохраните сразу.
[].api_secretstring / nullНеобязательноСекрет для запросов записи; возвращается при выпуске, храните на сервере.
[].is_activebooleanОбязательноIs Active
[].last_used_atstring / nullНеобязательноLast Used At формат: date-time
[].created_atstringОбязательноCreated At формат: date-time
json
[
  {
    "key_id": "string",
    "project_id": "project_demo_001",
    "name": "string",
    "key_prefix": "string",
    "secret_prefix": "secret_123456",
    "api_key": "string",
    "api_secret": "secret_123456",
    "is_active": false,
    "last_used_at": "2026-07-13T12:00:00Z",
    "created_at": "2026-07-13T12:00:00Z"
  }
]
Ошибки и действия401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project API key is required
json
{
  "detail": "Error description"
}
POST

Выпустить ключ API

/api/v1/projects/{project_id}/api-keys
X-API-Key + X-API-Secret
  • При выпуске ключ и секрет возвращаются один раз. В списке доступны префиксы и состояние.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

JSON body

ПолеТипНаличиеЗначение и ограничения
namestringОбязательноНазвание ключа для удобного различения в списке. мин. длина: 1; макс. длина: 128
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/api-keys' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Integration key"
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
key_idstringОбязательноИдентификатор ключа из списка ключей проекта.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
namestringОбязательноНазвание ключа для удобного различения в списке.
key_prefixstringОбязательноKey Prefix
secret_prefixstring / nullНеобязательноSecret Prefix
api_keystringОбязательноКлюч доступа к API проекта; при выпуске сохраните сразу.
api_secretstringОбязательноСекрет для запросов записи; возвращается при выпуске, храните на сервере.
is_activebooleanОбязательноIs Active
last_used_atstring / nullНеобязательноLast Used At формат: date-time
created_atstringОбязательноCreated At формат: date-time
json
{
  "key_id": "string",
  "project_id": "project_demo_001",
  "name": "string",
  "key_prefix": "string",
  "secret_prefix": "secret_123456",
  "api_key": "string",
  "api_secret": "secret_123456",
  "is_active": false,
  "last_used_at": "2026-07-13T12:00:00Z",
  "created_at": "2026-07-13T12:00:00Z"
}
Ошибки и действия400 · 401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
json
{
  "detail": "Error description"
}
POST

Отключить ключ API

/api/v1/projects/{project_id}/api-keys/{key_id}/deactivate
X-API-Key + X-API-Secret
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
key_idpath · stringОбязательноИдентификатор ключа из списка ключей проекта.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

Тело запроса не требуется.

bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/api-keys/YOUR_KEY_ID/deactivate' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
key_idstringОбязательноИдентификатор ключа из списка ключей проекта.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
namestringОбязательноНазвание ключа для удобного различения в списке.
key_prefixstringОбязательноKey Prefix
secret_prefixstring / nullНеобязательноSecret Prefix
api_keystring / nullНеобязательноКлюч доступа к API проекта; при выпуске сохраните сразу.
api_secretstring / nullНеобязательноСекрет для запросов записи; возвращается при выпуске, храните на сервере.
is_activebooleanОбязательноIs Active
last_used_atstring / nullНеобязательноLast Used At формат: date-time
created_atstringОбязательноCreated At формат: date-time
json
{
  "key_id": "string",
  "project_id": "project_demo_001",
  "name": "string",
  "key_prefix": "string",
  "secret_prefix": "secret_123456",
  "api_key": "string",
  "api_secret": "secret_123456",
  "is_active": false,
  "last_used_at": "2026-07-13T12:00:00Z",
  "created_at": "2026-07-13T12:00:00Z"
}
Ошибки и действия400 · 401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
json
{
  "detail": "Error description"
}
POST

Зарегистрировать открытый ключ выплат

/api/v1/projects/{project_id}/security/payout-key
X-API-Key + X-API-Secret
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

JSON body

ПолеТипНаличиеЗначение и ограничения
public_keystringОбязательноОткрытый ключ Ed25519, 32 байта в Base64. мин. длина: 32
algorithmstringНеобязательноEd25519. по умолчанию: "Ed25519"
namestring / nullНеобязательноНазвание ключа для удобного различения в списке. макс. длина: 128
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/security/payout-key' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "public_key": "BASE64_ED25519_PUBLIC_KEY",
  "algorithm": "Ed25519",
  "name": "string"
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
key_idstringОбязательноИдентификатор ключа из списка ключей проекта.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
namestringОбязательноНазвание ключа для удобного различения в списке.
algorithmstringОбязательноEd25519.
public_keystringОбязательноОткрытый ключ Ed25519, 32 байта в Base64.
public_key_previewstringОбязательноPublic Key Preview
originstringОбязательноOrigin
is_activebooleanОбязательноIs Active
created_atstringОбязательноCreated At формат: date-time
private_keystring / nullНеобязательноЗакрытый ключ: возвращается только при генерации. Сразу сохраните в защищённом хранилище.
signing_message_examplestringОбязательноПример канонического сообщения; замените значения своими перед подписью.
json
{
  "key_id": "string",
  "project_id": "project_demo_001",
  "name": "string",
  "algorithm": "string",
  "public_key": "BASE64_ED25519_PUBLIC_KEY",
  "public_key_preview": "BASE64_ED25519_PUBLIC_KEY",
  "origin": "string",
  "is_active": false,
  "created_at": "2026-07-13T12:00:00Z",
  "private_key": "BASE64_ED25519_PRIVATE_KEY",
  "signing_message_example": "string"
}
Ошибки и действия400 · 401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
json
{
  "detail": "Error description"
}
GET

Ключи подписи выплат

/api/v1/projects/{project_id}/payout-keys
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payout-keys' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
[].key_idstringОбязательноИдентификатор ключа из списка ключей проекта.
[].project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
[].namestringОбязательноНазвание ключа для удобного различения в списке.
[].algorithmstringОбязательноEd25519.
[].public_keystringОбязательноОткрытый ключ Ed25519, 32 байта в Base64.
[].public_key_previewstringОбязательноPublic Key Preview
[].originstringОбязательноOrigin
[].is_activebooleanОбязательноIs Active
[].created_atstringОбязательноCreated At формат: date-time
json
[
  {
    "key_id": "string",
    "project_id": "project_demo_001",
    "name": "string",
    "algorithm": "string",
    "public_key": "BASE64_ED25519_PUBLIC_KEY",
    "public_key_preview": "BASE64_ED25519_PUBLIC_KEY",
    "origin": "string",
    "is_active": false,
    "created_at": "2026-07-13T12:00:00Z"
  }
]
Ошибки и действия401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project API key is required
json
{
  "detail": "Error description"
}
POST

Сгенерировать пару ключей выплат

/api/v1/projects/{project_id}/payout-keys/generate
X-API-Key + X-API-Secret
  • Сервис создаёт пару Ed25519 и возвращает private_key один раз. Можно сгенерировать пару у себя и зарегистрировать только public_key через /security/payout-key.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

JSON body

ПолеТипНаличиеЗначение и ограничения
namestring / nullНеобязательноНазвание ключа для удобного различения в списке. макс. длина: 128
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payout-keys/generate' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "string"
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
key_idstringОбязательноИдентификатор ключа из списка ключей проекта.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
namestringОбязательноНазвание ключа для удобного различения в списке.
algorithmstringОбязательноEd25519.
public_keystringОбязательноОткрытый ключ Ed25519, 32 байта в Base64.
public_key_previewstringОбязательноPublic Key Preview
originstringОбязательноOrigin
is_activebooleanОбязательноIs Active
created_atstringОбязательноCreated At формат: date-time
private_keystring / nullНеобязательноЗакрытый ключ: возвращается только при генерации. Сразу сохраните в защищённом хранилище.
signing_message_examplestringОбязательноПример канонического сообщения; замените значения своими перед подписью.
json
{
  "key_id": "string",
  "project_id": "project_demo_001",
  "name": "string",
  "algorithm": "string",
  "public_key": "BASE64_ED25519_PUBLIC_KEY",
  "public_key_preview": "BASE64_ED25519_PUBLIC_KEY",
  "origin": "string",
  "is_active": false,
  "created_at": "2026-07-13T12:00:00Z",
  "private_key": "BASE64_ED25519_PRIVATE_KEY",
  "signing_message_example": "string"
}
Ошибки и действия400 · 401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
json
{
  "detail": "Error description"
}
POST

Удалить ключ выплат

/api/v1/projects/{project_id}/payout-keys/{key_id}/delete
X-API-Key + X-API-Secret
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
key_idpath · stringОбязательноИдентификатор ключа из списка ключей проекта.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

Тело запроса не требуется.

bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payout-keys/YOUR_KEY_ID/delete' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
key_idstringОбязательноИдентификатор ключа из списка ключей проекта.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
namestringОбязательноНазвание ключа для удобного различения в списке.
algorithmstringОбязательноEd25519.
public_keystringОбязательноОткрытый ключ Ed25519, 32 байта в Base64.
public_key_previewstringОбязательноPublic Key Preview
originstringОбязательноOrigin
is_activebooleanОбязательноIs Active
created_atstringОбязательноCreated At формат: date-time
json
{
  "key_id": "string",
  "project_id": "project_demo_001",
  "name": "string",
  "algorithm": "string",
  "public_key": "BASE64_ED25519_PUBLIC_KEY",
  "public_key_preview": "BASE64_ED25519_PUBLIC_KEY",
  "origin": "string",
  "is_active": false,
  "created_at": "2026-07-13T12:00:00Z"
}
Ошибки и действия400 · 401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
json
{
  "detail": "Error description"
}
GET

Пример сообщения для подписи

/api/v1/projects/{project_id}/payout-keys/{key_id}/signing-message-example
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
key_idpath · stringОбязательноИдентификатор ключа из списка ключей проекта.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payout-keys/YOUR_KEY_ID/signing-message-example' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
key_idstringОбязательноИдентификатор ключа из списка ключей проекта.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
algorithmstringОбязательноEd25519.
public_keystringОбязательноОткрытый ключ Ed25519, 32 байта в Base64.
originstringОбязательноOrigin
signing_message_examplestringОбязательноПример канонического сообщения; замените значения своими перед подписью.
json
{
  "key_id": "string",
  "project_id": "project_demo_001",
  "algorithm": "string",
  "public_key": "BASE64_ED25519_PUBLIC_KEY",
  "origin": "string",
  "signing_message_example": "string"
}
Ошибки и действия401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

Балансы проекта

/api/v1/projects/{project_id}/balances
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/balances' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
balancesarray<object>ОбязательноBalances
balances[].project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
balances[].networkstring / nullОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
balances[].assetstring / nullОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
balances[].account_codestringОбязательноAccount Code
balances[].balancestringОбязательноBalance шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
balances[].available_for_withdrawalstring / nullНеобязательноAvailable For Withdrawal шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
balances[].pending_aggregation_balancestring / nullНеобязательноPending Aggregation Balance шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
json
{
  "balances": [
    {
      "project_id": "project_demo_001",
      "network": "Tron",
      "asset": "USDT",
      "account_code": "string",
      "balance": "string",
      "available_for_withdrawal": "string",
      "pending_aggregation_balance": "string"
    }
  ]
}
Ошибки и действия401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

Операции проекта

/api/v1/projects/{project_id}/transactions
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/transactions' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
itemsarray<object>ОбязательноItems
items[].transaction_typestringОбязательноTransaction Type
items[].reference_idstringОбязательноReference Id
items[].statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
items[].networkstring / nullНеобязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
items[].assetstring / nullНеобязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
items[].amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
items[].currencystring / nullНеобязательноUSD или RUB; валюта стоимости заказа, не криптоактив.
items[].created_atstringОбязательноCreated At формат: date-time
items[].metaobjectНеобязательноMeta
json
{
  "items": [
    {
      "transaction_type": "string",
      "reference_id": "string",
      "status": "ok",
      "network": "Tron",
      "asset": "USDT",
      "amount": "string",
      "currency": "USD",
      "created_at": "2026-07-13T12:00:00Z",
      "meta": {
        "example_key": "string"
      }
    }
  ]
}
Ошибки и действия401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

Экспорт операций в CSV

/api/v1/projects/{project_id}/transactions/export.csv
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/transactions/export.csv' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · text/csv

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

text
CSV-файл операций. Набор колонок зависит от формата экспорта.
Ошибки и действия401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

Экспорт операций в QuickBooks

/api/v1/projects/{project_id}/transactions/export-quickbooks.csv
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/transactions/export-quickbooks.csv' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · text/csv

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

text
CSV-файл операций. Набор колонок зависит от формата экспорта.
Ошибки и действия401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project API key is required
json
{
  "detail": "Error description"
}

Выплаты

GET

Заявки на выплату

/api/v1/projects/{project_id}/payout-requests
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payout-requests' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
[].request_idstringОбязательноИдентификатор заявки на выплату.
[].project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
[].networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
[].assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
[].amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
[].destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
[].statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
[].idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
[].requested_viastringОбязательноRequested Via
[].requested_by_user_idstring / nullНеобязательноRequested By User Id
[].approved_by_user_idstring / nullНеобязательноApproved By User Id
[].rejected_by_user_idstring / nullНеобязательноRejected By User Id
[].approved_payout_idstring / nullНеобязательноApproved Payout Id
[].approved_payout_statusstring / nullНеобязательноApproved Payout Status
[].rejection_reasonstring / nullНеобязательноПричина отказа; входит в подписываемое сообщение без изменения.
[].notestring / nullНеобязательноНеобязательное пояснение к заявке.
[].created_atstringОбязательноCreated At формат: date-time
[].decided_atstring / nullНеобязательноDecided At формат: date-time
json
[
  {
    "request_id": "req_demo_001",
    "project_id": "project_demo_001",
    "network": "Tron",
    "asset": "USDT",
    "amount": "string",
    "destination_address": "TQ9ExampleDestinationAddress123456789",
    "status": "ok",
    "idempotency_key": "action_001",
    "requested_via": "string",
    "requested_by_user_id": "string",
    "approved_by_user_id": "string",
    "rejected_by_user_id": "string",
    "approved_payout_id": "payout_demo_001",
    "approved_payout_status": "string",
    "rejection_reason": "string",
    "note": "string",
    "created_at": "2026-07-13T12:00:00Z",
    "decided_at": "2026-07-13T12:00:00Z"
  }
]
Ошибки и действия401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project API key is required
json
{
  "detail": "Error description"
}
POST

Создать заявку на выплату

/api/v1/projects/{project_id}/payout-requests
X-API-Key + X-API-Secret
  • Комиссия входит в amount. Принятие операции API не подтверждает отправку в блокчейн; отслеживайте состояние выплаты.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

JSON body

ПолеТипНаличиеЗначение и ограничения
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
amountnumber / stringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. >: 0; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке. мин. длина: 1; макс. длина: 255
notestring / nullНеобязательноНеобязательное пояснение к заявке. макс. длина: 500
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payout-requests' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "network": "Tron",
  "asset": "USDT",
  "amount": "50.00",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "idempotency_key": "withdraw_001",
  "note": "Manual withdrawal from merchant UI"
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
request_idstringОбязательноИдентификатор заявки на выплату.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
requested_viastringОбязательноRequested Via
requested_by_user_idstring / nullНеобязательноRequested By User Id
approved_by_user_idstring / nullНеобязательноApproved By User Id
rejected_by_user_idstring / nullНеобязательноRejected By User Id
approved_payout_idstring / nullНеобязательноApproved Payout Id
approved_payout_statusstring / nullНеобязательноApproved Payout Status
rejection_reasonstring / nullНеобязательноПричина отказа; входит в подписываемое сообщение без изменения.
notestring / nullНеобязательноНеобязательное пояснение к заявке.
created_atstringОбязательноCreated At формат: date-time
decided_atstring / nullНеобязательноDecided At формат: date-time
json
{
  "request_id": "req_demo_001",
  "project_id": "project_demo_001",
  "network": "Tron",
  "asset": "USDT",
  "amount": "string",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "status": "ok",
  "idempotency_key": "action_001",
  "requested_via": "string",
  "requested_by_user_id": "string",
  "approved_by_user_id": "string",
  "rejected_by_user_id": "string",
  "approved_payout_id": "payout_demo_001",
  "approved_payout_status": "string",
  "rejection_reason": "string",
  "note": "string",
  "created_at": "2026-07-13T12:00:00Z",
  "decided_at": "2026-07-13T12:00:00Z"
}
Ошибки и действия400 · 401 · 403 · 409 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
409Выплата пока недоступнаПроверьте error_code и доступный баланс. insufficient_project_reserve — недостаточен резерв; insufficient_aggregated_balance — средства ещё не готовы к отправке. Сначала сверьте состояние.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Payout availability conflict; inspect structured error fields
json
{
  "detail": "Error description"
}
json
{
  "detail": "Payout availability conflict",
  "error_code": "insufficient_aggregated_balance",
  "network": "tron",
  "asset": "USDT",
  "requested_amount": "100",
  "fee_amount": "1",
  "available_balance": "100",
  "available_aggregated_amount": "50",
  "pending_aggregation_balance": "50"
}
GET

Найти заявку по ключу повтора

/api/v1/projects/{project_id}/payout-requests/by-idempotency/{idempotency_key}
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
idempotency_keypath · stringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payout-requests/by-idempotency/YOUR_IDEMPOTENCY_KEY' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
request_idstringОбязательноИдентификатор заявки на выплату.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
requested_viastringОбязательноRequested Via
requested_by_user_idstring / nullНеобязательноRequested By User Id
approved_by_user_idstring / nullНеобязательноApproved By User Id
rejected_by_user_idstring / nullНеобязательноRejected By User Id
approved_payout_idstring / nullНеобязательноApproved Payout Id
approved_payout_statusstring / nullНеобязательноApproved Payout Status
rejection_reasonstring / nullНеобязательноПричина отказа; входит в подписываемое сообщение без изменения.
notestring / nullНеобязательноНеобязательное пояснение к заявке.
created_atstringОбязательноCreated At формат: date-time
decided_atstring / nullНеобязательноDecided At формат: date-time
json
{
  "request_id": "req_demo_001",
  "project_id": "project_demo_001",
  "network": "Tron",
  "asset": "USDT",
  "amount": "string",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "status": "ok",
  "idempotency_key": "action_001",
  "requested_via": "string",
  "requested_by_user_id": "string",
  "approved_by_user_id": "string",
  "rejected_by_user_id": "string",
  "approved_payout_id": "payout_demo_001",
  "approved_payout_status": "string",
  "rejection_reason": "string",
  "note": "string",
  "created_at": "2026-07-13T12:00:00Z",
  "decided_at": "2026-07-13T12:00:00Z"
}
Ошибки и действия401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Payout request not found
  • Project API key is required
json
{
  "detail": "Error description"
}
POST

Подтвердить заявку

/api/v1/projects/{project_id}/payout-requests/{request_id}/approve
X-API-Key + X-API-Secret
  • Нужны ключ API, секрет API и подпись Ed25519. Формат сообщения, UTC, nonce и окно в 5 минут описаны в разделе «Подписи».
  • Комиссия входит в amount. Принятие операции API не подтверждает отправку в блокчейн; отслеживайте состояние выплаты.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
request_idpath · stringОбязательноИдентификатор заявки на выплату.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

JSON body

ПолеТипНаличиеЗначение и ограничения
noncestringОбязательноУникальное значение для новой попытки подписанного запроса; защищает от повтора подписи. мин. длина: 1; макс. длина: 255
timestampstringОбязательноUTC date-time в пределах ±5 минут. Подписывайте каноническую строку с +00:00; см. Подписи. формат: date-time
signaturestringОбязательноПодпись Ed25519 канонического сообщения, 64 байта в Base64. мин. длина: 32
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payout-requests/YOUR_REQUEST_ID/approve' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "nonce": "nonce_20260713_approve_001",
  "timestamp": "2026-07-13T12:00:00Z",
  "signature": "BASE64_ED25519_SIGNATURE"
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
request_idstringОбязательноИдентификатор заявки на выплату.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
requested_viastringОбязательноRequested Via
requested_by_user_idstring / nullНеобязательноRequested By User Id
approved_by_user_idstring / nullНеобязательноApproved By User Id
rejected_by_user_idstring / nullНеобязательноRejected By User Id
approved_payout_idstring / nullНеобязательноApproved Payout Id
approved_payout_statusstring / nullНеобязательноApproved Payout Status
rejection_reasonstring / nullНеобязательноПричина отказа; входит в подписываемое сообщение без изменения.
notestring / nullНеобязательноНеобязательное пояснение к заявке.
created_atstringОбязательноCreated At формат: date-time
decided_atstring / nullНеобязательноDecided At формат: date-time
json
{
  "request_id": "req_demo_001",
  "project_id": "project_demo_001",
  "network": "Tron",
  "asset": "USDT",
  "amount": "string",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "status": "ok",
  "idempotency_key": "action_001",
  "requested_via": "string",
  "requested_by_user_id": "string",
  "approved_by_user_id": "string",
  "rejected_by_user_id": "string",
  "approved_payout_id": "payout_demo_001",
  "approved_payout_status": "string",
  "rejection_reason": "string",
  "note": "string",
  "created_at": "2026-07-13T12:00:00Z",
  "decided_at": "2026-07-13T12:00:00Z"
}
Ошибки и действия400 · 401 · 403 · 409 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
409Выплата пока недоступнаПроверьте error_code и доступный баланс. insufficient_project_reserve — недостаточен резерв; insufficient_aggregated_balance — средства ещё не готовы к отправке. Сначала сверьте состояние.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Payout availability conflict; inspect structured error fields
json
{
  "detail": "Error description"
}
json
{
  "detail": "Payout availability conflict",
  "error_code": "insufficient_aggregated_balance",
  "network": "tron",
  "asset": "USDT",
  "requested_amount": "100",
  "fee_amount": "1",
  "available_balance": "100",
  "available_aggregated_amount": "50",
  "pending_aggregation_balance": "50"
}
POST

Отклонить заявку

/api/v1/projects/{project_id}/payout-requests/{request_id}/reject
X-API-Key + X-API-Secret
  • Нужны ключ API, секрет API и подпись Ed25519. Формат сообщения, UTC, nonce и окно в 5 минут описаны в разделе «Подписи».
  • Комиссия входит в amount. Принятие операции API не подтверждает отправку в блокчейн; отслеживайте состояние выплаты.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
request_idpath · stringОбязательноИдентификатор заявки на выплату.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

JSON body

ПолеТипНаличиеЗначение и ограничения
noncestringОбязательноУникальное значение для новой попытки подписанного запроса; защищает от повтора подписи. мин. длина: 1; макс. длина: 255
timestampstringОбязательноUTC date-time в пределах ±5 минут. Подписывайте каноническую строку с +00:00; см. Подписи. формат: date-time
signaturestringОбязательноПодпись Ed25519 канонического сообщения, 64 байта в Base64. мин. длина: 32
rejection_reasonstringОбязательноПричина отказа; входит в подписываемое сообщение без изменения. мин. длина: 1; макс. длина: 500
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payout-requests/YOUR_REQUEST_ID/reject' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "nonce": "nonce_20260713_reject_001",
  "timestamp": "2026-07-13T12:00:00Z",
  "signature": "BASE64_ED25519_SIGNATURE",
  "rejection_reason": "KYC check failed"
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
request_idstringОбязательноИдентификатор заявки на выплату.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
requested_viastringОбязательноRequested Via
requested_by_user_idstring / nullНеобязательноRequested By User Id
approved_by_user_idstring / nullНеобязательноApproved By User Id
rejected_by_user_idstring / nullНеобязательноRejected By User Id
approved_payout_idstring / nullНеобязательноApproved Payout Id
approved_payout_statusstring / nullНеобязательноApproved Payout Status
rejection_reasonstring / nullНеобязательноПричина отказа; входит в подписываемое сообщение без изменения.
notestring / nullНеобязательноНеобязательное пояснение к заявке.
created_atstringОбязательноCreated At формат: date-time
decided_atstring / nullНеобязательноDecided At формат: date-time
json
{
  "request_id": "req_demo_001",
  "project_id": "project_demo_001",
  "network": "Tron",
  "asset": "USDT",
  "amount": "string",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "status": "ok",
  "idempotency_key": "action_001",
  "requested_via": "string",
  "requested_by_user_id": "string",
  "approved_by_user_id": "string",
  "rejected_by_user_id": "string",
  "approved_payout_id": "payout_demo_001",
  "approved_payout_status": "string",
  "rejection_reason": "string",
  "note": "string",
  "created_at": "2026-07-13T12:00:00Z",
  "decided_at": "2026-07-13T12:00:00Z"
}
Ошибки и действия400 · 401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
json
{
  "detail": "Error description"
}
POST

Создать подписанную выплату

/api/v1/payouts
X-API-Key + X-API-Secret
  • Нужны ключ API, секрет API и подпись Ed25519. Формат сообщения, UTC, nonce и окно в 5 минут описаны в разделе «Подписи».
  • Комиссия входит в amount. Принятие операции API не подтверждает отправку в блокчейн; отслеживайте состояние выплаты.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

JSON body

ПолеТипНаличиеЗначение и ограничения
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
amountnumber / stringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. >: 0; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
noncestringОбязательноУникальное значение для новой попытки подписанного запроса; защищает от повтора подписи.
timestampstringОбязательноUTC date-time в пределах ±5 минут. Подписывайте каноническую строку с +00:00; см. Подписи. формат: date-time
signaturestringОбязательноПодпись Ed25519 канонического сообщения, 64 байта в Base64. мин. длина: 32
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/payouts' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "project_id": "project_demo_001",
  "network": "Tron",
  "asset": "USDT",
  "amount": "25.00",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "idempotency_key": "payout_001",
  "nonce": "nonce_20260713_001",
  "timestamp": "2026-07-13T12:00:00Z",
  "signature": "BASE64_ED25519_SIGNATURE"
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
payout_idstringОбязательноИдентификатор выплаты.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
request_idstring / nullНеобязательноИдентификатор заявки на выплату.
notestring / nullНеобязательноНеобязательное пояснение к заявке.
operational_expenseboolean / nullНеобязательноOperational Expense
source_scopestring / nullНеобязательноSource Scope
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
gross_amountstring / nullНеобязательноGross Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
net_amountstring / nullНеобязательноNet Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
fee_amountstringНеобязательноFee Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
provider_fee_amountstringНеобязательноProvider Fee Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
total_reservedstring / nullНеобязательноTotal Reserved шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
provider_statusstring / nullНеобязательноProvider Status
finalbooleanНеобязательноFinal по умолчанию: false
funds_reservedbooleanНеобязательноFunds Reserved по умолчанию: false
funds_releasedbooleanНеобязательноFunds Released по умолчанию: false
idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
request_noncestringОбязательноRequest Nonce
request_timestampstringОбязательноRequest Timestamp формат: date-time
gas_modestring / nullНеобязательноGas Mode
rental_providerstring / nullНеобязательноRental Provider
rental_order_idstring / nullНеобязательноRental Order Id
gas_preparation_statusstring / nullНеобязательноGas Preparation Status
payout_submitted_fee_nativestring / nullНеобязательноPayout Submitted Fee Native шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payout_actual_fee_nativestring / nullНеобязательноPayout Actual Fee Native шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payout_gas_fee_sourcestring / nullНеобязательноPayout Gas Fee Source
payout_native_required_amountstring / nullНеобязательноPayout Native Required Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payout_native_current_balancestring / nullНеобязательноPayout Native Current Balance шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
reserve_floor_reached_for_sweepsboolean / nullНеобязательноReserve Floor Reached For Sweeps
tx_hashstring / nullНеобязательноTx Hash
explorer_urlstring / nullНеобязательноExplorer Url
processed_atstring / nullНеобязательноProcessed At формат: date-time
confirmed_atstring / nullНеобязательноConfirmed At формат: date-time
error_reasonstring / nullНеобязательноError Reason
status_historyarray<object>НеобязательноStatus History
status_history[].statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
status_history[].provider_statusstring / nullНеобязательноProvider Status
status_history[].event_typestring / nullНеобязательноEvent Type
status_history[].finalbooleanНеобязательноFinal по умолчанию: false
status_history[].atstringОбязательноAt формат: date-time
status_history[].actorstring / nullНеобязательноActor
status_history[].reasonstring / nullНеобязательноReason
json
{
  "payout_id": "payout_demo_001",
  "project_id": "project_demo_001",
  "request_id": "req_demo_001",
  "note": "string",
  "operational_expense": false,
  "source_scope": "string",
  "network": "Tron",
  "asset": "USDT",
  "amount": "string",
  "gross_amount": "string",
  "net_amount": "string",
  "fee_amount": "0",
  "provider_fee_amount": "0",
  "total_reserved": "string",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "status": "ok",
  "provider_status": "string",
  "final": false,
  "funds_reserved": false,
  "funds_released": false,
  "idempotency_key": "action_001",
  "request_nonce": "nonce_20260713_001",
  "request_timestamp": "2026-07-13T12:00:00Z",
  "gas_mode": "string",
  "rental_provider": "string",
  "rental_order_id": "order_1001",
  "gas_preparation_status": "string",
  "payout_submitted_fee_native": "string",
  "payout_actual_fee_native": "string",
  "payout_gas_fee_source": "string",
  "payout_native_required_amount": "string",
  "payout_native_current_balance": "string",
  "reserve_floor_reached_for_sweeps": false,
  "tx_hash": "0xabc123def456",
  "explorer_url": "string",
  "processed_at": "2026-07-13T12:00:00Z",
  "confirmed_at": "2026-07-13T12:00:00Z",
  "error_reason": "string",
  "status_history": [
    {
      "status": "ok",
      "provider_status": "string",
      "event_type": "string",
      "final": false,
      "at": "2026-07-13T12:00:00Z",
      "actor": "string",
      "reason": "string"
    }
  ]
}
Ошибки и действия400 · 401 · 403 · 409 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
409Выплата пока недоступнаПроверьте error_code и доступный баланс. insufficient_project_reserve — недостаточен резерв; insufficient_aggregated_balance — средства ещё не готовы к отправке. Сначала сверьте состояние.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Payout availability conflict; inspect structured error fields
json
{
  "detail": "Error description"
}
json
{
  "detail": "Payout availability conflict",
  "error_code": "insufficient_aggregated_balance",
  "network": "tron",
  "asset": "USDT",
  "requested_amount": "100",
  "fee_amount": "1",
  "available_balance": "100",
  "available_aggregated_amount": "50",
  "pending_aggregation_balance": "50"
}
GET

Получить выплату

/api/v1/payouts/{payout_id}
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
payout_idpath · stringОбязательноИдентификатор выплаты.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/payouts/YOUR_PAYOUT_ID' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
payout_idstringОбязательноИдентификатор выплаты.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
request_idstring / nullНеобязательноИдентификатор заявки на выплату.
notestring / nullНеобязательноНеобязательное пояснение к заявке.
operational_expenseboolean / nullНеобязательноOperational Expense
source_scopestring / nullНеобязательноSource Scope
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
gross_amountstring / nullНеобязательноGross Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
net_amountstring / nullНеобязательноNet Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
fee_amountstringНеобязательноFee Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
provider_fee_amountstringНеобязательноProvider Fee Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
total_reservedstring / nullНеобязательноTotal Reserved шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
provider_statusstring / nullНеобязательноProvider Status
finalbooleanНеобязательноFinal по умолчанию: false
funds_reservedbooleanНеобязательноFunds Reserved по умолчанию: false
funds_releasedbooleanНеобязательноFunds Released по умолчанию: false
idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
request_noncestringОбязательноRequest Nonce
request_timestampstringОбязательноRequest Timestamp формат: date-time
gas_modestring / nullНеобязательноGas Mode
rental_providerstring / nullНеобязательноRental Provider
rental_order_idstring / nullНеобязательноRental Order Id
gas_preparation_statusstring / nullНеобязательноGas Preparation Status
payout_submitted_fee_nativestring / nullНеобязательноPayout Submitted Fee Native шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payout_actual_fee_nativestring / nullНеобязательноPayout Actual Fee Native шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payout_gas_fee_sourcestring / nullНеобязательноPayout Gas Fee Source
payout_native_required_amountstring / nullНеобязательноPayout Native Required Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payout_native_current_balancestring / nullНеобязательноPayout Native Current Balance шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
reserve_floor_reached_for_sweepsboolean / nullНеобязательноReserve Floor Reached For Sweeps
tx_hashstring / nullНеобязательноTx Hash
explorer_urlstring / nullНеобязательноExplorer Url
processed_atstring / nullНеобязательноProcessed At формат: date-time
confirmed_atstring / nullНеобязательноConfirmed At формат: date-time
error_reasonstring / nullНеобязательноError Reason
status_historyarray<object>НеобязательноStatus History
status_history[].statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
status_history[].provider_statusstring / nullНеобязательноProvider Status
status_history[].event_typestring / nullНеобязательноEvent Type
status_history[].finalbooleanНеобязательноFinal по умолчанию: false
status_history[].atstringОбязательноAt формат: date-time
status_history[].actorstring / nullНеобязательноActor
status_history[].reasonstring / nullНеобязательноReason
json
{
  "payout_id": "payout_demo_001",
  "project_id": "project_demo_001",
  "request_id": "req_demo_001",
  "note": "string",
  "operational_expense": false,
  "source_scope": "string",
  "network": "Tron",
  "asset": "USDT",
  "amount": "string",
  "gross_amount": "string",
  "net_amount": "string",
  "fee_amount": "0",
  "provider_fee_amount": "0",
  "total_reserved": "string",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "status": "ok",
  "provider_status": "string",
  "final": false,
  "funds_reserved": false,
  "funds_released": false,
  "idempotency_key": "action_001",
  "request_nonce": "nonce_20260713_001",
  "request_timestamp": "2026-07-13T12:00:00Z",
  "gas_mode": "string",
  "rental_provider": "string",
  "rental_order_id": "order_1001",
  "gas_preparation_status": "string",
  "payout_submitted_fee_native": "string",
  "payout_actual_fee_native": "string",
  "payout_gas_fee_source": "string",
  "payout_native_required_amount": "string",
  "payout_native_current_balance": "string",
  "reserve_floor_reached_for_sweeps": false,
  "tx_hash": "0xabc123def456",
  "explorer_url": "string",
  "processed_at": "2026-07-13T12:00:00Z",
  "confirmed_at": "2026-07-13T12:00:00Z",
  "error_reason": "string",
  "status_history": [
    {
      "status": "ok",
      "provider_status": "string",
      "event_type": "string",
      "final": false,
      "at": "2026-07-13T12:00:00Z",
      "actor": "string",
      "reason": "string"
    }
  ]
}
Ошибки и действия401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Payout not found
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

Найти выплату по ключу повтора

/api/v1/projects/{project_id}/payouts/by-idempotency/{idempotency_key}
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
idempotency_keypath · stringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payouts/by-idempotency/YOUR_IDEMPOTENCY_KEY' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
payout_idstringОбязательноИдентификатор выплаты.
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
request_idstring / nullНеобязательноИдентификатор заявки на выплату.
notestring / nullНеобязательноНеобязательное пояснение к заявке.
operational_expenseboolean / nullНеобязательноOperational Expense
source_scopestring / nullНеобязательноSource Scope
networkstringОбязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetstringОбязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
amountstringОбязательноСумма > 0: для инвойса в currency; для выплаты в единицах asset, включая комиссию. Передавайте десятичной строкой. шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
gross_amountstring / nullНеобязательноGross Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
net_amountstring / nullНеобязательноNet Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
fee_amountstringНеобязательноFee Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
provider_fee_amountstringНеобязательноProvider Fee Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
total_reservedstring / nullНеобязательноTotal Reserved шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstringОбязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
provider_statusstring / nullНеобязательноProvider Status
finalbooleanНеобязательноFinal по умолчанию: false
funds_reservedbooleanНеобязательноFunds Reserved по умолчанию: false
funds_releasedbooleanНеобязательноFunds Released по умолчанию: false
idempotency_keystringОбязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке.
request_noncestringОбязательноRequest Nonce
request_timestampstringОбязательноRequest Timestamp формат: date-time
gas_modestring / nullНеобязательноGas Mode
rental_providerstring / nullНеобязательноRental Provider
rental_order_idstring / nullНеобязательноRental Order Id
gas_preparation_statusstring / nullНеобязательноGas Preparation Status
payout_submitted_fee_nativestring / nullНеобязательноPayout Submitted Fee Native шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payout_actual_fee_nativestring / nullНеобязательноPayout Actual Fee Native шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payout_gas_fee_sourcestring / nullНеобязательноPayout Gas Fee Source
payout_native_required_amountstring / nullНеобязательноPayout Native Required Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
payout_native_current_balancestring / nullНеобязательноPayout Native Current Balance шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
reserve_floor_reached_for_sweepsboolean / nullНеобязательноReserve Floor Reached For Sweeps
tx_hashstring / nullНеобязательноTx Hash
explorer_urlstring / nullНеобязательноExplorer Url
processed_atstring / nullНеобязательноProcessed At формат: date-time
confirmed_atstring / nullНеобязательноConfirmed At формат: date-time
error_reasonstring / nullНеобязательноError Reason
status_historyarray<object>НеобязательноStatus History
status_history[].statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
status_history[].provider_statusstring / nullНеобязательноProvider Status
status_history[].event_typestring / nullНеобязательноEvent Type
status_history[].finalbooleanНеобязательноFinal по умолчанию: false
status_history[].atstringОбязательноAt формат: date-time
status_history[].actorstring / nullНеобязательноActor
status_history[].reasonstring / nullНеобязательноReason
json
{
  "payout_id": "payout_demo_001",
  "project_id": "project_demo_001",
  "request_id": "req_demo_001",
  "note": "string",
  "operational_expense": false,
  "source_scope": "string",
  "network": "Tron",
  "asset": "USDT",
  "amount": "string",
  "gross_amount": "string",
  "net_amount": "string",
  "fee_amount": "0",
  "provider_fee_amount": "0",
  "total_reserved": "string",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "status": "ok",
  "provider_status": "string",
  "final": false,
  "funds_reserved": false,
  "funds_released": false,
  "idempotency_key": "action_001",
  "request_nonce": "nonce_20260713_001",
  "request_timestamp": "2026-07-13T12:00:00Z",
  "gas_mode": "string",
  "rental_provider": "string",
  "rental_order_id": "order_1001",
  "gas_preparation_status": "string",
  "payout_submitted_fee_native": "string",
  "payout_actual_fee_native": "string",
  "payout_gas_fee_source": "string",
  "payout_native_required_amount": "string",
  "payout_native_current_balance": "string",
  "reserve_floor_reached_for_sweeps": false,
  "tx_hash": "0xabc123def456",
  "explorer_url": "string",
  "processed_at": "2026-07-13T12:00:00Z",
  "confirmed_at": "2026-07-13T12:00:00Z",
  "error_reason": "string",
  "status_history": [
    {
      "status": "ok",
      "provider_status": "string",
      "event_type": "string",
      "final": false,
      "at": "2026-07-13T12:00:00Z",
      "actor": "string",
      "reason": "string"
    }
  ]
}
Ошибки и действия401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Payout not found
  • Project API key is required
json
{
  "detail": "Error description"
}
GET

Сверить состояние выплаты

/api/v1/projects/{project_id}/payouts/reconcile
X-API-Key
  • Передайте ровно один параметр: request_id, payout_id или idempotency_key. Используйте после таймаута записи до новой попытки.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
request_idquery · string / nullНеобязательноИдентификатор заявки на выплату. Передайте ровно один из трёх идентификаторов.
payout_idquery · string / nullНеобязательноИдентификатор выплаты. Передайте ровно один из трёх идентификаторов.
idempotency_keyquery · string / nullНеобязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке. Передайте ровно один из трёх идентификаторов.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/payouts/reconcile?idempotency_key=YOUR_IDEMPOTENCY_KEY' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
query_typestringОбязательноQuery Type
request_idstring / nullНеобязательноИдентификатор заявки на выплату. Передайте ровно один из трёх идентификаторов.
payout_idstring / nullНеобязательноИдентификатор выплаты. Передайте ровно один из трёх идентификаторов.
idempotency_keystring / nullНеобязательноВаш постоянный идентификатор одной логической выплаты; повторно используйте при сверке. Передайте ровно один из трёх идентификаторов.
request_statusstring / nullНеобязательноRequest Status
payout_statusstring / nullНеобязательноPayout Status
statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
provider_statusstring / nullНеобязательноProvider Status
finalbooleanНеобязательноFinal по умолчанию: false
funds_reservedbooleanНеобязательноFunds Reserved по умолчанию: false
funds_releasedbooleanНеобязательноFunds Released по умолчанию: false
networkstring / nullНеобязательноКод сети из /api/v1/public/networks. Для оплаты берите сеть из payment_options инвойса.
assetstring / nullНеобязательноКод актива (например USDT). Он должен быть доступен в выбранной сети и проекте.
gross_amountstring / nullНеобязательноGross Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
fee_amountstringНеобязательноFee Amount по умолчанию: "0"; шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
net_amountstring / nullНеобязательноNet Amount шаблон: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
destination_addressstring / nullНеобязательноАдрес получателя в указанной сети. Проверяйте сеть до подписи.
tx_hashstring / nullНеобязательноTx Hash
explorer_urlstring / nullНеобязательноExplorer Url
processed_atstring / nullНеобязательноProcessed At формат: date-time
confirmed_atstring / nullНеобязательноConfirmed At формат: date-time
rejection_reasonstring / nullНеобязательноПричина отказа; входит в подписываемое сообщение без изменения.
error_reasonstring / nullНеобязательноError Reason
status_historyarray<object>НеобязательноStatus History
status_history[].statusstringОбязательноСостояние объекта; значения и действия описаны в разделе соответствующего сценария.
status_history[].provider_statusstring / nullНеобязательноProvider Status
status_history[].event_typestring / nullНеобязательноEvent Type
status_history[].finalbooleanНеобязательноFinal по умолчанию: false
status_history[].atstringОбязательноAt формат: date-time
status_history[].actorstring / nullНеобязательноActor
status_history[].reasonstring / nullНеобязательноReason
json
{
  "project_id": "project_demo_001",
  "query_type": "string",
  "request_id": "req_demo_001",
  "payout_id": "payout_demo_001",
  "idempotency_key": "action_001",
  "request_status": "string",
  "payout_status": "string",
  "status": "ok",
  "provider_status": "string",
  "final": false,
  "funds_reserved": false,
  "funds_released": false,
  "network": "Tron",
  "asset": "USDT",
  "gross_amount": "string",
  "fee_amount": "0",
  "net_amount": "string",
  "destination_address": "TQ9ExampleDestinationAddress123456789",
  "tx_hash": "0xabc123def456",
  "explorer_url": "string",
  "processed_at": "2026-07-13T12:00:00Z",
  "confirmed_at": "2026-07-13T12:00:00Z",
  "rejection_reason": "string",
  "error_reason": "string",
  "status_history": [
    {
      "status": "ok",
      "provider_status": "string",
      "event_type": "string",
      "final": false,
      "at": "2026-07-13T12:00:00Z",
      "actor": "string",
      "reason": "string"
    }
  ]
}
Ошибки и действия400 · 401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Provide exactly one of request_id, payout_id, or idempotency_key
  • Payout not found
  • Payout request not found
  • Project API key is required
json
{
  "detail": "Error description"
}

Уведомления

POST

Настроить адрес webhook

/api/v1/projects/{project_id}/webhook/config
X-API-Key + X-API-Secret
  • Метод сохраняет webhook_url. Поле callback_secret оставлено для совместимости и не меняет секрет проекта.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

JSON body

ПолеТипНаличиеЗначение и ограничения
webhook_urlstringОбязательноПубличный HTTPS URL обработчика уведомлений; без логина/пароля в URL.
callback_secretstring / nullНеобязательноПоле совместимости: этот метод не меняет секрет подписи webhook; не передавайте его для ротации. мин. длина: 6
bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/webhook/config' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "webhook_url": "https://merchant.example/webhooks/bitcofy"
}'
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
project_idstringОбязательноИдентификатор проекта; должен принадлежать ключу API.
webhook_urlstringОбязательноПубличный HTTPS URL обработчика уведомлений; без логина/пароля в URL.
callback_secret_maskedstringОбязательноCallback Secret Masked
json
{
  "project_id": "project_demo_001",
  "webhook_url": "https://merchant.example/api/bitcofy/webhook",
  "callback_secret_masked": "secret_123456"
}
Ошибки и действия400 · 401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project not found
json
{
  "detail": "Error description"
}
POST

Отправить тестовый webhook

/api/v1/projects/{project_id}/webhook/test
X-API-Key + X-API-Secret
  • Создаёт событие в очереди. Успешный ответ не означает, что ваш обработчик уже принял уведомление.
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.
X-API-SecretheaderОбязательноСекрет API этого ключа; требуется для записи.

Тело запроса не требуется.

bash
curl --request POST 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/webhook/test' \
  --header "X-API-Key: $BITCOFY_API_KEY" \
  --header "X-API-Secret: $BITCOFY_API_SECRET"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
event_idstringОбязательноEvent Id
event_typestringОбязательноEvent Type
deliveredbooleanОбязательноDelivered
deadbooleanОбязательноDead
attemptsintegerОбязательноAttempts
last_errorstring / nullНеобязательноLast Error
last_response_statusinteger / nullНеобязательноLast Response Status
next_attempt_atstring / nullНеобязательноNext Attempt At формат: date-time
delivered_atstring / nullНеобязательноDelivered At формат: date-time
payloadobjectОбязательноPayload
json
{
  "event_id": "string",
  "event_type": "string",
  "delivered": false,
  "dead": false,
  "attempts": 1,
  "last_error": "string",
  "last_response_status": 1,
  "next_attempt_at": "2026-07-13T12:00:00Z",
  "delivered_at": "2026-07-13T12:00:00Z",
  "payload": {
    "example_key": "string"
  }
}
Ошибки и действия400 · 401 · 403 · 404 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
400Некорректный запрос или состояниеПроверьте detail, параметры, подпись и текущее состояние. Не повторяйте неизменённый запрос.
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
404Объект не найденПроверьте идентификатор и проект.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project not found
  • Project webhook_url or callback_secret is not configured
json
{
  "detail": "Error description"
}
GET

Журнал уведомлений

/api/v1/projects/{project_id}/webhook/events
X-API-Key
Параметры и пример запроса
ПолеТипНаличиеЗначение и ограничения
project_idpath · stringОбязательноИдентификатор проекта; должен принадлежать ключу API.
X-API-KeyheaderОбязательно*Ключ проекта. Альтернатива: Authorization: Bearer <project_api_key>.

Тело запроса не требуется.

bash
curl --request GET 'https://pay.bitcofy.pro/api/v1/projects/YOUR_PROJECT_ID/webhook/events' \
  --header "X-API-Key: $BITCOFY_API_KEY"
Успешный ответ

200 · application/json

Иллюстрация структуры: значения приведены для примера; фактическое состояние может отличаться.

ПолеТипНаличиеЗначение и ограничения
[].event_idstringОбязательноEvent Id
[].event_typestringОбязательноEvent Type
[].deliveredbooleanОбязательноDelivered
[].deadbooleanОбязательноDead
[].attemptsintegerОбязательноAttempts
[].last_errorstring / nullНеобязательноLast Error
[].last_response_statusinteger / nullНеобязательноLast Response Status
[].next_attempt_atstring / nullНеобязательноNext Attempt At формат: date-time
[].delivered_atstring / nullНеобязательноDelivered At формат: date-time
[].payloadobjectОбязательноPayload
json
[
  {
    "event_id": "string",
    "event_type": "string",
    "delivered": false,
    "dead": false,
    "attempts": 1,
    "last_error": "string",
    "last_response_status": 1,
    "next_attempt_at": "2026-07-13T12:00:00Z",
    "delivered_at": "2026-07-13T12:00:00Z",
    "payload": {
      "example_key": "string"
    }
  }
]
Ошибки и действия401 · 403 · 422 · 423

Ошибки обработчика перечислены ниже. detail может зависеть от проверки и состояния; текст не является стабильным кодом ошибки. При 5xx результат записи может быть неизвестен — сначала сверьте операцию.

HTTPЧто означаетЧто делать
401Неверные реквизиты доступаПроверьте ключ API, активность и секрет для записи.
403Доступ запрещёнПроверьте принадлежность и активацию проекта; для сессии оплаты — cookie страницы инвойса.
422Ошибка формата данныхdetail содержит массив: loc — поле, msg — причина, type — код. Исправьте обязательные поля и типы.
423Проект заблокированПроверьте активацию и ограничения проекта в кабинете. Повтор неизменённого запроса не поможет.

Возможные пояснения detail

  • API key does not have access to this project
  • Project API key is required
json
{
  "detail": "Error description"
}