Developer documentation

Base stablecoin payment integration

Use network BASE for native USDC and the configured bridged USDT. BoltUtil uses Ethereum finality for Base payments, without a fixed confirmation-time guarantee.

Supported mainnet token identities

These contracts or mints are project defaults, not live channel status. Order creation also requires an enabled network and asset plus a valid merchant wallet. Always pay payment.address from the API, never the token contract or mint.

Supported mainnet token identities
NetworkCurrencyContract / MintToken decimals
BASE network logoBASEUSDT0xfde4c96c8593536e31f229ea8f37b2ada2699bb26
BASE network logoBASEUSDC0x833589fcd6edb6e08f4c7c32d4f71b54bda029136

Merchant setup

  1. Configure a receiving wallet for the network and an enabled Webhook URL and secret. Keep the API Key and HMAC secret on your server.
  2. Check availability of the network / currency combination. Platform administrators maintain RPC, network and asset configuration; merchants do not need to deploy scanners.
  3. Display payment.amount, payment.address, currency, network and expiry from the response. QR data is not an image.
  4. Verify, deduplicate and durably accept events before returning HTTP 2xx; fulfill your business order idempotently.

Network and asset notes

  • Base mainnet has chain ID 8453; this integration does not use Base Sepolia. Merchants configure wallets; platform administrators maintain RPC and channel activation.
  • USDC is native Circle USDC; USDT is the configured bridged version. USDbC or other contracts are not listed.
  • BoltUtil scans Base against an L1-finalized safe height. Pay before the order countdown ends; confirmation may arrive later, without a fixed duration guarantee.
  • Before using WooCommerce, check your installed release and its supported networks and currencies.

Signed request and response examples

Examples use 25.00 to demonstrate the format. Real amounts come from your business order and must meet the configured asset minimum. Addresses, orders and hashes are examples, not actual payments. The copied cURL / Java program sends a request: configure your own API Key and Webhook secret before running it.

create / cURL
# Run against your account only when ready; this sends an API request.
: "${BOLTUTIL_API_KEY:?Set your complete API Key}"
: "${BOLTUTIL_WEBHOOK_SECRET:?Set your Webhook secret}"
timestamp=$(python3 -c 'import time; print(int(time.time()*1000))')
body='{"amount":"25.00","currency":"USDT","network":"BASE","externalOrderId":"INV-20260209-99281"}'
signature=$(printf '%s.%s' "$timestamp" "$body" | openssl dgst -sha256 -hmac "$BOLTUTIL_WEBHOOK_SECRET" | awk '{print $NF}')

curl --request POST "https://api.boltutil.com/api/v1/order/create" \
  --header 'Content-Type: application/json' \
  --header "X-Bolt-Key: $BOLTUTIL_API_KEY" \
  --header "X-Bolt-Timestamp: $timestamp" \
  --header "X-Bolt-Signature: $signature" \
  --data-binary "$body"

Addresses, transaction hashes and orders are examples. Replace them with your own test data.

Base URL

PROD
https://api.boltutil.com
Full order parameters →

Confirmation and callback handling

Detection is not confirmation. Use system status and verified callbacks: PAID still awaits confirmation. CONFIRMED / COMPLETED may also follow manual acceptance; check paidAmount, shortfallAmount and settlementType. COMPLETED does not prove that your business has fulfilled the order.

Integration questions

Does support mean the currency is currently available?

No. The network and asset must be enabled, with valid wallet and Webhook configuration. Static contract tables do not show live availability.

May the customer round the payable amount?

Pay the complete payment.amount. The system may round upward and add a small offset to distinguish orders sharing a wallet. Do not truncate or independently round it.

May I fulfill as soon as the wallet balance increases?

Verify the confirmed order result and authentic notification. Wrong networks, token versions, amounts and duplicate events require handling; a balance increase alone is insufficient.