Release notes
Журнал изменений
Что менялось в API и SDK balancedpay.
| Дата | Изменение |
|---|---|
2026-05-06 | Webhook signing v2: подпись считается от "<timestamp>.<body>", заголовок X-Freefin-Signature теперь t=…,v1=…,v2=…. Защита от replay-атак. v1 продолжает работать для legacy-клиентов; verifyWebhook во всех 8 SDK поддерживает оба формата. |
2026-05-06 | balancedpay login + ~/.balancedpay/config.json: несколько профилей, проверка ключа при сохранении, balancedpay status / balancedpay use / balancedpay logout. |
2026-05-06 | balancedpay trigger: payment.succeeded/failed/fraud/refunded/cancelled, payout.succeeded/failed — синтетические события одной командой. |
2026-05-06 | Live API Explorer: session-память для зависимых ручек. POST /payments → cancel/refund/get автоматически подтягивают payment.id. |
2026-05-06 | Algolia DocSearch: поддержка через NEXT_PUBLIC_ALGOLIA_* env. При отсутствии — фолбек на локальный полнотекстовый поиск (без регистрации Algolia). |
2026-05-06 | balancedpay-cli: локальный helper, ловит webhook'и через SSE и форвардит на localhost. go install github.com/balancedpay/cli/balancedpay@latest. |
2026-05-06 | Live API Explorer: кнопка Run в каждой ручке, запрос на test-ключе прямо из доки, без CORS (через proxy /api/docs-runner). |
2026-05-06 | SDK на 8 языках: Node.js, Python, PHP, Ruby, Java, .NET, Go, Flutter/Dart. Все с автоматической идемпотентностью и проверкой webhook-подписей. |
2026-05-06 | Палитра поиска по доке (⌘K) с подсветкой совпадений. |
2026-05-06 | Раздел «Best practices»: дедуп webhook-ов, обработка 429, security-чеклист, мониторинг. |
2026-05-06 | OpenAPI 3.0 spec: интерактивная Swagger UI на /docs/openapi, скачиваемый openapi.yaml, готовая база для генерации SDK на 50+ языков. |
2026-05-06 | Multi-language code-табы (curl / Node.js / Python / Go / PHP) на ключевых ручках; раньше был только curl. |
2026-05-06 | Idempotency-Key теперь Stripe-style: повтор с тем же телом возвращает ранее созданный объект (200 OK + idempotent: true), повтор с другим телом возвращает 409 idempotent_conflict. |
2026-05-06 | Раздел «Готовые сценарии»: приём платежа, частичный возврат, polling, realtime SSE. |
2026-05-06 | Стартовый Node.js SDK @balancedpay/sdk: createPayment / createPayout / verifyWebhook + типы TypeScript. |
2026-05-06 | Добавили разделы: «Тестирование (симулятор)», «Метод any (мультиформа)», «Поле metadata», «Возврат покупателя», «Банки СБП», «Realtime (SSE)», «Коды отказов». |
2026-05-06 | Унифицировали failure_code: наружу мерчанту уходит наш словарь (insufficient_funds, card_declined, …), сырой банковский код храним в metadata.bank_failure_code для аудита. |
2026-05-06 | Появился публичный SSE-канал GET /api/v1/public/events под Bearer-ключом. |
2026-05-06 | Появился справочник банков СБП: GET /api/v1/public/banks/sbp. |
2026-05-06 | После оплаты возвращаем покупателя на return_url с query-параметрами ?payment_id=…&status=… |
2026-05-06 | Включили проверку HMAC-подписи и IP allow-list на public-API. На магазине появилась опция «Требовать подпись». Без неё запросы возвращают 401. |
2026-05-06 | Idempotency-Key теперь работает по-настоящему: повторный запрос с тем же ключом вернёт ранее созданный платёж/выплату, а не создаст дубль. |
2026-05-06 | Включили per-merchant rate-limit на public-API. Лимиты настраиваются в админке (раздел «Лимиты API»). Дефолт: 20 burst + 1 req/sec. |
2026-05-06 | Cancel и refund платежа теперь доступны под Bearer-ключом (POST /public/payments/{id}/cancel и /refund). |
2026-05-06 | Добавили webhook-события payment.cancelled и payment.expired. |
2026-05-06 | Дока сужена до публичного API-контура. Настройки магазина и CRUD webhook-endpoint'ов делаются только в ЛК. |
2026-05-05 | Привели список webhook-событий в соответствие с реальным backend. |
2026-05-05 | Многоязычные примеры HMAC-подписи: Node.js, Python, Go, PHP, Ruby, C#, Java. |
2026-05-05 | Все публичные эндпоинты получили curl-примеры и образцы ответов. |
2026-05-04 | Появился промежуточный статус processing с банковским TTL. |
2026-05-04 | TTL-reconciler: pending по нашему TTL → expired, processing по банковскому → expired. |
2026-05-04 | В ответе платежа появился список refunds[] и amount_refunded. |