Skip to content
RugWard
☰ Menu

RugWard Pay

Statuses, confirmations and payment proofs

The invoice lifecycle in detail: when an invoice counts as paid, what underpaid, overpaid, late and expired mean, how refunds work, and how to share a payment proof.

On this page

Lifecycle at a glance#

text
open ──(payment seen)──▶ pending ──(enough confirmations, full amount)──▶ paid / overpaid
  │                        │
  │                        └─(quote expired + 10 min grace, still short)──▶ underpaid
  ├─(nothing arrives before expiry)──▶ expired
  ├─(payment seen only after quote expiry + 10 min)──▶ late
  └─(merchant cancels, no payment yet)──▶ canceled

Status reference#

StatusDashboard labelMeaningWhat to doFinal?
openAwaiting paymentCreated; no payment seen yet.Wait.no
pendingPayment detected, confirmingA payment was seen but is not confirmed yet, or only part of the amount arrived while the rate lock is still running (the buyer can send the rest).Wait. Do not ship yet.no
paidPaidConfirmed payments cover the quoted amount (see tolerance below).Ship.yes
overpaidPaid (more than requested)Paid, and more than 1% above the quoted amount.Ship; refund the extra from your wallet if you want to.yes
underpaidUnderpaidThe rate lock (plus 10 minutes grace) ended with less than the amount confirmed.Contact the buyer: ask for the difference or refund.yes
latePaid after expiryPayment arrived only after the quote expired plus 10 minutes.Check the amount and today's rate, then decide: accept, ask for the difference, or refund.yes
expiredExpiredNothing arrived in time.Create a new invoice if the buyer still wants to pay.yes
canceledCanceledYou canceled it before any payment.—yes

Every change of status creates one webhook event (invoice.pending, invoice.paid, …). See Webhooks.

For the coin the buyer chose, RugWard adds up the confirmed payments that were seen before the quote expired plus 10 minutes of grace (so a transaction broadcast just before the deadline still counts). The invoice is:

  • paid when that total is at least the quoted amount minus a small tolerance: the unique-amount offset plus 0.1% (covers wallets that round the last digits);
  • overpaid when it is more than 1% above the quoted amount.

Amounts in different coins are never added together. On Base, where the 0.5% is split on-chain, the check is made on the 99.5% that reaches you.

Confirmations#

NetworkRequired
Bitcoin1
Monero10
Ethereum12 blocks
Base30 blocks
Arbitrum60 blocks
BNB Chain15 blocks
Polygon32 blocks
Solanafinalized commitment

How RugWard detects payments#

CoinDetected automatically byBuyer can also paste
Bitcoinscanning your address for the exact unique amounttransaction id
USDC / USDT on EVM chains (no splitter)token Transfer events with the exact unique amounttransaction hash
ETH / BNB (no splitter)the transaction hash (sent automatically by the wallet button)transaction hash
ETH / USDC on Base (splitter)the splitter's Paid event carrying this quote's reference, your address, the token and a fee of exactly 0.5%transaction hash
SOL / USDC / USDT on Solanathe Solana Pay reference keytransaction signature
Monerothe transaction id plus the tx key, or your view key (two public nodes must agree)transaction id (+ tx key)

Protections built into detection:

  • One transaction pays one invoice. A transaction can be credited only once per network and recipient address.
  • No front-running. A transaction hash pasted by someone else is only accepted if it matches this quote's exact unique amount or carries this quote's reference.
  • No old transactions. A transaction mined before the quote was created cannot pay it.
  • A pasted transaction with a different amount is refused with "Contact the merchant with the transaction id"; the merchant settles it by hand.
  • The rate is computed only on the server; the buyer's browser never supplies a price.

Refunds#

RugWard Pay is non-custodial: the money is already in your wallet, so RugWard cannot refund, reverse or charge back anything. To refund a buyer, send the coins back yourself from your wallet, ideally to an address the buyer gives you (not automatically to the sending address: it can belong to an exchange). Keep the invoice id and the transaction links for your records.

Payment proofs#

Every paid or overpaid invoice has a public, shareable proof page at https://rugward.com/pay/proof/<invoice id> (also as JSON at /api/pay/proof/<invoice id>). It shows the amount in USD, the merchant, when it was confirmed, the quoted coin amount and rate with its price sources, the receiving address, and every confirmed transaction with an explorer link. Anyone can re-check those transactions on the public blockchain.

A payment proof
A payment proof (a Sepolia TEST payment; address and transaction blurred in this screenshot)

Proof pages are not indexed by search engines. For unpaid invoices there is no proof (404).

Expiry in detail#

  • Invoice expiry (15 minutes to 7 days): after it, no new rate can be locked.
  • Quote (rate lock) expiry: 30 minutes after the buyer picks a coin. If fewer than 5 minutes remain, picking the same coin again locks a new rate.
  • Grace: payments seen up to 10 minutes after the quote expired still count normally.
  • An invoice turns expired only after both the invoice and its last quote (plus grace) have ended without a payment.

Last updated: October 30, 2026

Statuses, confirmations and payment proofs · RugWard Documentation | RugWard