Use this guide as:
symptom -> likely cause -> shortest safe fix -> retry guidance
This file is for runtime diagnosis only. Use:
SKILL.mdfor routing and execution policyreferences/commands.mdfor canonical command syntaxreferences/onchain.mdfor onchain endpoint behavior
When a command fails:
- preserve the original error text
- classify the failure type
- apply the shortest direct fix
- decide whether retry is safe
- fail closed on live writes if state is uncertain
For write failures, never blind-retry unless you have verified that the original action did not land.
| Symptom | Likely class | First action | Retry? |
|---|---|---|---|
ASSET_NOT_FOUND |
symbol resolution | run dpro-hl markets ls and use exact coin |
no, until corrected |
Master password required |
secret / decrypt | provide password through supported path | no, until provided |
PRIVATE_KEY_MISSING |
account mode | switch to API account | no, until corrected |
PRIVATE_KEY_MISSING ... missing master key |
transfer signer | add master key mapping for the account masterAddress | no, until corrected |
No mid price available |
market data / symbol mismatch | verify exact symbol | no, until corrected |
Order has invalid price |
pricing / tick / normalization | use valid tick price or bounded market path | only after correction |
Cannot set leverage on spot markets |
market-type mismatch | switch to perp or supported hip3 perp |
no, until corrected |
NETWORK_ERROR on read |
transport | retry once, then check health | yes, once |
spot-meta ... removed upstream |
endpoint deprecation | switch to spot-holder-counts / markets ls / perps-meta |
no, command change required |
| timeout on write | uncertain write state | inspect orders / fills first | not until verified |
Use this class when the command failed because the asset key is missing, malformed, stale, or mapped to the wrong namespace.
Use this class when the command needs an API account, password, or decrypted key material and does not have it.
Use this class when a spot-only, perp-only, or HIP-3-only action was attempted in the wrong namespace.
Use this class when the order payload is structurally valid but the price, size, or tick formatting is rejected.
Use this class when the request could not reliably reach the upstream service or returned an uncertain status.
Likely cause
- symbol not present in the current market snapshot
- strict mismatch such as
AAPLvsxyz:AAPL - wrong market namespace for the intended asset
- stale copied symbol from an older snapshot
Direct fix
- Run
dpro-hl markets ls - Copy the exact
coinvalue - Rebuild the command with the correct namespace:
dpro-hl spot order ...for spotdpro-hl perp order ...for standard perpsdpro-hl hip3 order ...for HIP-3 assets
- Retry only after the exact symbol is corrected
Retry guidance
- safe to retry only after the symbol is corrected
- not safe to keep retrying the same unresolved symbol
Likely cause
- encrypted API key material requires password-based decrypt
- runtime did not receive the password through the supported path
Direct fix
- Provide the password through
runtimeContext.apiPasswordorruntimeContext.masterPasswordas appropriate - For repeated commands in separate processes, export once and reuse:
export DPRO_HL_API_PASSWORD=<YOUR_API_PASSWORD>for API-wallet operationsexport DPRO_HL_MASTER_PASSWORD=<YOUR_MASTER_PASSWORD>for master-wallet operations
- Use built-in session cache by providing password once:
--api-password <YOUR_PASSWORD>or--master-password <YOUR_PASSWORD>- cache is reused across new
node -eprocesses until TTL expires
- Otherwise use the supported secure command path such as
--api-password/--master-password - Re-run the same command once password input is available
Retry guidance
- do not retry until password is provided
- ask explicitly for password input through supported form:
--api-password <YOUR_PASSWORD>or--master-password <YOUR_PASSWORD>
- do not echo or repeat the provided password value in responses
Likely cause
- session cache expired (
DPRO_HL_PASSWORD_CACHE_TTL_SEC) - session cache disabled (
DPRO_HL_PASSWORD_CACHE=0) - cache path is not writable (
DPRO_HL_PASSWORD_CACHE_FILE)
Direct fix
- Check cache env vars and remove conflicting overrides
- Re-enter password once via
--api-password <YOUR_PASSWORD>or--master-password <YOUR_PASSWORD> - If needed, clear stale cache and retry:
dpro-hl account clear-password-cache
Retry guidance
- safe to retry after cache settings are corrected
- do not print password value in logs or chat output
Likely cause
- upstream
/api/v1/hl/meta/spotendpoint was removed
Direct fix
- Use one of the supported alternatives:
dpro-hl onchain spot-holder-countsdpro-hl markets lsdpro-hl onchain perps-meta
Retry guidance
- do not retry
spot-metafor data retrieval - switch to one of the replacement commands above
Likely cause
- attempted a write action with a read-only account
- no API account is configured
- the wrong default account was selected for a write
Direct fix
- Check accounts:
dpro-hl account ls
- If no API account exists, add one through the supported secure path
- canonical command surface may expose:
dpro-hl account add-api <masterAddress> <agentPrivKey> [alias] --api-password <password>
- canonical command surface may expose:
- If needed, set or choose the correct default account:
dpro-hl account set-default <alias>
- Retry the write only after the API account is confirmed
Retry guidance
- do not retry on a read-only account
- safe to retry only after API account readiness is confirmed
Likely cause
- transfer uses master-wallet signing
- selected account's
masterAddresshas no stored master key mapping
Direct fix
- Check accounts:
dpro-hl account ls
- Add master key mapping for the master address:
dpro-hl account add-master <masterAddress> <masterPrivKey> --master-password <password>
- Retry transfer:
dpro-hl transfer <usd> [--to perp|spot] [--account <alias>]
Retry guidance
- do not retry transfer until master key is configured
- after adding master key, retry is safe
Likely cause
- no usable mid was returned for the requested coin
- symbol mismatch or unsupported namespace form
- namespaced onchain perp symbol was not normalized correctly
Direct fix
- Validate the symbol via
dpro-hl markets ls - Retry with the exact symbol
- For namespaced onchain perp queries, normalize to:
dexlowercaseassetuppercase- example:
xyz:NVDA
- If the error occurred during a market order flow, confirm the asset is actively quoted before retrying
Retry guidance
- do not retry until symbol / namespace is corrected
- if the asset is temporarily unquoted, wait for a fresh snapshot before retrying
Likely cause
- invalid wire-format price after normalization
- limit price violates tick-size or venue formatting rules
- price was built from stale or malformed input
Direct fix
- Re-check the intended market namespace and exact asset
- Use a valid tick-aligned limit price
- If appropriate, use the bounded market path instead:
dpro-hl spot order market ... --slippage Ndpro-hl perp order market ... --slippage Ndpro-hl hip3 order market ... --slippage N
- Re-submit only after the price input is corrected
Retry guidance
- safe to retry only after price correction
- do not keep retrying the same invalid price
Likely cause
- leverage or isolated-margin command was sent to the
spotnamespace - the selected HIP-3 asset is not a perp-style instrument
Direct fix
- Use leverage and isolated margin only with:
dpro-hl perp order set-leverage ...dpro-hl perp order topup-isolated ...dpro-hl hip3 order set-leverage ...for supported HIP-3 perp-style instrumentsdpro-hl hip3 order topup-isolated ...for supported HIP-3 perp-style instruments
- If the user wants spot exposure, remove leverage/margin commands entirely
Retry guidance
- do not retry in the
spotnamespace - safe to retry only after switching to a supported perp-style market
Likely cause
- timeout
- DNS or connectivity issue
- upstream outage or degraded service
Direct fix for reads
- Retry once
- Check service health:
dpro-hl onchain health
- Re-run with
--jsonif raw details are needed
Direct fix for writes
- Treat the result as uncertain until verified
- Inspect order state and fills before doing anything else
- Retry only if verification shows the original write did not land
Retry guidance
- reads: one retry is acceptable
- writes: never blind-retry after a network error
Likely cause
- request may have reached the venue but the client did not receive a clean acknowledgment
- order state is unknown
Direct fix
- Do not immediately re-submit
- Inspect open orders:
dpro-hl orders [alias|address]
- Inspect fills:
dpro-hl fills [alias|address] --limit 20
- If using client order ids, inspect by the known cancel / lookup path where supported
- Retry only after confirming the original write did not land
Retry guidance
- fail closed until state is verified
- duplicate submissions are possible if you retry too early
Likely cause
- insufficient spot balance for the requested size
- insufficient perp margin for the requested notional
- isolated top-up or leverage change still leaves the account underfunded
- note: on unified accounts,
perpEquity=0snapshots can still allow order submission; treat venue rejection as the final funding signal
Direct fix
- Check balances:
dpro-hl balances [alias|address]
- Check positions / portfolio if relevant:
dpro-hl positions [alias|address]dpro-hl portfolio [alias|address]
- Reduce size, add collateral, or use the correct account
- Retry only after the account has enough balance or margin
Retry guidance
- do not retry unchanged
- safe to retry only after funding or size adjustment
Likely cause
- wrong account
- wrong namespace or symbol
- stale order id / cloid
- the order already filled or was already cancelled
Direct fix
- Confirm the active account:
dpro-hl account ls
- Inspect open orders:
dpro-hl orders [alias|address]
- For
cancel-by-cloid, verify the exact symbol and cloid pair - Retry only with a confirmed live target
Retry guidance
- safe to retry only after the target is confirmed to exist
- if the order is already closed, do not retry cancellation
Likely cause
- builder approval not yet configured
- wrong account selected
- password missing
- user intent was unclear about persistent account effect
Direct fix
- Confirm the selected API account
- Confirm password availability
- Check current approval first:
dpro-hl builder-approval [alias|masterAddress]
- Re-state that builder approval is a persistent account-affecting action
- Retry only after explicit confirmation from the user
Retry guidance
- do not auto-retry
- require explicit confirmation before retrying
Likely cause
- endpoint is healthy but the specific asset currently has no rows
- pagination or sort filters excluded all rows
- upstream schema variant requires normalization
Direct fix
- Retry with a simpler request:
- remove optional sort / pagination filters
- Confirm the exact asset symbol
- Use raw structured output when needed for inspection
- Follow endpoint-specific normalization rules from
references/onchain.md
Retry guidance
- safe to retry once with simplified parameters
- do not assume empty rows always mean failure
Use this fallback sequence:
- classify the error into one of:
- symbol resolution
- account / credentials
- market-type mismatch
- pricing / validation
- transport / upstream
- apply the shortest direct fix
- for writes, verify state before any retry
- preserve the original error text in the final response
Before retrying any failed command, confirm:
- exact symbol is correct
- market namespace is correct
- account is correct
- password is available when required
- price / slippage inputs are valid
- for writes, original state has been verified