Skip to main content
OTC desks and P2P trading platforms can use Breet as settlement infrastructure. Generate a unique deposit address per trade, monitor payments through webhooks, and release funds after confirmation, giving you escrow-like control without building crypto infrastructure.

How it works

1

Create a trade and generate a deposit address

When a trade is initiated, call the generate-address endpoint with a label identifying the trade (e.g., a trade ID or order reference).
2

Buyer deposits crypto

The buyer sends the agreed amount of crypto to the generated address. Your platform holds the trade in a pending state.
3

Breet confirms the deposit

Breet monitors the blockchain and sends a webhook when the deposit is confirmed, including the amount and trade label.
4

Release or settle funds

After your platform confirms the trade conditions are met, release funds, either to the seller’s bank account or to an external crypto address.

Generate a deposit address for a trade

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": "trade-ord-78542"
  }'
Replace ASSET_ID with a valid asset ID from the Fetch assets endpoint. See the supported assets page for a full list and the quickstart for authentication setup.

What Breet handles

  • Wallet address generation per trade
  • Blockchain monitoring and deposit confirmation
  • Webhook notifications with deposit details (amount, asset, label)
  • Fiat settlement to bank accounts (NGN/GHS) when you trigger withdrawal
  • Stablecoin withdrawals to external addresses

What you handle

  • Trade matching and order management between buyers and sellers
  • Mapping each trade to a unique label for deposit tracking
  • Listening for webhooks to update trade status (e.g., marking as funded)
  • Deciding when to release funds (your escrow logic)
  • Initiating withdrawals to the seller’s bank or crypto address after trade completion

Example user journey

  1. A buyer and seller agree on a trade on your P2P platform.
  2. Your backend calls Breet to generate a deposit address labeled with the trade ID.
  3. Your platform shows the address to the buyer and holds the trade as “awaiting payment.”
  4. The buyer sends USDT to the deposit address.
  5. Breet confirms the deposit and sends a webhook to your platform.
  6. Your platform marks the trade as “funded” and notifies the seller.
  7. The seller confirms delivery (or your platform auto-confirms based on your rules).
  8. Your backend calls POST /payments/withdraw/bank/{id} or POST /payments/withdraw/address to release funds to the seller.

FAQ

Yes. Generate a unique deposit address per trade so incoming funds are isolated. When Breet confirms the deposit via webhook, your platform controls when and how to release funds. You make the withdrawal call only after trade conditions are satisfied, giving you full escrow-like control.
Yes. Assign a unique label to each trade when generating the deposit address. Breet includes this label in all webhook payloads, so you can match deposits to specific trades even when handling hundreds of concurrent orders.
Yes. Use POST /payments/withdraw/address to send stablecoins (USDT/USDC) to an external wallet instead of settling to a bank account. This is useful when sellers prefer to receive crypto.
Breet reports the exact amount received in the webhook payload. Your platform is responsible for comparing this against the expected trade amount and deciding how to handle mismatches, such as requesting an additional payment or issuing a refund.