Refund Policy
Veral certificates are paid issuances. When we cannot deliver the certificate you paid for, we refund the on-chain USDC payment to the wallet that sent it. Three refund-eligible cases and one non-refundable case are named below, alongside the SLA we hold ourselves to.
What we refund
Three named cases. Each one has an internal audit code; if you email support quoting the code you see in your cert request, the treasurer is looking at the same row.
- Case 1audit: issuance refusedWe refused to issue.Veral runs the engine, the engine determines the subject is too thin to certify or sources erred out, we refuse the issuance. Your USDC is refunded within 5 business days, treasury-side; you don't need to ask.
- Case 2audit: payer_wallet_mismatchThe payment couldn't be applied.The on-chain payer wallet doesn't match the customer wallet you typed, or the amount didn't match the quote. Same 5-day refund window.
- Case 3audit: stuck-row sweep refusedOur infrastructure failed mid-flight.The stuck-row sweeper caught your request and we couldn't deliver. Same 5-day refund window.
What you will see
- Your cert request status reads REFUSED or ABANDONED.
- We track refunds-owed in our audit log automatically — no action needed from you.
- The refund is sent from the Veral treasury wallet to the on-chain payer address recorded in the PaymentReceived event.
When you will get it
On Sepolia (testnet), refunds are completed within 5 business days of detection. Detection happens automatically the moment a paid request reaches a terminal non-issued state; the refund itself is a manual treasury action while we are on Sepolia testnet.
| Metric | Today |
|---|---|
| Detection to settlement | ≤ 5 business days |
| Refund channel | Same wallet, same chain, same token |
If your refund does not arrive
- Email refund@veral.tech with your request id and your wallet address.
- Include the payment transaction hash so we can match against the captured payment record on the first triage pass.
What we don't refund
A refund covers USDC payments Veral captured but cannot settle into a certificate. It does NOT cover on-chain costs you paid before that capture happened.
- Gas you paid to attempt a malformed transaction we rejected before crediting it.The wallet handshake costs gas regardless of outcome, and the malformed transaction was rejected by the webhook before the USDC moved to us, so there's nothing to refund on our side. The pre-flight checks on /cert/new are there to prevent this. (If gas was paid and the USDC DID land with us, that's case 2 above and we refund the USDC.)
Why we do not auto-refund
Refunds for testnet certificates are rare enough that manual settlement is the appropriate posture: an on-chain refund contract able to send the treasury USDC needs the same custody review as the deploy key, and Sepolia volume does not justify that surface yet. Auto-refund infrastructure is on the roadmap when volume justifies it.
We store the country and region of cert purchases (derived via Vercel edge from request IP) for aggregate analytics. We do not store the IP address or city-level location.