Skip to main content

Error Codes

On failure, header.status === 'failure' and body.error = { code, message }.

danger

Important: the value in body.error.code is the v1 string code (e.g. 'param_error'), not the numeric code. The numeric column below is the internal semantic (JSON-RPC / EIP-1193 / DCENT). Branch on the string.

Catalog

body.error.code (string)numericstandardmeaning / when
parse_error-32700JSON-RPCPayload JSON parse failure — reserved (mapped but no active producer)
invalid_request-32600JSON-RPCMalformed request — reserved (mapped but no active producer)
method_not_found-32601JSON-RPCNetwork does not support the method
param_error-32602JSON-RPCBad params — e.g. signMessage called with a non-string message; invalid keyPath (resolves to no currency for the given chainId → routed to a dedicated on-device screen); missing keyPath; bad chainId charset; shape mismatch. Most common in practice: an incomplete transaction — the bridge performs no RPC (the one exception is Polkadot's runtime-metadata lookup), so a missing nonce / sequence / blockhash / fee fails closed here.
internal_error-32603JSON-RPCBridge internal error
user_cancel4001EIP-1193User rejected at the popup / UI level (account-selection or connection prompt) — distinct from on-device cancel (5004)
unauthorized4100EIP-1193Popup blocked by the browser (window.open returned null)
unsupported_method4200EIP-1193Unsupported / unresolvable chain, or device policy rejection (a genuinely unknown method is method_not_found -32601)
pop-up_closed4900EIP-1193Popup closed (connector) or the device disconnected and auto-reconnect failed (bridge)
chain_disconnected4901EIP-1193Chain disconnected — reserved. An unknown / unresolvable chainId returns unsupported_method (4200), not 4901
device_not_connected5001DCENTDevice not connected
device_locked5002DCENTDevice locked (PIN required) — reserved (no active producer)
device_timeout5003DCENTHardware response timeout
user_cancel5004DCENTSignature cancelled on the device (connector maps to user_cancel; distinct from popup/UI cancel 4001)
device_fw_incompatible5005DCENTFirmware incompatible
time_out5006DCENTTransport (popup/postMessage) timeout
protocol_version_mismatch5007DCENTconnector ↔ bridge protocol major mismatch
coin_type_errorDCENT (v1)Legacy getAddress(coinType, …) overload only: unsupported coinType (connector isAvaliableCoinType guard). Not emitted on the v2 chainId path
info

The request support gate is 2-axis. Before signing, the bridge resolves the request on two axes — chainId and keyPath. An unsupported / unresolvable chainId returns unsupported_method (4200); a chainId whose keyPath matches no currency variant returns param_error (-32602, "Invalid keyPath") and routes to a dedicated on-device screen. This chainIdunsupported_method (4200) mapping is on the sign() / signTransaction path; The same two-axis gate applies to getPublicKey as well — an unresolved chainId surfaces as unsupported_method (4200). A family that defines no slot for the requested method still returns -32601 — see the -32601 row above.

codeUX
user_cancelOffer retry
method_not_found / unsupported_methodHide the feature for that network
param_errorFix the request shape
device_not_connected / pop-up_closedPrompt to connect / unlock