BUZZ PayBUZZ PayAPI

Документация · версия 2.0.0

BUZZ Pay API

Через API ваш сайт или программа сами создают ссылки на оплату, следят за статусом платежа и получают уведомления. Клиент из России платит рублями из приложения своего банка, деньги приходят на баланс кабинета в USDT.

Адресhttps://buzz-pay.com/api/sub/v1
Ключзаголовок Authorization: Bearer <ключ>
ФорматJSON в UTF-8, файлы в multipart/form-data
Лимит120 запросов в минуту
Песочницатестовый ключ, деньги не двигаются
ДатыISO 8601, например 2026-09-19T10:00:00+00:00

Как проходит платёж

  1. КассаПлатёж всегда создаётся на кассе. Список касс и их ID: GET /points.
  2. СсылкаPOST /orders с суммой в рублях возвращает payment_url.
  3. ОплатаКлиент открывает ссылку, при необходимости проходит проверку и платит из приложения банка.
  4. СтатусПлатёж переходит в paid, на ваш сервер приходит вебхук order.paid.
  5. БалансСумма в USDT видна в GET /balance. До одобрения проверки клиента она на удержании.

Значения в примерах условные: курсы, суммы, ID и ссылки показывают формат ответа.

Быстрый старт

Первый платёж в песочнице за пять шагов. Нужен только тестовый ключ.

  1. Выпустите ключи

    В кабинете откройте раздел «API» и нажмите «Выпустить тестовый ключ». Боевой ключ выпускается там же кнопкой «Выпустить ключ». Ключ показывается один раз: сразу сохраните его в переменные окружения сервера.

    Если раздела «API» в кабинете нет, напишите в поддержку: доступ к API включает BUZZ Pay.

  2. Узнайте ID кассы

    curl "https://buzz-pay.com/api/sub/v1/points" \
      -H "Authorization: Bearer $BUZZPAY_KEY"
  3. Создайте платёж

    Передайте ID кассы и сумму в рублях. В ответе придёт payment_url: отдайте его клиенту ссылкой, кнопкой или QR-кодом.

    curl -X POST "https://buzz-pay.com/api/sub/v1/orders" \
      -H "Authorization: Bearer $BUZZPAY_KEY" \
      -H "Content-Type: application/json" \
      -d '{"point_id": 12, "amount_rub": 5000, "description": "Заказ #123"}'
    Ответ 201, сокращён
    {
      "order": {
        "id": 90000001,
        "order_number": "BP-TEST-90000001",
        "status": "pending",
        "is_test": true,
        "amount_rub": 5000,
        "payment_reference": "A1B2C3D4E5F6G7H8"
      },
      "payment_url": "https://buzz-pay.com/pay/A1B2C3D4E5F6G7H8"
    }
  4. Оплатите тестовый платёж

    В песочнице оплату имитирует отдельный запрос или кнопка «Оплатить» на странице payment_url. Платёж переходит в paid, на ваш сервер уходит вебхук order.paid с is_test: true.

    cURL
    curl -X POST "https://buzz-pay.com/api/sub/v1/orders/90000001/simulate-payment" \
      -H "Authorization: Bearer $BUZZPAY_KEY"
  5. Переключитесь на боевой ключ

    Код остаётся тем же, меняется только ключ. Перед запуском настройте вебхуки и проверьте, как сайт обрабатывает ошибки.

Ключи и доступ

Каждый запрос передаёт ключ в заголовке Authorization: Bearer <ключ>. Ключей два:

КлючЧто делает
БоевойНастоящие платежи и деньги.
ТестовыйПесочница: платежи создаются для проверки, деньги не двигаются. В начале ключа стоит пометка test.

Оба ключа выпускаются в разделе «API» кабинета и показываются один раз.

Ключ только на сервереС ключом можно создавать платежи и читать данные кабинета. Его не должно быть в коде сайта, который видит браузер, в мобильном приложении и в репозитории. Храните его в переменных окружения сервера.

Если доступа нет

ОтветЧто значит
401 unauthorizedКлюча нет в запросе, он неверен или отозван.
403 api_disabledAPI для кабинета выключен.
403 scope_disabledНужный раздел API не включён.

Доступ к API и его разделам включает BUZZ Pay. Напишите в поддержку, какие разделы нужны.

cURL
curl "https://buzz-pay.com/api/sub/v1/balance" \
  -H "Authorization: Bearer $BUZZPAY_KEY"

Песочница

С тестовым ключом можно пройти весь путь платежа, не трогая деньги. Тестовые платежи получают is_test: true, ID от 90 000 000 и номер с пометкой TEST. В кабинете их не видно, через 48 часов они удаляются.

ДействиеС тестовым ключом
Создать платёж POST /ordersСоздаётся в песочнице.
Найти платёж GET /orders, /orders/{id}, /by-reference, /by-external-idВидны только тестовые платежи. В списке работает только фильтр status.
ОплатитьPOST /orders/{id}/simulate-payment или кнопка «Оплатить» на странице payment_url.
Курсы, баланс, кассы, клиентыЧитаются настоящие данные кабинета.
Создать или изменить кассуНельзя: 403 test_mode_readonly.
Загрузить документыФайлы не сохраняются, kyc_status сразу approved.
Привязать клиента attach-clientНедоступно: 404.
Статус проверки GET /orders/{id}/kycДля тестовых платежей всегда 404.

Симуляция оплаты с боевым ключом вернёт 403 test_key_required.

Проверка клиента

У каждого платежа есть тип проверки kyc_type и её статус kyc_status. Пока проверка не одобрена, деньги по платежу на удержании: это штатно.

pendingждёт клиента или документы submittedна проверке approvedодобрено rejectedотклонено

Три сценария

СценарийКак проходит
kyc_type=unverified
по умолчанию
Вы ничего не загружаете. Клиент открывает payment_url и проходит проверку по документу прямо на странице оплаты. После одобрения появляется QR для оплаты.
kyc_type=verifiedДокументы загружаете вы: сразу в POST /orders как multipart/form-data или позже через /documents.
Повторный клиентПередайте client_external_id или client_phone клиента, у которого документы уже одобрены. Платёж привяжется к нему, файлы не нужны. Проверить заранее: GET /clients/{key} со статусом verified.

Если касса настроена без обязательной проверки, платёж создаётся сразу с kyc_status=approved.

Документы при создании платежа

ПолеЧто передать
passport_typeru для паспорта РФ, other для иностранного
file_documentразворот паспорта, до 10 МБ
file_selfieселфи с паспортом
file_addressстраница с пропиской, для passport_type=ru
client_addressадрес регистрации текстом, для passport_type=other
curl -X POST "https://buzz-pay.com/api/sub/v1/orders" \
  -H "Authorization: Bearer $BUZZPAY_KEY" \
  -F "point_id=12" \
  -F "amount_rub=5000" \
  -F "kyc_type=verified" \
  -F "client_external_id=user-777" \
  -F "passport_type=ru" \
  -F "file_document=@passport.jpg" \
  -F "file_selfie=@selfie.jpg" \
  -F "file_address=@registration.jpg"

Следующие платежи этого клиента создаются по client_external_id без файлов. Уже созданный платёж можно привязать к проверенному клиенту: attach-client.

Узнать статус: GET /orders/{id}/kyc или вебхук order.kyc_status_changed.

Вебхуки

Когда с платежом что-то происходит, BUZZ Pay отправляет POST на ваш HTTPS-адрес.

Настройка

  1. В разделе «API» кабинета укажите «URL для уведомлений» (только HTTPS).
  2. Нажмите «Выпустить секрет»: им подписываются уведомления. Сохраните его на сервере рядом с ключом.
  3. Включите «Отправлять» и нажмите «Сохранить».
  4. «Отправить тест» пришлёт событие order.test: так проверяется приём.

События

СобытиеКогда
order.createdплатёж создан
order.processingоплата в обработке
order.paidплатёж оплачен
order.cancelledплатёж отменён
order.expiredсрок платежа истёк
order.kyc_status_changedизменился статус проверки клиента
order.testтест из кабинета

Что приходит

Запрос
POST /ваш/адрес
Content-Type: application/json
X-Webhook-Event: order.paid
X-Webhook-Id: …
X-Webhook-Timestamp: …
X-Webhook-Signature: sha256=…

{"event": "order.paid", "timestamp": …, "is_test": false, "order": {…}}

В order лежит тот же объект платежа, что отдаёт GET /orders/{id}. У событий песочницы is_test: true.

Проверка подписи

Подпись в X-Webhook-Signature: sha256= и HMAC-SHA256 с вашим секретом от строки X-Webhook-Timestamp + "." + тело. Тело берите сырым, до разбора JSON: после повторной сериализации подпись не сойдётся.

import crypto from "node:crypto";
import express from "express";

const app = express();
const SECRET = process.env.BUZZPAY_WEBHOOK_SECRET;

// express.raw оставляет тело сырым: подпись считается от него
app.post("/buzzpay/webhook", express.raw({ type: "application/json" }), (req, res) => {
  const timestamp = req.get("X-Webhook-Timestamp") ?? "";
  const body = req.body.toString("utf8");
  const expected = "sha256=" + crypto
    .createHmac("sha256", SECRET)
    .update(timestamp + "." + body)
    .digest("hex");
  const got = req.get("X-Webhook-Signature") ?? "";
  const ok = got.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(got), Buffer.from(expected));
  if (!ok) return res.sendStatus(401);

  const event = JSON.parse(body);
  // event.event, event.order.id, event.order.status
  res.sendStatus(200);
});

Ответ и повторы

  • Ответьте любым кодом 2xx за 8 секунд. Долгую обработку делайте после ответа, в фоне.
  • Без ответа 2xx уведомление повторится через 1, 5 и 30 минут, через 2 и 12 часов.
  • Одно событие может прийти дважды: отсеивайте повторы по X-Webhook-Id.
  • Сверяйте X-Webhook-Timestamp со своим временем и отбрасывайте слишком старые запросы.
  • Перед выдачей товара можно перепроверить статус запросом GET /orders/{id}.

Ошибки и лимиты

При ошибке API отвечает кодом HTTP и JSON с машинным кодом в error. Текст в message бывает на английском: решения в коде принимайте по error.

Пример: 422
{
  "error": "validation_failed",
  "message": "The amount rub field is required.",
  "errors": {
    "amount_rub": ["The amount rub field is required."]
  }
}
HTTPerrorЧто делать
401unauthorizedПроверьте ключ: его нет в запросе, он неверен или отозван.
403api_disabled, scope_disabledAPI или раздел не включён. Напишите в поддержку.
403test_key_requiredЗапрос только для песочницы, нужен тестовый ключ.
403test_mode_readonlyС тестовым ключом это действие недоступно, нужен боевой.
404not_foundОбъекта нет или он из другого кабинета.
422validation_failedОшибка в полях, подробности по каждому полю в errors.
429too_many_requestsБольше 120 запросов в минуту. Сделайте паузу и повторите.
502upstream_errorВременный сбой. Повторите позже, увеличивая паузу.

Если ошибка повторяется, проверьте страницу статуса и напишите в поддержку: приложите время запроса и ответ.

Справочник API · версия 2.0.0

Методы

Базовый адрес https://buzz-pay.com/api/sub/v1. У каждого метода примеры на cURL, Node.js, PHP и Python, язык переключается сразу во всех блоках.

Объект «Платёж»

Платёж в ответах методов раздела «Платежи»: какие поля приходят и что значит статус.

ПолеОписание
id
integer
ID платежа
order_number
string
Номер платежа, как в кабинете
status
string
Статус платежа, см. ниже
is_test
boolean
Только у заказов песочницы
amount_rub
number
Сумма в ₽
amount_usdt
number · null
Сумма в USDT
rate_usdt
number · null
Курс ₽ за USDT по платежу
payment_reference
string
Код из ссылки на оплату
client_name
string · null
Комментарий (PATCH /orders/{id})
client_external_id
string · null
Ваш ID клиента
kyc_type
string · null
Тип проверки клиента
kyc_status
string · null
Статус проверки клиента
point
object
Касса
created_at
string · date-time
Когда создан
custom_fields
array of object
Ответы на дополнительные поля кассы

Статусы

СтатусЧто значит
pendingСоздан, ждёт оплаты
processingОплата в обработке
paidОплачен
cancelledОтменён
expiredСрок оплаты истёк
Пример: ответ GET /orders/{id}
{
  "order": {
    "id": 4210,
    "order_number": "BP-004210",
    "status": "pending",
    "amount_rub": 5000,
    "amount_usdt": 56.55,
    "rate_usdt": 88.41,
    "payment_reference": "A1B2C3D4E5F6G7H8",
    "client_name": "Иван Петров",
    "client_external_id": "user-777",
    "kyc_type": "unverified",
    "kyc_status": "pending",
    "point": {
      "id": 12,
      "name": "Основная",
      "account": "USDT"
    },
    "created_at": "2026-09-19T10:00:00+00:00"
  }
}

Курсы и справочники

Текущий курс

GET/rates

Курс с учётом вашей наценки — тот же, что в кабинете. Обновляется примерно раз в 30 секунд.

Если для кабинета включены тарифы по типам трафика, в ответе появляются traffic_tariffs_enabled: true и rates_by_traffic_type — курс для каждого типа (default — для касс без отдельного тарифа). Курс конкретной кассы: GET /rates?point_id=<id> — rub_per_usdt вернётся уже по тарифу этой кассы. Без point_id rub_per_usdt — базовый тариф.

Параметры

ПараметрГдеОписание
point_id
integer
в запросеID кассы — курс по её тарифу (при мультитарифе).

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/rates" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "rub_per_usdt": 88.4136,
  "updated_at": "2026-09-19T10:00:00+00:00",
  "local_rates": {
    "THB": {
      "symbol": "฿",
      "per_usdt": 32.4041,
      "rub_per_unit": 2.724653,
      "units_per_rub": 0.367
    }
  },
  "traffic_tariffs_enabled": true,
  "rates_by_traffic_type": {
    "default": {
      "rub_per_usdt": 88.4136
    },
    "exchange": {
      "rub_per_usdt": 90.46
    }
  }
}

Локальные валюты

GET/currencies

Список валют, доступных для касс.

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/currencies" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
[
  {
    "code": "USDT",
    "name": "Tether USD",
    "symbol": "$",
    "decimals": 2
  },
  {
    "code": "THB",
    "name": "Thai Baht",
    "symbol": "฿",
    "decimals": 2
  }
]

Типы трафика

GET/traffic-types

Справочник типов трафика для создания касс.

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/traffic-types" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
[
  {
    "key": "exchange",
    "label": "Обмен валюты"
  }
]

Возможности кабинета

GET/capabilities

Какие функции включены для кабинета.

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/capabilities" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "allow_permanent_link": true,
  "allow_offline_points": true
}

Баланс и история

Баланс

GET/balance

Баланс кабинета в USDT: available — доступно к выводу, hold — на удержании (hold_kyc, hold_release, hold_payouts).

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/balance" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "balances": {
    "usdt": {
      "available": 1250.5,
      "hold": 120,
      "hold_payouts": 0,
      "hold_refunds": 0,
      "hold_kyc": 20,
      "hold_release": 100
    }
  }
}

История баланса

GET/balance-history

Движения баланса: зачисления, холды, выплаты.

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/balance-history" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "data": [
    {
      "id": 1,
      "date": "2026-09-19T10:05:00+00:00",
      "type": "credit_order",
      "amount": 56.55,
      "currency": "USDT",
      "balance_after": 1307.05,
      "note": "BP-004210"
    }
  ],
  "source": "ledger"
}

Кассы

Список касс

GET/points

Все кассы вашего кабинета с настройками.

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/points" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
[
  {
    "id": 12,
    "name": "Основная",
    "account": "USDT",
    "comission": 0,
    "is_active": true,
    "permanent_link": true,
    "payment_reference": "Z9X8C7V6B5N4M3L2",
    "custom_fields": [
      {
        "key": "purpose",
        "label": "Назначение",
        "type": "select",
        "options": [
          "Аренда",
          "Депозит"
        ],
        "required": true,
        "to_comment": true
      }
    ]
  }
]

Создать кассу

POST/points

Новая касса сразу привязывается к вашему кабинету. Тестовым ключом недоступно (403 test_mode_readonly).

Тело запроса application/json

ПолеОписание
name обязательное
string
Название кассы
account
string
По умолчанию "USDT"
comission
number
—
permanent_link
boolean
Касса с постоянной ссылкой (POST /points/{id}/order)
require_name
boolean
Спрашивать имя плательщика
require_email
boolean
Спрашивать email плательщика
fixed_amount_rub
number
Фиксированная сумма в ₽
kyc_mode
string
Проверка клиента на кассе
Значения: verified, unverified

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
422
validation_failed
Ошибка валидации
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 422
{
  "error": "validation_failed",
  "message": "The amount rub field is required.",
  "errors": {
    "amount_rub": [
      "The amount rub field is required."
    ]
  }
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl -X POST "https://buzz-pay.com/api/sub/v1/points" \
  -H "Authorization: Bearer $BUZZPAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Касса сайта", "account": "USDT", "permanent_link": true }'
Ответ 201
{
  "id": 13,
  "name": "Касса сайта",
  "account": "USDT",
  "is_active": true,
  "permanent_link": true,
  "payment_reference": "Q1W2E3R4T5Y6U7I8"
}

Касса по ID

GET/points/{id}

Параметры

ПараметрГдеОписание
id обязательный
integer
в путиID кассы

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/points/12" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "id": 12,
  "name": "Основная",
  "account": "USDT",
  "comission": 0,
  "is_active": true
}

Обновить кассу

PUT/points/{id}

Передайте только поля, которые нужно изменить. PATCH работает так же. Тестовым ключом недоступно.

Параметры

ПараметрГдеОписание
id обязательный
integer
в путиID кассы

Тело запроса application/json

ПолеОписание
name
string
Название кассы
is_active
boolean
Касса включена
comission
number
—

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
422
validation_failed
Ошибка валидации
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 422
{
  "error": "validation_failed",
  "message": "The amount rub field is required.",
  "errors": {
    "amount_rub": [
      "The amount rub field is required."
    ]
  }
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl -X PUT "https://buzz-pay.com/api/sub/v1/points/12" \
  -H "Authorization: Bearer $BUZZPAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "is_active": false }'
Ответ 200
{
  "id": 13,
  "name": "Касса сайта",
  "is_active": false
}

Платежи

Создать платёж

POST/orders

Создаёт платёж на кассе и возвращает payment_url — ссылку на страницу оплаты для клиента.

KYC. kyc_type=unverified (по умолчанию) — клиент проходит проверку сам на странице оплаты. kyc_type=verified — документы загружаете вы: multipart/form-data с file_document, file_selfie, file_address (см. примеры с файлами), либо позже через /orders/by-reference/{reference}/documents. Передайте client_external_id (или client_phone) — и для следующих платежей этого клиента файлы не нужны. Подробнее — руководство «Проверка клиента».

Тестовым ключом заказ создаётся в песочнице (is_test: true) и оплачивается через simulate-payment.

Тело запроса application/json

ПолеОписание
point_id обязательное
integer
ID кассы (GET /points)
amount_rub обязательное
number
Сумма в ₽
description
string
Назначение платежа
client_name
string
Имя клиента для отчётности
client_external_id
string
Ваш ID клиента — ключ клиента базы; документы нужны только при первом платеже
client_phone
string
Телефон клиента — альтернативный ключ клиента базы
kyc_type
string
unverified — клиент проходит проверку сам на странице оплаты (по умолчанию); verified — документы загружаете вы
Значения: unverified, verified
passport_type
string
Для verified: ru — паспорт РФ (нужна страница с пропиской), other — иностранный (адрес текстом)
Значения: ru, other
client_address
string
Адрес регистрации для passport_type=other
custom
object
Ответы на дополнительные поля кассы {ключ: значение}; конфиг полей — в GET /points (custom_fields). Обязательные поля проверяются, значения попадают в заказ как custom_fields

С файлами multipart/form-data

Те же поля, что в JSON, и файлы документов:

ПолеОписание
file_document
файл
Разворот паспорта (до 10 МБ)
file_selfie
файл
Селфи с паспортом
file_address
файл
Страница с пропиской

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
422
validation_failed
Ошибка валидации
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 422
{
  "error": "validation_failed",
  "message": "The amount rub field is required.",
  "errors": {
    "amount_rub": [
      "The amount rub field is required."
    ]
  }
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl -X POST "https://buzz-pay.com/api/sub/v1/orders" \
  -H "Authorization: Bearer $BUZZPAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "point_id": 12, "amount_rub": 5000 }'
Ответ 201
{
  "order": {
    "id": 4210,
    "order_number": "BP-004210",
    "status": "pending",
    "amount_rub": 5000,
    "amount_usdt": 56.55,
    "rate_usdt": 88.41,
    "payment_reference": "A1B2C3D4E5F6G7H8",
    "client_name": "Иван Петров",
    "client_external_id": "user-777",
    "kyc_type": "unverified",
    "kyc_status": "pending",
    "point": {
      "id": 12,
      "name": "Основная",
      "account": "USDT"
    },
    "created_at": "2026-09-19T10:00:00+00:00"
  },
  "payment_url": "https://buzz-pay.com/pay/A1B2C3D4E5F6G7H8"
}

Список платежей

GET/orders

Платежи ваших касс, новые первыми. pagination.total считается до фильтрации по кассам и может быть больше фактического — листайте, пока data не станет пустым. Тестовым ключом — заказы песочницы (фильтр только status).

Параметры

ПараметрГдеОписание
page
integer
в запросеСтраница (по умолчанию 1)
per_page
integer
в запросеЗаписей на странице (по умолчанию 20, макс. 100)
status
string
в запросеpending | processing | paid | cancelled | expired
Значения: pending, processing, paid, cancelled, expired
from
string
в запросеНачало периода YYYY-MM-DD
to
string
в запросеКонец периода YYYY-MM-DD
point_id
integer
в запросеФильтр по кассе
search
string
в запросеПоиск по номеру / клиенту

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/orders?status=paid&per_page=50" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "data": [
    {
      "id": 4210,
      "order_number": "BP-004210",
      "status": "paid",
      "amount_rub": 5000,
      "amount_usdt": 56.55,
      "rate_usdt": 88.41,
      "payment_reference": "A1B2C3D4E5F6G7H8",
      "client_name": "Иван Петров",
      "client_external_id": "user-777",
      "kyc_type": "unverified",
      "kyc_status": "pending",
      "point": {
        "id": 12,
        "name": "Основная",
        "account": "USDT"
      },
      "created_at": "2026-09-19T10:00:00+00:00"
    }
  ],
  "pagination": {
    "current_page": 1,
    "last_page": 1,
    "total": 1
  }
}

Платёж по ID

GET/orders/{id}

Параметры

ПараметрГдеОписание
id обязательный
integer
в путиID платежа

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/orders/4210" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "order": {
    "id": 4210,
    "order_number": "BP-004210",
    "status": "pending",
    "amount_rub": 5000,
    "amount_usdt": 56.55,
    "rate_usdt": 88.41,
    "payment_reference": "A1B2C3D4E5F6G7H8",
    "client_name": "Иван Петров",
    "client_external_id": "user-777",
    "kyc_type": "unverified",
    "kyc_status": "pending",
    "point": {
      "id": 12,
      "name": "Основная",
      "account": "USDT"
    },
    "created_at": "2026-09-19T10:00:00+00:00"
  }
}

Комментарий к платежу

PATCH/orders/{id}

Задаёт client_name — комментарий, видимый в кабинете в колонке «Комментарий». Пустая строка очищает.

Параметры

ПараметрГдеОписание
id обязательный
integer
в путиID платежа

Тело запроса application/json

ПолеОписание
client_name обязательное
string · null
Комментарий; пустая строка очищает

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
422
validation_failed
Ошибка валидации
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 422
{
  "error": "validation_failed",
  "message": "The amount rub field is required.",
  "errors": {
    "amount_rub": [
      "The amount rub field is required."
    ]
  }
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl -X PATCH "https://buzz-pay.com/api/sub/v1/orders/4210" \
  -H "Authorization: Bearer $BUZZPAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "client_name": "Заказ #123, Иван Петров" }'
Ответ 200
{
  "order": {
    "id": 4210,
    "order_number": "BP-004210",
    "status": "pending",
    "amount_rub": 5000,
    "amount_usdt": 56.55,
    "rate_usdt": 88.41,
    "payment_reference": "A1B2C3D4E5F6G7H8",
    "client_name": "Заказ #123, Иван Петров",
    "client_external_id": "user-777",
    "kyc_type": "unverified",
    "kyc_status": "pending",
    "point": {
      "id": 12,
      "name": "Основная",
      "account": "USDT"
    },
    "created_at": "2026-09-19T10:00:00+00:00"
  }
}

Платёж по reference

GET/orders/by-reference/{reference}

Поиск по payment_reference из ссылки на оплату.

Параметры

ПараметрГдеОписание
reference обязательный
string
в путиpayment_reference

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/orders/by-reference/A1B2C3D4E5F6G7H8" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "order": {
    "id": 4210,
    "order_number": "BP-004210",
    "status": "pending",
    "amount_rub": 5000,
    "amount_usdt": 56.55,
    "rate_usdt": 88.41,
    "payment_reference": "A1B2C3D4E5F6G7H8",
    "client_name": "Иван Петров",
    "client_external_id": "user-777",
    "kyc_type": "unverified",
    "kyc_status": "pending",
    "point": {
      "id": 12,
      "name": "Основная",
      "account": "USDT"
    },
    "created_at": "2026-09-19T10:00:00+00:00"
  }
}

Платёж по вашему ID

GET/orders/by-external-id/{externalId}

Поиск по client_external_id, переданному при создании.

Параметры

ПараметрГдеОписание
externalId обязательный
string
в путиВаш идентификатор клиента

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/orders/by-external-id/user-777" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "order": {
    "id": 4210,
    "order_number": "BP-004210",
    "status": "pending",
    "amount_rub": 5000,
    "amount_usdt": 56.55,
    "rate_usdt": 88.41,
    "payment_reference": "A1B2C3D4E5F6G7H8",
    "client_name": "Иван Петров",
    "client_external_id": "user-777",
    "kyc_type": "unverified",
    "kyc_status": "pending",
    "point": {
      "id": 12,
      "name": "Основная",
      "account": "USDT"
    },
    "created_at": "2026-09-19T10:00:00+00:00"
  }
}

Платёж по постоянной ссылке

POST/points/{id}/order

Для касс с permanent_link: создаёт платёж с заранее заданной суммой и данными плательщика, отдаёт payment_url.

Параметры

ПараметрГдеОписание
id обязательный
integer
в путиID кассы с постоянной ссылкой

Тело запроса application/json

ПолеОписание
amount_rub
number
Сумма в ₽
first_name
string
Имя плательщика
last_name
string
Фамилия плательщика
email
string
Email плательщика
client_external_id
string
Ваш ID клиента
custom
object
Ответы на дополнительные поля кассы {ключ: значение}

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
422
validation_failed
Ошибка валидации
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 422
{
  "error": "validation_failed",
  "message": "The amount rub field is required.",
  "errors": {
    "amount_rub": [
      "The amount rub field is required."
    ]
  }
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl -X POST "https://buzz-pay.com/api/sub/v1/points/12/order" \
  -H "Authorization: Bearer $BUZZPAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "amount_rub": 1500 }'
Ответ 201
{
  "order": {
    "id": 4210,
    "order_number": "BP-004210",
    "status": "pending",
    "amount_rub": 1500,
    "amount_usdt": 16.97,
    "rate_usdt": 88.41,
    "payment_reference": "A1B2C3D4E5F6G7H8",
    "client_name": "Иван Петров",
    "client_external_id": "user-777",
    "kyc_type": "unverified",
    "kyc_status": "pending",
    "point": {
      "id": 12,
      "name": "Основная",
      "account": "USDT"
    },
    "created_at": "2026-09-19T10:00:00+00:00"
  },
  "payment_url": "https://buzz-pay.com/pay/A1B2C3D4E5F6G7H8"
}

Проверка клиента (KYC)

Статус KYC платежа

GET/orders/{id}/kyc

kyc_status: pending (ждёт клиента или документы), submitted (на проверке), approved, rejected. Для тестовых заказов всегда 404.

Параметры

ПараметрГдеОписание
id обязательный
integer
в путиID платежа

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/orders/4210/kyc" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "kyc_type": "verified",
  "kyc_status": "approved",
  "client": {
    "first_name": "Иван",
    "last_name": "Петров",
    "status": "verified"
  }
}

Дозагрузить документы к платежу

POST/orders/by-reference/{reference}/documents

multipart/form-data, хотя бы один файл обязателен. В ответе verified_kyc_status — фактический статус после загрузки. Передайте client_phone/client_name, чтобы документы привязались к клиенту базы. В песочнице файлы не сохраняются, kyc_status сразу approved.

Параметры

ПараметрГдеОписание
reference обязательный
string
в путиpayment_reference платежа

Тело запроса multipart/form-data

ПолеОписание
file_document
файл
Разворот паспорта (до 10 МБ)
file_selfie
файл
Селфи с паспортом
file_address
файл
Страница с пропиской
client_name
string
Имя клиента
client_phone
string
Телефон клиента: привязывает документы к клиенту базы

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
422
validation_failed
Ошибка валидации
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 422
{
  "error": "validation_failed",
  "message": "The amount rub field is required.",
  "errors": {
    "amount_rub": [
      "The amount rub field is required."
    ]
  }
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl -X POST "https://buzz-pay.com/api/sub/v1/orders/by-reference/A1B2C3D4E5F6G7H8/documents" \
  -H "Authorization: Bearer $BUZZPAY_KEY" \
  -F "client_name=Иван Петров" \
  -F "file_document=@passport.jpg" \
  -F "file_selfie=@selfie.jpg" \
  -F "file_address=@registration.jpg"
Ответ 200
{
  "message": "Документы загружены",
  "verified_kyc_status": "submitted",
  "verified_client_id": 91
}

Привязать клиента базы к платежу

POST/orders/by-reference/{reference}/attach-client

Привязывает уже проверенного клиента (id из GET /clients) без повторной загрузки документов. В песочнице недоступно (404).

Параметры

ПараметрГдеОписание
reference обязательный
string
в путиpayment_reference платежа

Тело запроса application/json

ПолеОписание
client_id обязательное
integer
ID клиента из GET /clients

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
422
validation_failed
Ошибка валидации
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 422
{
  "error": "validation_failed",
  "message": "The amount rub field is required.",
  "errors": {
    "amount_rub": [
      "The amount rub field is required."
    ]
  }
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl -X POST "https://buzz-pay.com/api/sub/v1/orders/by-reference/A1B2C3D4E5F6G7H8/attach-client" \
  -H "Authorization: Bearer $BUZZPAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "client_id": 91 }'
Ответ 200
{
  "message": "Клиент привязан",
  "order": {
    "id": 4210,
    "order_number": "BP-004210",
    "status": "pending",
    "amount_rub": 5000,
    "amount_usdt": 56.55,
    "rate_usdt": 88.41,
    "payment_reference": "A1B2C3D4E5F6G7H8",
    "client_name": "Иван Петров",
    "client_external_id": "user-777",
    "kyc_type": "verified",
    "kyc_status": "approved",
    "point": {
      "id": 12,
      "name": "Основная",
      "account": "USDT"
    },
    "created_at": "2026-09-19T10:00:00+00:00",
    "client_id": 91
  }
}

Песочница

Симуляция оплаты (только тестовый ключ)

POST/orders/{id}/simulate-payment

Переводит тестовый заказ в paid без реальной оплаты и отправляет вебхук order.paid с is_test: true. С боевым ключом — 403.

Параметры

ПараметрГдеОписание
id обязательный
integer
в путиID тестового заказа (90 000 000+)

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
test_key_required
Боевой ключ
404
not_found
Не найдено или не принадлежит вашему кабинету
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "test_key_required",
  "message": "Симуляция оплаты доступна только с тестовым ключом (тестовый ключ)."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl -X POST "https://buzz-pay.com/api/sub/v1/orders/90000001/simulate-payment" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "message": "Тестовый платёж успешно симулирован.",
  "order": {
    "id": 90000001,
    "order_number": "BP-TEST-90000001",
    "status": "paid",
    "amount_rub": 5000,
    "amount_usdt": 56.55,
    "rate_usdt": 88.41,
    "payment_reference": "A1B2C3D4E5F6G7H8",
    "client_name": "Иван Петров",
    "client_external_id": "user-777",
    "kyc_type": null,
    "kyc_status": null,
    "point": {
      "id": 12,
      "name": "Основная",
      "account": "USDT"
    },
    "created_at": "2026-09-19T10:00:00+00:00",
    "global_id": "BP-TEST-90000001",
    "is_test": true
  },
  "webhook_queued": true,
  "_sandbox": "Тестовый режим — база не затронута."
}

База клиентов

Список клиентов

GET/clients

Проверенные клиенты вашего кабинета: документы загружаются один раз, повторные платежи создаются по client_external_id или client_phone.

Параметры

ПараметрГдеОписание
search
string
в запросеПоиск по имени / телефону / ID
status
string
в запросеФильтр по статусу верификации

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/clients" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "data": [
    {
      "id": 91,
      "external_id": "user-777",
      "phone": "+79001234567",
      "first_name": "Иван",
      "last_name": "Петров",
      "status": "verified"
    }
  ]
}

Клиент по ID или телефону

GET/clients/{key}

Параметры

ПараметрГдеОписание
key обязательный
string
в путиclient_external_id или телефон

Ошибки

КодКогда
401
unauthorized
Ключ отсутствует, отозван или неверен
403
scope_disabled
API выключен владельцем кабинета или раздел не включён
404
not_found
Не найдено или не принадлежит вашему кабинету
429
too_many_requests
Превышен лимит 120 запросов в минуту
Примеры ответов с ошибкой
Ответ 401
{
  "error": "unauthorized",
  "message": "API-ключ недействителен или отозван."
}
Ответ 403
{
  "error": "scope_disabled",
  "message": "Раздел «orders» не включён для вашего кабинета."
}
Ответ 404
{
  "error": "not_found",
  "message": "Не найдено."
}
Ответ 429
{
  "error": "too_many_requests",
  "message": "Too Many Attempts."
}
curl "https://buzz-pay.com/api/sub/v1/clients/user-777" \
  -H "Authorization: Bearer $BUZZPAY_KEY"
Ответ 200
{
  "client": {
    "id": 91,
    "external_id": "user-777",
    "phone": "+79001234567",
    "first_name": "Иван",
    "last_name": "Петров",
    "status": "verified"
  }
}