amount field. Credits received after that quote remain in your account.
Check balances and earnings first. Selecting a payout network does not convert or bridge a different balance. If you need another asset or network, complete a separate balance swap before requesting the withdrawal quote.
Prepare your signing wallet and destination
The examples use the published CLI 0.7.1. Start with the CLI setup and free account access. Keep your originalWURK_STATE directory and imported WURK_WALLET reference. The wallet must already be registered to the account whose balance you want to withdraw; a withdrawal request does not register it.
Quote, confirmation, and individual status require that wallet’s free SIWX signature. The CLI obtains and validates each challenge. An API key cannot authorize these three commands. The signing wallet needs no funds to sign these requests.
For example, a Base signer requesting Robinhood USDG still uses
--network base and supplies {"network":"robinhood","asset":"USDG","walletAddress":"YOUR_ROBINHOOD_WALLET"}. An explicit destination is required even when its EVM address matches the Base signer. Robinhood is a payout network, not a supported signing network.
Solana destinations must be on-curve wallet addresses. Supply the owner wallet, not its associated token account (ATA). EVM destinations must be valid receiving addresses; the zero address, payout token contract, and WURK payout sender are rejected.
Check minimums, fees, and token accounts
For Base and Robinhood, WURK estimates the transfer’s network fee, converts it using the ETH/USD price, and rounds up to a stablecoin micro-unit. It is a live estimate, not a fixed percentage. The gross amount must exceed the fee so that
amountNet is positive. Preserve monetary values as decimal strings and review amountGross = feeAmount + amountNet.
Create and fund any required Solana ATA before confirming. The quote includes its mint; requiresAta:true does not mean WURK has checked that the ATA exists. Confirmation rejects missing, invalid, or frozen ATAs. ATA creation is not sponsored and the CLI does not create one automatically. A WITHDRAWAL_ATA_REQUIRED error identifies the missing account and owner wallet. Alternatively, explicitly swap to SOL, wait for completion, and then quote a SOL withdrawal; swap fees and the SOL minimum still apply.
1. Request and review a quote
Savewithdraw-quote.json:
--network base and change the JSON to {"network":"base","asset":"USDC"}. To withdraw Solana SOL with a Base signer, keep "network":"solana" in the JSON and also supply the Solana destination walletAddress; changing only the CLI flag is insufficient.
Inspect the returned data.quoteId, data.network, data.asset, data.walletAddress, data.amountGross, data.feeAmount, data.amountNet, data.requiresAta, and data.expiresAt. Preparing a quote does not reserve or transfer funds. A new quote lasts 60 seconds. An identical request may return data.reused:true with the original expiry; it does not restart that minute.
2. Confirm the saved quote
Savewithdraw-confirm.json, replacing the quote placeholder with data.quoteId:
pending receipt is not a completed payout. The CLI saves the quote and original confirmation intent in its finance state and rejects changed terms or a different key for that quote.
3. Follow the original withdrawal
Savewithdraw-status.json with the original key:
status:"completed" means the command completed. Check data.status and financialOutcome for the transfer itself:
A transaction ID alone does not establish completion. For EVM payouts, missing finality is not proof of finalization. The CLI’s
financialOutcome.settled reflects these distinctions; a quote has financial status prepared.
Recover a timeout or expired quote
After a lost confirmation response, read status with the original key first. If retrying confirmation is appropriate, use the same quote ID, key, wallet, signing network, and saved input. Each CLI invocation obtains a fresh proof. A confirmation already recorded by the server returns the same withdrawal withreplayed:true, including after the quote expires, without another debit.
The CLI permits recovery after expiry when the original confirmation intent was saved locally. If no local confirmation was saved, it rejects an expired quote. A fresh quote is appropriate only after establishing that the earlier quote was never submitted. A WITHDRAWAL_NOT_FOUND response identifies no recorded request for that account/key at the time of the read; it does not by itself settle a concurrent or timed-out confirmation.
Keep the whole state directory and original JSON files. Reimporting a wallet does not reconstruct lost finance state. If the quote or confirmation cannot be recovered, resolve the original request rather than changing the key to bypass the error. Job refund history does not report withdrawal reversals.
Honor error.retryAfterSeconds. New Solana confirmations share a 15-second account cooldown across assets, including admitted requests whose ATA check fails. EVM confirmations have a 30-second cooldown per payout network and reject another active or review withdrawal. Solana also prevents a new withdrawal for an asset with an outstanding transfer or unresolved failed transfer. At most ten unused, unexpired quotes may exist; wait on WITHDRAWAL_QUOTE_RATE_LIMIT. For WITHDRAWAL_QUOTE_BUSY, wait the returned delay and retry the quote with a fresh proof.
Read withdrawal history
History can use a saved account API key, unlike individual status:account access. A registered wallet is also supported with --wallet "$WURK_WALLET" --network solana instead of --account.
For another page, save withdraw-page.json using the returned data.nextOffset:
limit defaults to 10 and accepts 1–50. Keep the same limit and follow nextOffset until null. Wait at least ten seconds between withdrawal-history reads for the same account, including empty pages and requests with different credentials. Deduplicate by each row’s id if new activity shifts the pages.
data.withdrawals includes all supported payout networks and withdrawals requested through the website. Quotes alone do not appear. Read each record’s amounts, status, tx, and finalityStatus; history does not move funds or authorize a replacement.
See the withdrawal API reference for exact fields and errors, earnings API for earned income, and swap API for balance conversions.