Skip to content

Troubleshooting

Common issues and resolutions for Bullpen CLI users. Use this reference when the user reports a problem that does not require a code change — deposit delays, wrong asset sent, account access, CLI errors.

JSON Fields To Inspect

When a command supports --output json, prefer structured fields over prose. Read recovery.next_action or recovery_plan.next_action first. Use wallet_readiness for the on-chain/current trading-wallet state and clob_readiness or clob_route_readiness for order credit or CLOB route checks. support emits clob_readiness; polymarket wallet-audit emits clob_route_readiness. A status such as user_action_available, diagnostic_required, or backend_only describes the state; resolution_owner should identify who can act, such as user or bullpen_support. If the CLOB readiness object has terminal: true and resolution_owner: "bullpen_support", stop retrying money-moving commands and attach the support bundle named in support_artifact. This file is on this machine and has not been uploaded. selected_wallet, selected_wallet_route, and the readiness object's selected_wallet identify the Polymarket wallet Bullpen will use for trading.

For auth failures, inspect auth_incident before recommending login. Use stage, safe_to_retry, resolution_owner, next_command, and support_code. A local attempt_id is support correlation for this CLI run, not proof of browser or provider correlation. When safe_to_retry is false and next_command is bullpen support, do not repeat login or request another email code; create the support artifact and tell the user it remains local until attached.

Error Recovery Quick Reference

Error Message Likely Cause Fix
"Polymarket returned 401 Unauthorized" Stale session, old CLI version, or Polymarket auth rejection Run bullpen status --output json and bullpen doctor auth --refresh --output json, then bullpen upgrade if stale. Live: use bullpen polymarket approve --yes only when preflight or the failing command reports missing approvals.
"Insufficient pUSD balance" or "not enough balance" Have USDC but not pUSD bullpen polymarket preflight, then bullpen polymarket wrap <amount> --preview --output json; Live: bullpen polymarket wrap <amount> --yes
"balance: 0, order amount: N" Same — USDC not wrapped to pUSD bullpen polymarket wrap <amount> --preview --output json; Live: bullpen polymarket wrap <amount> --yes
Native-USDC pre-swap reports not_submitted, submission_unknown, unproven movement, or output below minimum The managed conversion did not start, its outcome is ambiguous, or the proven USDC.e output is unsafe Do not retry blindly or adjust price. Follow the emitted read-only next_command; not_submitted uses bullpen funds diagnose-deposit --chain polygon --token usdc --output json. Human and JSON output report the same owner, submission state, retry safety, and next action. Older text-only compatibility output is marked classification_source: "legacy_string_fallback" in JSON.
"Polymarket CLOB API-key creation failed (HTTP 403)" Polymarket API-key creation is behind a Cloudflare browser challenge Visit polymarket.com with the connected wallet, open Settings -> API Keys, create an API key, then rerun the CLI command
"Polymarket submission reports degraded service (STATE_FAILED)" Position-specific on-chain-state failure or Polymarket state rejection Run bullpen upgrade, then inspect the matching dry-run or diagnostic JSON before any repeat live submit. For redeem, use bullpen polymarket redeem --dry-run --output json; for other relayer flows, keep the emitted JSON error. If the upgraded CLI still returns STATE_FAILED, capture error_code, trace ID, condition ID, dry-run JSON, and live-submit JSON for support. Do not keep retrying the same live submit.
Safe GS013 or safe_inner_call_revert Safe/proxy inner transaction execution reverted after Polymarket accepted the transaction Do not auto-switch wallets. Capture --output json, trace ID, wallet address/kind, Bullpen-managed 0x wallet, and command output; escalate to support for Safe/proxy recovery.
"Polymarket submission reports degraded service (rate limited)" Polymarket/Cloudflare rate limiting Retry in a few minutes
polymarket_relayer_submit_outcome_unknown, post_submit_reconciliation, or a redeem submit HTTP 5xx The request was submitted, but the CLI cannot prove whether Polymarket accepted or settled it Do not retry automatically. Run bullpen polymarket redeem-status <operation-id-or-tx-or-trace> --output json with the redeem operation ID, raw tx hash, or exact trace ID from the original output. If the result is still pending, missing evidence, reverted, wrong-wallet, or contradictory, file support with the JSON and attempt fingerprint; do not treat this as a wallet, approval, or login repair.
"Polymarket is currently experiencing issues" or "polymarket_status" Polymarket status page reports a degraded CLOB/API/RPC/auth component while Polymarket rejected the request Retry in a few minutes and check https://status.polymarket.com
"Polymarket account trading mode: Closed-only" Polymarket reports this authenticated account as closed-only; this is not an IP or legal-eligibility finding Run bullpen doctor auth --output json, contact Polymarket support, and include Bullpen diagnostics if filing a Bullpen ticket
direct_clob_ip_blocked: true or a blocked direct CLOB request Polymarket reports the current request IP/network path as blocked Review Polymarket's geographic restrictions guidance or contact Polymarket support. Do not treat Bullpen routing as an eligibility workaround.
"market not found" Slug changed or market resolved bullpen polymarket search <query> to find the current slug
POLYMARKET_MARKET_RESOLVED, market_state: "market_resolved", or market_state: "closed_or_resolved" The market is resolved/closed; preview did not submit or get rejected by CLOB If the user may hold outcome tokens, run bullpen recover redeem --dry-run --output json. For zero-payout accounting, run bullpen polymarket closeout --scope lost --dry-run --output json. Do not retry sell --max --min-price 0 against the old CLOB book.
POLYMARKET_ORDERBOOK_UNAVAILABLE or market_state: "orderbook_unavailable" There is no active CLOB book for that outcome Run bullpen polymarket discover or wait for a live orderbook. If the market is resolved and the user holds tokens, use the redeem dry-run instead of a sell preview.
"Price X is outside the valid range for this market" Price doesn't match market tick size bullpen polymarket price <slug> to check tick size, adjust price
"Price has N decimal places, but tick size allows M" Too many decimals for tick size Round price to tick size precision
"Minimum order size" Below the market's current minimum order size Increase the order size so it meets the market's current minimum order size
"CLOB authentication failed" JWT expired, stale local session, or old CLI version Run bullpen status --output json, bullpen doctor auth --refresh --output json, then bullpen upgrade. Re-login only when diagnostics report an expired refresh token, AUTH_REFRESH_REJECTED_LOGIN_REQUIRED with requires_login: true, or another login-required state. Do not add separate credentials as a normal customer workaround.
AUTH_REFRESH_PERSISTENCE_FAILED Refresh failed closed because rotated credentials were missing, blank, or could not be saved and read back durably Stop unattended commands, keep the same BULLPEN_HOME, make sure the Bullpen home is writable, and run bullpen doctor auth --output json before retrying money-moving commands.
AUTH_REFRESH_REJECTED_LOGIN_REQUIRED Active refresh returned requires_login: true Run bullpen login; this is the auth failure class that needs a human device login.
AUTH_REFRESH_TRANSIENT_FAILURE Refresh failed due to a retryable network or service problem Retry the command before starting a new login.
AUTH_VERIFY_EMAIL_OTP_REQUEST_OUTCOME_UNKNOWN The email-code request was sent once, but its service outcome is unknown; the CLI did not replay it Run bullpen support bundle --output json. The generated artifact is local to this machine and is not uploaded automatically; attach it only to the Bullpen support ticket. Do not request another code or repeat login until support inspects the attempt.
AUTH_DEVICE_LOGIN_RETRY_BUDGET_EXHAUSTED or AUTH_DEVICE_LOGIN_TERMINAL_STATE Device login exhausted its bounded poll window or the service reported a terminal attempt Follow auth_incident.next_command; when it says support is required, run bullpen support bundle --output json. The generated artifact is local to this machine and is not uploaded automatically; attach it only to the Bullpen support ticket instead of starting another login loop.
signing_capability.signing_capability: "turnkey_resource_missing" Credentials decrypt, but the active signer cannot sign through the needed Turnkey path Run bullpen doctor auth --output json, then bullpen support. Do not loop on bullpen login unless the diagnostic says login_required.
Account change reports auth was rejected and was not retried A state-changing account request, such as email-code send, wallet import, wallet deploy/reregister, tracker change, or copy-trading change, may have reached Bullpen before auth was rejected Run the emitted next_action diagnostics and inspect account/order state before any manual retry.
Pear pair read reports the session is missing or expired Pear pair reads need a cached Pear session and the CLI did not refresh it during the read Non-runnable: run bullpen hl pair login --yes only when the Pear auth challenge is available and intended, then rerun the read. Do not run live setup unless pair status or pair setup --preview reports setup is incomplete.
Pear pair write reports auth was rejected after submission Pear rejected auth after a live Pear write request was submitted Inspect bullpen hl pair positions --output json and bullpen hl pair orders --output json before retrying.
Redeem reports auth was rejected and the CLI did not retry Bullpen could not prove the submitted state was safe to repeat Run bullpen doctor auth --output json, then inspect redeem-status or fresh redeem dry-run and wallet audit output before retrying manually.
"Turnkey sign_raw_payload Internal" Keypair mismatch, expired signing session, or local keypair problem Run bullpen status --output json and bullpen doctor auth --output json; re-login only when diagnostics report login is required, and use bullpen logout --force only when diagnostics/support identify local credential reset as the recovery.
AUTH_CREDENTIALS_FILE_CORRUPT, "credentials.json.enc could not be decrypted", or "credential_salt.bin missing/corrupt" Local credentials file is corrupt, missing its matching salt, or no longer matches credential_salt.bin Run bullpen login to start a fresh session; it moves unreadable local auth files aside before re-authenticating. Run bullpen doctor auth --output json first if you need support to inspect copied-home state. Restore the matching salt first only if you need to keep the old local session. Use bullpen logout --force only as a last-resort local reset.
AUTH_TURNKEY_KEYPAIR_UNREADABLE or "Local Turnkey keypair is unreadable" Local encrypted Turnkey keypair file is corrupt or unreadable Run bullpen doctor auth --output json first and preserve it for support; run bullpen login only when diagnostics report login is required, and use bullpen logout --force only when diagnostics/support identify local credential reset as the recovery.
"Could not find any resource to sign with. Addresses are case sensitive" (Turnkey 404 on polymarket approve / deploy-deposit-wallet / signing paths) Older CLI build did not normalize wallet-address casing before signing, or the account needs server-side Turnkey repair Run bullpen upgrade and retry. If bullpen doctor auth --output json still reports resource missing / exit 14, open a support ticket for Turnkey account repair.
"spender 0xa2a3D49C...64c8 is not in the allowed list" on polymarket approve (Safe/Proxy wallets) Older CLI build sent an approval that Polymarket rejects for Safe/Proxy wallets Run bullpen upgrade, then bullpen polymarket approve --check; Live: retry approval with bullpen polymarket approve --yes only if still missing.
"After bullpen logout && bullpen login, balance shows $0 / old Safe/Proxy address" Stale or inconsistent wallet routing Run bullpen upgrade; current builds refresh wallet-routing evidence and fail closed when server evidence is inconsistent. If balances or wallet kind still look wrong, run bullpen polymarket wallet-audit --refresh --include-order-credit --output json and bullpen support bundle --output json. Both outputs stay on this machine until you choose to attach them to the Bullpen support ticket.
"Wallet-routing disagreement" Selected Polymarket wallet and refreshed wallet-audit evidence disagree, or wallet-routing data is stale/inconclusive Run bullpen polymarket wallet-audit --refresh --include-order-credit --output json for refreshed evidence. Do not retry with --wallet as a bypass; it does not override Safe/Proxy vs Deposit Wallet server selection or wallet-routing safety checks. Run bullpen support bundle --output json for the broader support context. Both outputs stay on this machine until you choose to attach them to the Bullpen support ticket. Run bullpen polymarket wallet select --kind <safe|proxy|dw> --yes only if support confirms the exact intended kind, then bullpen polymarket activate --yes if needed. Passive bullpen status cannot confirm or clear this disagreement.
PM_LEGACY_DEPOSIT_WALLET_PENDING_RECOVERY Legacy pre-beacon Deposit Wallet evidence is present Run bullpen recover funds --dry-run --output json. Submit only when the root status is ready, every executable leg has outcome supported, and legs[].effective_evidence.submit_authorized is true. Routing-only paths are backend_only or unknown. Do not advise wallet switching or repeated setup commands as recovery.
POLYMARKET_RELAYER_WALLET_NOT_REGISTERED or "wallet registry validation failed" Polymarket rejected the Bullpen-selected wallet as externally unregistered; internal deployed or allowed status cannot override that rejection Run bullpen support bundle --output json and attach the generated artifact. This file is on this machine and has not been uploaded. Do not retry approve, activate, wallet selection, registration, or money movement until Bullpen support confirms the external route is repaired.
"Safe / Proxy / Deposit Wallet / missing funds confusion" Funds may be on an owned Polymarket wallet outside the active trade path Run bullpen recover funds --dry-run --output json first. Submit with bullpen recover funds --yes only when the root status is ready, every executable leg has outcome supported, legs[].effective_evidence.submit_authorized is true, and source identity, destination identity, route, and exact transfer details match the user's intent. If it reports unsupported, backend_only, or unknown, run bullpen support bundle --output json. Treat safe_to_retry as post-live-submit retry evidence only. Recovery never changes selected wallet.
"Wallet account not found" Server-side registry doesn't recognize your wallet Run bullpen polymarket wallet-audit --refresh --include-order-credit --output json and bullpen support bundle --output json. Both outputs stay on this machine until you choose to attach them to the Bullpen support ticket. Use legacy bullpen polymarket wallet check only if Bullpen support asks for old-format output.
"Portfolio total looks roughly 100x too big" (Hyperliquid Perps) Older CLI build trusted stale portfolio values over native preferred values Run bullpen upgrade, then recapture bullpen portfolio overview --output json and bullpen hl status --output json. Current builds prefer native Hyperliquid portfolio values; include the refreshed diagnostics if you contact support.
"take-profit price must be above/below the entry reference" or "stop-loss price must be above/below the entry reference" Hyperliquid entry bracket TP/SL is on the wrong side of the mark or limit price Preview with bullpen hl long <COIN> --notional <USD_NOTIONAL> --tp <PRICE> --sl <PRICE> --preview and adjust TP/SL to the correct side before live submission.
HYPERLIQUID_BUILDER_OVERRIDE_DISABLED or "Hyperliquid builder override is disabled" Builder attribution override flags were passed without the required support direction Remove --builder-address / --builder-fee-bps, or set BULLPEN_HYPERLIQUID_ALLOW_BUILDER_OVERRIDE=1 only if Bullpen support instructed you to use this override.
"Stranded ERC-20 on Safe/Proxy (USDC.e / USDe / pUSD / WMATIC/POL) with no MATIC for gas" Wrong-token or wrong-chain deposit landed on the Safe/Proxy wallet Run bullpen funds diagnose-deposit --tx <TX_HASH> --chain <CHAIN> --token <TOKEN> --address <RECIPIENT_ADDRESS> and bullpen polymarket wallet-audit. Bullpen support may direct bullpen polymarket sweep-stranded --token <TICKER> --amount <AMOUNT> --yes for Safe/Proxy-held ERC-20 funds, including wrapped POL/WMATIC at 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270, or bullpen polymarket sweep-signer-eoa --yes for CLI-proven locally signable owned EOA funds. Native POL is different: use bullpen polymarket sweep-native-pol only for Deposit Wallet sources; Safe/Proxy native POL requires Bullpen support. Private-key export is not the default recovery path and should be used only if Bullpen support explicitly directs it.
"No sellers/buyers available" Illiquid market or empty orderbook Try a limit order, or wait for liquidity

Wallet-Routing Repair

Treat wallet-routing disagreement output as a routing-safety stop, not as a prompt to retry with a different flag. --wallet <BULLPEN_0X_WALLET> chooses a Bullpen-managed 0x wallet only; it does not override the selected Safe/Proxy vs Deposit Wallet route or bypass wallet-routing safety checks.

Treat requires_state_inspection: true in JSON as a hard stop for unattended live retry. The CLI deliberately avoided replaying a non-idempotent command; run the provided diagnostics and inspect state before any manual retry.

Non-runnable support checklist: the first two commands collect evidence. Run the Live: lines only after Bullpen support confirms the intended server wallet kind and the account needs activation.

# 1. Refresh the authoritative audit first
bullpen polymarket wallet-audit --refresh --include-order-credit --output json

# 2. Cross-check local/server/on-chain wallet evidence for support
bullpen doctor wallet --output json

# **Live:** after Bullpen support confirms the intended server wallet kind
bullpen polymarket wallet select --kind <safe|proxy|dw> --yes

# **Live:** if the selected wallet has never traded, create CLOB credentials/approvals
bullpen polymarket activate --yes

Do not run wallet select --kind from audit output alone. For support handoff, attach the refreshed wallet-audit/doctor-wallet JSON and the output from bullpen support bundle --output json. These files are local to this machine and are not uploaded automatically. Attach them only to the Bullpen support ticket, then run selection only after Bullpen support confirms the exact intended wallet kind. Useful JSON fields to surface when present are l2_status, disagreements[], hints[], and the server-selected wallet kind/address.

Polymarket Auth Note

For valid logged-in accounts, normal Polymarket trading and gasless transaction paths use the user's login session rather than separate customer-managed credentials. When auth fails, diagnose the session with bullpen status --output json and bullpen doctor auth --refresh --output json, then upgrade. Re-login only when diagnostics report an expired refresh token, AUTH_REFRESH_REJECTED_LOGIN_REQUIRED with requires_login: true, or another login-required state.

Full Account Reset

Use a full account reset only as a last resort after capturing current auth diagnostics:

Fixture-gated support evidence: preserve this diagnostic output before any local reset.

bullpen status --output json        # Check cached login/session state first
bullpen doctor auth --output json   # Preserve this output for support before reset

Run the reset only when status and doctor auth report login/reset recovery is required, or when support confirms that local credential reset is the recovery path:

Non-runnable sequence: this reset has no preview mode. Execute it only under the condition above, then stop if diagnostics still report account-side errors.

bullpen logout --force              # Clear all local credentials + keypair
bullpen login                       # Fresh login with new credentials
bullpen polymarket approve --check  # Read-only approval evidence
bullpen polymarket approve --yes    # Live: only if the check reports missing approvals
bullpen polymarket preflight        # Verify everything works

This only resets local credentials and keypair state. It does not repair server-side Turnkey resources, wallet routing, KYC/cash-out, or copy-executor state. Do not run it repeatedly if doctor auth still reports server-side or account-state errors after one reset.

1. Deposit Not Showing

The most common support issue. Deposits go through a bridge and may take 5-15 minutes to appear.

What to check first:

# Open the web app — always use this for deposits
bullpen deposit

# Check your current pUSD trading balance
bullpen polymarket clob balance

# Check your full Bullpen portfolio
bullpen portfolio balances

Polymarket wallet and pUSD trading balance distinction:

Bullpen uses two layers of balance: - Server-selected Polymarket wallet — Deposit Wallet, Safe, or Proxy, verified with bullpen polymarket wallet-audit --refresh --include-order-credit --output json; passive bullpen status does not resolve it - pUSD trading balance — funds available for placing orders on Polymarket

USDC must be wrapped to pUSD before trading. Freshly wrapped pUSD can take a few minutes to appear in the CLOB trading balance.

If pUSD is on-chain but not in the trading balance:

Run the sync command to pull on-chain balance into the CLOB. This command has no preview mode, so treat it as a non-runnable support fixture. Run it only for the affected account after wallet-audit --refresh --include-order-credit confirms pUSD is on the server-selected Polymarket wallet and missing from CLOB order credit.

Non-runnable support example:

bullpen polymarket clob update-balance

If still not visible after sync, rerun bullpen polymarket wallet-audit --refresh --include-order-credit --output json and follow the recommended consolidate or support path.

If the deposit was made via fun.xyz (web app):

Check the fun.xyz status page — delays there are outside Bullpen's control.

If funds are still missing after 30 minutes:

File a support ticket with your deposit transaction hash: https://bullpen-help.freshdesk.com/support/tickets/new

Prevention: Always use bullpen deposit which opens the web app with proper asset validation and routing. Never send funds directly to a raw address.

2. Wrong Asset, Chain, or Address

ETH sent to proxy wallet (instead of USDC on Polygon):

Do not default to exporting or importing private keys. Start with read-only deposit triage and wallet audit:

bullpen funds diagnose-deposit --tx <TX_HASH> --chain <CHAIN> --token <TOKEN> --address <RECIPIENT_ADDRESS>
bullpen polymarket wallet-audit --refresh --include-order-credit --output json

For support handoff, also run bullpen support bundle --output json. The diagnostic outputs and bundle stay on this machine until you choose to attach them to the Bullpen support ticket. Support may direct bullpen polymarket sweep-stranded for Safe/Proxy-held ERC-20 funds or bullpen polymarket sweep-signer-eoa for CLI-proven locally signable owned EOA funds when those commands fit the asset and chain. For 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270, treat the asset as wrapped POL/WMATIC ERC-20, not native POL. Native POL is recovered with bullpen polymarket sweep-native-pol only from Deposit Wallet sources; Safe/Proxy native POL recovery requires Bullpen support. Private-key export is not the default recovery path and should be used only if Bullpen support explicitly directs it.

Wrong token sent to a Bullpen wallet:

Use the same safe recovery path: bullpen funds diagnose-deposit --tx <TX_HASH> --chain <CHAIN> --token <TOKEN> --address <RECIPIENT_ADDRESS>, then bullpen polymarket wallet-audit --refresh --include-order-credit --output json, then bullpen support bundle --output json. These outputs stay on this machine until you choose to attach them to the Bullpen support ticket. Do not export/import private keys unless Bullpen support explicitly directs it.

USDC vs pUSD:

Polymarket trading uses pUSD collateral. If USDC is in the wallet, preview the wrap first with bullpen polymarket wrap <amount> --preview --output json; Live: execute with bullpen polymarket wrap <amount> --yes. If a different bridged or exchange-specific asset was sent, use the Bullpen web app or contact support before trying to trade with it.

Prevention: Always use bullpen deposit which opens the web app with proper asset validation. The web app enforces correct token and chain selection.

3. Transfer Between Wallets

Bullpen manages several wallet types: - Solana wallet — for Solana-based activity - EVM wallet (Polygon / Arbitrum / Hyperliquid) — for EVM chains - Polymarket trading wallet — the Deposit Wallet, Safe, or Proxy selected for your Bullpen account

How to transfer between wallets:

Use bullpen wallet transfer --network solana|hyperliquid --asset USDC for same-chain USDC transfers between visible Bullpen-managed Solana or Hyperliquid accounts. Preview first with --preview --output json; live submission requires --yes.

Use the Bullpen web app for cross-chain transfers between Bullpen-managed accounts. Cross-chain transfer is not available in the CLI.

Use bullpen deposit to open the web app with correct per-chain routing. The retired address-only deposit flow is not available because it could silently route funds to the wrong account.

Solana to Polymarket:

The web app does not bridge Solana USDC directly to Polygon. Swap to USDC on Solana first, then use the web app bridge to Polygon.

Use the web app for external deposit, withdrawal, and broad bridge flows. The CLI funds namespace currently exposes the balances view only; managed same-chain USDC transfers live under wallet transfer.

Unsupported destination-token guard:

The CLI blocks pUSD or USDe withdrawals to known exchange deposit addresses that may not support those tokens. Safer choices are to unwrap or swap to USDC first, or send to a self-custody ERC-20 wallet you control. If you intentionally accept the risk, rerun with --i-confirm-destination-supports-token only after verifying the destination supports the exact token on that chain.

4. Duplicate Proxy Wallets

If bullpen polymarket doctor (or bullpen doctor auth) shows "Multiple proxy wallets detected":

New-account safeguards reduce duplicate-wallet risk, but existing affected accounts still need Bullpen support to confirm the correct wallet and clean up the duplicate. Contact support with your username: https://bullpen-help.freshdesk.com/support/tickets/new

Do not repeat login to try to change wallet selection. Preserve the diagnostics, run bullpen support bundle --output json, and attach the generated local artifact only to the Bullpen support ticket unless bullpen doctor auth --output json explicitly reports that login is required.

5. Cannot Sell or Close a Position

Sell shows wrong share count:

Refresh the position data first, then preview the sell with the same market, outcome, and share count. Submit only after the preview matches the user's intent.

bullpen polymarket positions
bullpen polymarket sell <SLUG> <OUTCOME> <SHARES> --preview

Live:

bullpen polymarket sell <SLUG> <OUTCOME> <SHARES> --yes

"Market unavailable" error:

The market may be in the resolution period. Wait for settlement and then use bullpen polymarket redeem to claim winnings.

CLI sell hangs or times out:

Upgrade to the latest published version. This updates the local CLI install and has no preview mode, so treat it as a non-runnable setup example.

Non-runnable setup example:

bullpen upgrade

"Approval needed" error:

Check approval status before the first sell on a market, then submit missing approvals after review:

Non-runnable approval example: approve --check is the read-only check; submit the live command only when the check reports missing approvals.

bullpen polymarket approve --check

# **Live:**
bullpen polymarket approve --yes

For web app sell issues:

Try clearing browser cache or use a different browser. The CLOB may also have a brief indexing delay after a recent trade.

6. Account Access Recovery

If the user cannot log in:

  1. Identify which login method was used (Google, X/Twitter, email, or wallet)
  2. Try all linked methods on the login page at app.bullpen.fi
  3. If no method works, contact support with username and email:

Use the Bullpen support portal: https://bullpen-help.freshdesk.com/support/tickets/new

Prevention: Link multiple login methods (e.g., Google + email) via the web app account settings page. This provides a backup if one method becomes unavailable.

Polymarket Account Closed-Only or Direct CLOB Request Blocked

These are separate signals. bullpen doctor auth can report an authenticated Polymarket account trading mode of closed_only; new buy orders are restricted for that account, and the report includes stranded pUSD when it can be read. bullpen polymarket clob geoblock reports Polymarket's result for the current request IP and network path. It does not determine legal eligibility. Bullpen routing does not change Polymarket controls or eligibility. Review Polymarket's geographic restrictions guidance or contact Polymarket support; Bullpen support can help collect diagnostics.

7. USDC on a Polymarket Wallet (Not in CLOB Balance)

This happens when USDC lands on a Polymarket wallet but is not wrapped or synced into the CLOB trading balance.

Step 1: Refresh wallet evidence:

bullpen polymarket wallet-audit --refresh --include-order-credit --output json

Step 2: Run the balance sync only when the refreshed audit shows pUSD on the server-selected Polymarket wallet but missing CLOB order credit:

Non-runnable support example: run the sync only for the affected account after confirming the refreshed wallet-audit evidence.

bullpen polymarket clob update-balance

Step 3: If still stuck, the pUSD balance indexer may be delayed. Wait 10 minutes and retry only after refreshed wallet-audit evidence still shows the same condition:

Non-runnable support example: retry the sync only after waiting for indexer lag and confirming the same affected account.

bullpen polymarket clob update-balance

Step 4: If still unresolved after 20 minutes, run:

bullpen funds diagnose-deposit --tx <TX_HASH> --chain <CHAIN> --token <TOKEN> --address <RECIPIENT_ADDRESS>
bullpen polymarket wallet-audit --refresh --include-order-credit --output json

If the audit reports stranded funds, use bullpen recover funds --dry-run --output json as the first recovery path. Bullpen support may direct expert commands such as bullpen polymarket sweep-stranded for specific stranded-token cases. sweep-stranded --token WMATIC, --token MATIC, --token POL, and the raw 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270 contract refer to wrapped POL/WMATIC ERC-20 only, not native POL. Private-key export is not the default recovery path and should be used only if Bullpen support explicitly directs it.

8. Common CLI Errors

Error message Resolution
"Authenticating with Polymarket..." hangs Upgrade to the latest published version: bullpen upgrade
"Polymarket CLOB API-key creation failed (HTTP 403)" Create the first API key in the browser at polymarket.com -> Settings -> API Keys, then rerun the CLI command
"Polymarket submission reports degraded service (STATE_FAILED)" Run bullpen upgrade, then inspect the matching dry-run or diagnostic JSON before any repeat live submit. For redeem, use bullpen polymarket redeem --dry-run --output json; for other relayer flows, keep the emitted JSON error. If the upgraded CLI still returns STATE_FAILED, capture error_code, trace ID, condition ID, dry-run JSON, and live-submit JSON for support. Do not keep retrying the same live submit.
"Polymarket submission reports degraded service (rate limited)" Retry after the reported delay.
polymarket_relayer_submit_outcome_unknown or a submit HTTP 5xx Do not retry automatically. Reconcile with the emitted diagnostic command, then file support with --output json and the attempt fingerprint if the state is unclear.
"polymarket_status" in a JSON error Polymarket status page reports an outage-shaped issue; retry shortly and include the JSON in support tickets
"no Turnkey credential bundle stored" Run bullpen status --output json and bullpen doctor auth --output json; run bullpen login only when diagnostics report requires_login: true, missing credential recovery, an expired refresh token, or AUTH_REFRESH_REJECTED_LOGIN_REQUIRED with requires_login: true.
"market not found" on redeem Run bullpen upgrade to get the latest published version. If still failing, use --condition-ids with the exact condition ID from bullpen polymarket positions --output json
"CLOB auth failed: 401 Unauthorized" Run bullpen status --output json and bullpen doctor auth --refresh --output json; re-login only if the JSON reports requires_login: true, AUTH_REAUTHENTICATION_REQUIRED, an expired refresh token, or AUTH_REFRESH_REJECTED_LOGIN_REQUIRED with requires_login: true
"Multiple proxy wallets detected" Contact support; service mitigations exist for new accounts, but affected accounts still need support cleanup and confirmation
"onboarding_complete: false" Run bullpen login to re-trigger onboarding flow
"Not authenticated" Run bullpen status --output json and bullpen doctor auth --output json; run bullpen login only when diagnostics say login is required
"Insufficient balance" Check bullpen portfolio balances; use the website deposit flow (bullpen deposit opens app.bullpen.fi)
"Order failed" Run bullpen polymarket preflight to check approvals and balance

USDe balance banner:

bullpen funds balances shows a USDe balance guidance banner when the existing portfolio data reports a non-zero Polymarket/Polygon USDe row. CLI conversion to pUSD is not currently supported; use the Bullpen web app or a Polymarket-supported swap UI.

Routing-wallet probe status:

For bullpen funds balances --output json, routing_wallet_warnings: null only means no non-zero balances were found on the verified probe scope. Check routing_wallet_probe_status, routing_wallet_probe_scope, verified_chains, and unverified_chains. Current successful probes are partial_unverified because Polygon is verified while Arbitrum/Ethereum require Bullpen routing data. If the status is probe_failed or a deposit route needs full proof, run the JSON field's next_diagnostic_command.

Polymarket balance source disagreement:

If bullpen funds balances says the Polymarket value is stale, contradictory, or unavailable, inspect polymarket_reconciliation in JSON output. The headline intentionally excludes unverified aggregate amounts. Do not tell the user that raw_value_usd is stuck or recoverable. Closed positions are historical only. A positive claimable_redeemable_positions.value_usd should be checked with bullpen recover redeem --dry-run --output json; if evidence remains unavailable across retries, create a support bundle instead of recommending repeated money-moving commands.

For a redeem that already submitted, prefer bullpen polymarket redeem-status <operation-id-or-tx-or-trace> --output json over another redeem attempt. pending_unknown means indexing or evidence is not final yet. confirmed_positive_payout and confirmed_zero_payout do not need a retry. reverted_receipt, missing evidence, wrong_wallet_settlement, and contradictory_evidence should be escalated with the status JSON.

Auth diagnostics command:

For any auth-related error, inspect status before running the dedicated diagnostic command:

bullpen status --output json
bullpen doctor auth --output json

This shows token validity, onboarding status, wallet readiness, recovery methods, and credential file health without making any changes.

Cross-References

  • General diagnostics and support ticket filing: See references/diagnostics.md
  • Deposit and balance commands: See references/trading.md
  • Account and auth configuration: See references/platform-and-account.md
  • Community support channels: See references/community.md
  • Safe / Proxy / Deposit Wallet routing: Use bullpen recover funds --dry-run --output json for missing or stranded funds, then bullpen recover funds --yes only when the root status is ready, every executable leg has outcome supported, legs[].effective_evidence.submit_authorized is true, and source, destination, and route match intent. Treat safe_to_retry as post-live-submit retry evidence only. For wallet-routing disagreements, run bullpen polymarket wallet-audit --refresh --include-order-credit --output json, then create bullpen support bundle --output json for the support handoff; --wallet does not override Safe/Proxy vs Deposit Wallet server selection. Use legacy bullpen polymarket wallet check only if Bullpen support asks for old-format output.