Base
URL: https://api.doronpay.com/smart-invoicing
Token is stored in memory only
Smart Invoicing API
REST
API for creating crypto invoices, managing merchant wallets, configuring live rates, handling
payment detection and webhooks, and reading billing and reports.
Base URL — https://api.doronpay.com/smart-invoicing Prefix
every path shown in this reference with this base URL.
Non-custodial: DoronX stores only your public receiving address. At least one
wallet must be set as default before invoices can be created.
POST/wallet-profilesBearerConnect a
business-owned external wallet address.
Field
Type
Description
asset
string
required
USDT | BTC | USDC
network
string
required
TRC20 | BEP20 |
SOLANA | BTC
address
string
required
Your business-owned public receiving address
label
string
required
Human-readable label e.g. Main USDT TRC20
isDefault
boolean
optional
Set as default receiving wallet
ownershipProofType
string
optional
MANUAL
Request body
Response
Response will
appear here...
GET/wallet-profilesBearerList all connected
wallet profiles for the current workspace.
Query string
Response
Response will appear
here...
PATCH/wallet-profiles/{walletProfileId}BearerUpdate a wallet
profile — change label, set as default.
Field
Type
Description
isDefault
boolean
optional
Promote this wallet to the default
label
string
optional
Update the display label
walletProfileId + body
Response
Response will
appear here...
Rate engine
POST/rates/trade-pairsBearerCreate or update a
merchant trade pair. Rate = Kraken crypto/USD × Fixer USD/fiat × (1 + markup%).
Field
Type
Description
baseAsset
string
required
USDT | BTC | USDC
quoteCurrency
string
required
Fiat invoice currency e.g. GHS
allowedNetworks
string[]
required
Networks customer can pay on
markupPercent
number
required
Your profit margin. 2 = 2%
spreadPercent
number
optional
Additional spread
pricingMode
string
optional
AUTO (live) | MANUAL (fixed)
minInvoiceAmount
number
optional
Minimum fiat invoice amount
maxInvoiceAmount
number|null
optional
null = unlimited
rateTtlSeconds
number
optional
Default 600
Request body
Response
Response will appear
here...
GET/rates/trade-pairsBearerList all
merchant-scoped trade pairs.
Query string
Response
Response will appear
here...
POST/rates/quoteBearerGet the exact crypto amount for a fiat invoice value.
Field
Type
Description
amount
number
required
Fiat invoice amount
invoiceCurrency
string
required
e.g. GHS
paymentAsset
string
required
e.g. USDT
forceRefresh
boolean
optional
true to bypass cache
Request body
Response
Response will appear
here...
POST/rates/refreshBearerForce-refresh the
cached rate for a specific trade pair.
Request body
Response
Response will appear
here...
Invoices
Amount fingerprinting: always display
amountFingerprint.finalExpectedAmount — not the raw quoted amount. The customer
must send the exact fingerprinted amount.
POST/invoicesBearer / API
keyCreate a crypto invoice. Returns payment URL, exact
crypto amount, and fingerprint data.
GET/invoices/reference/{referenceCode}Bearer / API keyLook up an
invoice by its reference code.
referenceCode
Response
Response will appear
here...
Payment stands
POST/payment-standsBearerCreate a reusable QR
payment stand. Returns publicUrl, printUrl, and base64 QR image.
Request body
Response
Response will appear
here...
GET/payment-standsBearerList all payment
stands for this workspace.
Query string
Response
Response will appear
here...
Webhooks
Deliveries are queued, retried with exponential backoff. Always respond 2xx
immediately. Verify the X-DoronPay-Signature header using your webhook secret.
POST/webhooksBearerCreate a webhook endpoint and generate a signing secret. Secret is shown
only once — save immediately.
POST/billing/bills/{billId}/pay-cryptoBearerCreate a crypto
payment intent for a SaaS bill.
billId + body
Response
Response will appear
here...
Reports
GET/reports/summaryBearer / API
keyAggregated summary — invoice totals, volume by currency,
crypto received, webhook delivery stats.
Query string
Response
Response will appear
here...
Invoice statuses
CREATED
Intent created, not yet monitoring
AWAITING_PAYMENT
Detection registered, waiting for customer
PAYMENT_DETECTED
Transaction seen on-chain, 0 confirmations
CONFIRMING
Confirmation blocks accumulating
PAID
Confirmed, amount within tolerance
UNDERPAID
Confirmed but below expected
OVERPAID
Confirmed but exceeds expected
EXPIRED
Timed out before payment detected
FAILED
Processing or detection error
CANCELLED
Manually cancelled
Amount fingerprinting
Because V1 merchants
share a single wallet address, each invoice gets a tiny deterministic decimal suffix so DoronX can
match an on-chain deposit to exactly one invoice.
Fiat invoiceGHS
1,000.00
Quoted crypto65.123000
USDT
Fingerprint suffix+
0.000401
Customer must send EXACTLY65.123401 USDT
Always display amountFingerprint.finalExpectedAmount — never
the raw quoted amount.
If a customer sends a rounded amount (e.g. 65.12 instead of
65.123401), the deposit may be flagged as AMBIGUOUS and require manual review.