Skip to main content
Accept crypto and stablecoin payments for subscriptions, licenses, and digital products. Breet generates a deposit address per invoice or subscription, tracks incoming transactions, and notifies your app via webhooks so you can activate access instantly. This opens your product to global customers who may not have access to traditional payment methods.

How it works

1

Generate a deposit address per invoice

Call the generate-address endpoint when a customer initiates a purchase or subscription. Use the invoice or subscription ID as the label to link the payment to the order.
2

Display payment instructions

Show the deposit address and expected amount on your checkout or billing page. The customer sends crypto from any external wallet.
3

Receive a webhook on payment

When the customer sends crypto, Breet detects the on-chain transaction and sends a webhook to your server with the amount, asset, and status.
4

Activate the product or subscription

Parse the webhook payload, match it to the invoice using the label or destinationAddress, verify the amount, and grant access.
5

Settle funds (optional)

How funds are handled after a payment depends on your setup:
  • Without auto-settlement: payments are converted and held in your wallet in your chosen currency (USD, NGN, or GHS). You can view the balance on your dashboard and withdraw manually whenever you’re ready.
  • With per-address auto-settlement: each payment is automatically converted and paid out to the bank account linked to that address. Enable it via the API. See the auto-settlement guide.
  • With business-wide auto-settlement: all payments across all addresses are automatically withdrawn to a single destination (bank account or stablecoin address). Enable it from your dashboard under Settings > Automatic Settlement.
You can set your preferred holding currency from the dashboard under Settings > Crypto Settings.

Generate a payment address

curl -X POST "https://api.breet.io/v1/trades/sell/assets/ASSET_ID/generate-address" \
  -H "x-app-id: YOUR_APP_ID" \
  -H "x-app-secret: YOUR_APP_SECRET" \
  -H "X-Breet-Env: production" \
  -H "Content-Type: application/json" \
  -d '{"label": "inv-20260301-0042"}'
Replace ASSET_ID with the identifier for the crypto asset you want to accept (e.g., USDT, USDC). See the supported assets page for the full list. Use the label field to tag the address with your invoice or subscription ID for easy reconciliation.
List available assets by calling GET /trades/assets to get valid asset IDs for your account.

What Breet handles

  • Generating deposit addresses tied to invoices or subscriptions
  • Monitoring blockchains for incoming payments
  • Sending webhook notifications with transaction details
  • Converting crypto to local fiat via auto-settlement
  • Payouts to linked bank accounts

What you handle

  • Creating invoices and mapping them to deposit addresses
  • Displaying payment instructions and the deposit address at checkout
  • Listening for and processing webhook events
  • Verifying payment amounts against invoice totals
  • Activating subscriptions or delivering digital goods after confirmation
  • Handling underpayments, overpayments, or expired invoices

Example user journey

  1. Chinwe selects a yearly plan for your SaaS product and chooses Pay with crypto at checkout.
  2. Your app creates an invoice and calls Breet’s generate-address endpoint with the invoice ID as the label.
  3. The checkout page displays a USDT deposit address, the expected amount, and a QR code.
  4. Chinwe sends the exact amount from her personal wallet.
  5. Breet detects the transaction and sends a trade.completed webhook to your server.
  6. Your app verifies the payment amount, marks the invoice as paid, and activates Chinwe’s subscription.
  7. Chinwe receives a confirmation email and gets immediate access to the product.

FAQ

For each billing cycle, generate a new deposit address with the new invoice ID as the label. Alternatively, reuse an existing address if you track payments by amount and timing. Send your customer the address and expected amount ahead of each renewal.
Yes. Crypto payments are borderless. Any customer with a crypto wallet can pay, regardless of their location. This makes Breet a strong option for reaching global customers who may not have access to cards or local payment methods.
Breet reports the exact amount received in the webhook payload. Your app is responsible for comparing the received amount to the invoice total and deciding how to proceed. You can prompt the customer to send the remaining balance, issue a partial credit, or reject the payment.