Skip to main content
When you have accumulated funds in your Hypertron virtual balance, you can withdraw them to any Stellar wallet address at any time. Hypertron verifies your available balance, marks the spent nullifiers on the Soroban contract, then routes the payout through the Privacy Relay Layer — a multi-hop system that breaks on-chain graph correlation between incoming and outgoing funds.
Withdrawals settle to a Stellar G… address. This can be your personal wallet, a custodial exchange address, or any valid Stellar account that has been activated (minimum 1 XLM reserve).

Withdraw from the dashboard

Navigate to Dashboard → Withdraw (/dashboard/withdraw). You must have your Freighter wallet connected to load this page.
1

Open the Withdraw page

Click Withdraw in the left sidebar. The page automatically loads your business profile and available virtual balance.
2

Enter the withdrawal amount

Type the amount in XLM you want to withdraw. The amount must not exceed your available virtual balance — the sum of all paid, unspent payment links attributed to your business.
Your virtual balance reflects received payments minus any previously completed withdrawals. It is not the same as a Stellar account balance. If you do not see the expected balance, make sure the payment link was marked as Paid in the dashboard before requesting a withdrawal.
3

Enter the recipient Stellar address

Paste the Stellar address where you want to receive funds. The address must:
  • Start with G
  • Be exactly 56 characters long
  • Belong to an activated Stellar account
You can set a default Receive address in Dashboard → Settings so it pre-fills automatically on this page.
4

Submit the withdrawal

Click Withdraw. Hypertron immediately validates your balance and address, then begins processing. You will see a status indicator while the Privacy Relay routes the payout.
5

Receive confirmation

Once the payout completes, the withdrawal row in your history updates to Completed and displays the payout transaction hash. The corresponding amount is deducted from your virtual balance.

What happens behind the scenes

When you submit a withdrawal, Hypertron executes a two-phase process: Phase 1 — Nullifier settlement Hypertron selects the minimum set of unspent payment nullifiers that cover your requested amount, in order from most recent to oldest. It calls the Soroban PoolManager contract to mark these nullifiers as spent. This prevents any double-withdrawal of the same funds and maintains an auditable on-chain record. Phase 2 — Privacy Relay payout Hypertron forwards the payout request to the Privacy Relay Layer, which:
  1. Creates a one-time ephemeral wallet not linked to any previous account
  2. Routes the funds through multiple hops with randomised timing
  3. Applies a small amount jitter (±0.000001 XLM) to frustrate amount-matching analysis
  4. Sends the final transfer from the ephemeral wallet to your recipient address
The result is a payout that cannot be graph-correlated back to the original client payments on-chain.
Your virtual balance

Nullifiers marked on Soroban PoolManager (on-chain, verifiable)

Privacy Relay  →  ephemeral wallet  →  multi-hop routing

Your recipient address receives XLM  ✔

Withdraw via the API

You can also request withdrawals programmatically using the REST endpoint.

Request

curl --request POST \
  --url https://your-domain/api/withdraw \
  --header 'Content-Type: application/json' \
  --data '{
    "businessId": "YOUR_BUSINESS_ID",
    "amount": "500",
    "recipientAddress": "GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  }'

Request body fields

businessId
string
required
Your Hypertron business ID. Find it in Dashboard → Settings.
amount
string
required
Amount in XLM to withdraw. Must be a positive decimal number (e.g. "500" or "123.45"). Cannot exceed your available virtual balance.
recipientAddress
string
required
The Stellar address to receive the funds. Must start with G and be exactly 56 characters.

Response

A successful withdrawal returns HTTP 200 with the following body:
{
  "withdrawalId": "wd_clx9z2a0f000008js...",
  "status": "completed",
  "amount": "500",
  "recipientAddress": "GXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "contractTxHash": "a1b2c3d4e5f6...",
  "payoutTxHash": "f6e5d4c3b2a1..."
}
withdrawalId
string
Unique ID for this withdrawal record. Use it to look up the withdrawal in your dashboard or via GET /api/withdraw?businessId=....
status
string
completed when the payout has been sent. failed if either the contract step or payout step encountered an error.
contractTxHash
string
The Stellar transaction hash for the on-chain nullifier settlement. Verifiable on any Stellar block explorer.
payoutTxHash
string
The Stellar transaction hash for the final payout transfer to your recipient address.

Retrieve withdrawal history

Use a GET request to list all withdrawals for your business:
curl "https://your-domain/api/withdraw?businessId=YOUR_BUSINESS_ID"
Returns an array of withdrawal objects with id, amount, recipientAddress, status, payoutTxHash, contractTxHash, and createdAt.

Common errors

Error: Insufficient virtual balance. Available: X.XXXX XLM, requested: YYour requested amount exceeds the unspent balance across your paid payment links. Either wait for more payments to arrive, or reduce the withdrawal amount to be at or below the stated available figure.
Error: Valid Stellar recipient address (G...) requiredThe address you provided is not a valid Stellar public key. Make sure the address:
  • Starts with the letter G
  • Is exactly 56 characters long
  • Contains no spaces or extra characters
Error: Valid amount required or Amount must be a positive numberThe amount field must be a numeric string representing a positive decimal (e.g. "100" or "50.25"). Zero, negative, and non-numeric values are rejected.
Error: Business not foundThe businessId you provided does not match any registered business. Verify your business ID in Dashboard → Settings.
Error: Payout failed (nullifiers already marked on-chain): ...The nullifier settlement succeeded on-chain but the Privacy Relay payout failed. Contact Hypertron support with your withdrawalId. Because the nullifiers are already marked, your virtual balance will show those funds as spent — the Hypertron team can manually resolve the payout.