← Protocols
BVNK
Payments / Onramp·Multi-chain · EVM · Solana

BVNK

01Description

Enterprise stablecoin payments infrastructure: merchant payment links, embedded wallets, fiat-to-stablecoin conversion, and global stablecoin payouts with built-in compliance screening.

02Best for
  • 01B2B stablecoin payouts
  • 02merchant payment links (USDC/USDT)
  • 03fiat <> stablecoin conversion
  • 04embedded wallets for platforms
  • 05regulated cross-border settlement
03Install
  • pnpm add @bvnk/javascript-sdk
04Environment variables
VariableScopeDescription
BVNK_API_KEYServerBVNK API key id (Hawk auth). Pair with `BVNK_API_SECRET`. Use sandbox credentials with `https://api.sandbox.bvnk.com/`.
BVNK_API_SECRETServerBVNK API secret used to compute the per-request Hawk MAC. Never expose to the client.
BVNK_WEBHOOK_SECRETServerShared secret used to verify the HMAC signature on incoming BVNK webhook events.
05Prompt snippet
Use BVNK for merchant stablecoin acceptance and payouts. Server-side, sign every request with Hawk auth (key id + secret) against `https://api.bvnk.com/` (or `https://api.sandbox.bvnk.com/`). To accept a payment, create a payment link via `POST /api/v1/pay/summary` with the merchant code, amount, and `paymentCurrency`; redirect the user to the returned `redirectUrl`. To pay out, call the estimate endpoint first (`POST /api/v1/quote/...`) for an indicative FX rate, then `POST /api/v1/pay/summary` with `twoStep: "true"` and the recipient address. Verify webhook signatures with `BVNK_WEBHOOK_SECRET` before crediting orders or marking payouts complete.
06Gotchas
  • Auth is Hawk (per-request HMAC), not bearer tokens — every request needs a fresh nonce/timestamp; clock skew >60s rejects requests with an opaque 401.
  • Payouts and withdrawals require IP allowlisting in the BVNK dashboard — local dev from a residential IP will silently 403 until you whitelist.
  • Sandbox (`api.sandbox.bvnk.com`) and production are entirely separate tenants with their own credentials, merchant codes, and webhook URLs; merchant code from one will not resolve in the other.
  • Compliance screening (sanctions, PEP, travel rule) runs inline on payouts — a payout can sit in `PENDING_REVIEW` for hours; do not block UI threads waiting for terminal status.
  • Network strings are strict: use `ETH` / `TRX` / `SOL` for the chain and `USDC` / `USDT` for the asset — mismatched pairs (e.g. USDC on TRX) fail validation rather than auto-routing.
  • FX margin on fiat <> stablecoin conversion is not flat — always call the estimate endpoint immediately before creating the payout and pass the returned quote id to lock the rate.
07Alternatives