{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "generatedFrom": "scripts/dig-spec.mjs (mirrors docs/support/error-codes.md + the source enums)",
  "site": "https://docs.dig.net",
  "version": 1,
  "surfaces": {
    "dig-rpc": "JSON-RPC 2.0 codes for the dig RPC (rpc.dig.net). http_or_exit is the transport status (always 200; the error rides in the JSON envelope).",
    "digstore-cli": "digstore CLI process exit codes (0..16). http_or_exit is the process exit code.",
    "dighub": "DIGHUb (hub.dig.net) user-facing codes. http_or_exit is the HTTP status where one exists.",
    "dig-loader": "dig:// content-loader failure codes (DIG Browser / extension). http_or_exit is null (surfaced on the error page)."
  },
  "errors": [
    {
      "surface": "dig-rpc",
      "code": -32700,
      "name": "PARSE_ERROR",
      "http_or_exit": 200,
      "description": "Parse error — The request body isn’t valid JSON (id is null)."
    },
    {
      "surface": "dig-rpc",
      "code": -32600,
      "name": "INVALID_REQUEST",
      "http_or_exit": 200,
      "description": "Invalid request — Not a request object/array, an empty batch, or a missing method."
    },
    {
      "surface": "dig-rpc",
      "code": -32601,
      "name": "METHOD_NOT_FOUND",
      "http_or_exit": 200,
      "description": "Method not found — This node doesn’t implement the method."
    },
    {
      "surface": "dig-rpc",
      "code": -32602,
      "name": "INVALID_PARAMS",
      "http_or_exit": 200,
      "description": "Invalid params — Missing/malformed store_id, root, or retrieval_key; or \"latest\" on a store with no confirmed generation."
    },
    {
      "surface": "dig-rpc",
      "code": -32603,
      "name": "INTERNAL_ERROR",
      "http_or_exit": 200,
      "description": "Internal error — The node failed to satisfy a well-formed call."
    },
    {
      "surface": "dig-rpc",
      "code": -32004,
      "name": "RESOURCE_UNAVAILABLE",
      "http_or_exit": 200,
      "description": "Resource not available at the requested root — A genuine infrastructure miss (no host seed, module absent in both buckets, bad magic, oversize, a wasmtime trap, or an undecodable envelope) — distinct from a content miss, which is an indistinguishable decoy with no error."
    },
    {
      "surface": "dig-rpc",
      "code": -32005,
      "name": "ROOT_NOT_ANCHORED",
      "http_or_exit": 200,
      "description": "Root not chain-anchored — The requested or served generation is not the store’s current on-chain root. A content read is pinned to the CHIP-0035 singleton’s on-chain root (resolved live from the chain, never trusted from the serving node): a requested root that is not the on-chain root, an unreachable chain, or a store with no confirmed generation fails closed with this code rather than serving an unverified generation. Omit root to take the chain tip."
    },
    {
      "surface": "dig-rpc",
      "code": -32006,
      "name": "PEER_UNREACHABLE",
      "http_or_exit": 200,
      "description": "Peer unreachable — No connection to the named peer could be established — every NAT-traversal strategy (direct, UPnP/NAT-PMP/PCP mapping, relay-coordinated hole-punch, and relayed fallback) failed, or the peer is not registered on this network. Returned by the node-profile peer methods (dig.getPeers / dig.announce / dig.getNetworkInfo)."
    },
    {
      "surface": "dig-rpc",
      "code": -32007,
      "name": "RANGE_NOT_SATISFIABLE",
      "http_or_exit": 200,
      "description": "Range not satisfiable — The requested byte range lies outside the resource (offset >= total_length) or is otherwise unsatisfiable. Returned by the node-profile dig.fetchRange when the offset/length cannot be served."
    },
    {
      "surface": "dig-rpc",
      "code": -32008,
      "name": "CONTENT_REDIRECT",
      "http_or_exit": 200,
      "description": "Content held elsewhere — redirect — This node does not hold the requested content, but it located peers that do (via the DHT) — a redirect, not a not-found. error.data.redirect names the holder(s) (providers[] = peer_id + candidate addresses), the requested content, and the bounded redirect budget (redirect_depth, max_redirects). Returned by the node-profile content methods (dig.getContent / dig.fetchRange) on a local miss when a provider exists; re-request against a named provider, echoing redirect_depth."
    },
    {
      "surface": "dig-rpc",
      "code": -32010,
      "name": "UPSTREAM_ERROR",
      "http_or_exit": 200,
      "description": "Upstream error — A thin-shell node relayed a method it does not resolve locally to its upstream DIG RPC, and the upstream was unreachable or returned a non-JSON response."
    },
    {
      "surface": "dig-rpc",
      "code": -32011,
      "name": "STAGE_DIR_UNREADABLE",
      "http_or_exit": 200,
      "description": "Stage: source directory unreadable — dig.stage (local control) could not read the source directory."
    },
    {
      "surface": "dig-rpc",
      "code": -32012,
      "name": "STAGE_NO_FILES",
      "http_or_exit": 200,
      "description": "Stage: no files to stage — dig.stage found no files in the source directory."
    },
    {
      "surface": "dig-rpc",
      "code": -32013,
      "name": "STAGE_OVER_CAP",
      "http_or_exit": 200,
      "description": "Stage: content exceeds capsule size cap — dig.stage content exceeds the capsule size cap."
    },
    {
      "surface": "dig-rpc",
      "code": -32014,
      "name": "STAGE_COMPILE_IO",
      "http_or_exit": 200,
      "description": "Stage: compile/IO failure — dig.stage hit a compile or IO failure while building the module."
    },
    {
      "surface": "dig-rpc",
      "code": -32020,
      "name": "ONION_CIRCUIT_UNAVAILABLE",
      "http_or_exit": 200,
      "description": "Onion circuit unavailable — A mode:\"privacy\" content read could not be served privately (no circuit could be built or a circuit died mid-fetch). The node MUST NOT downgrade to a direct fetch — that would deanonymize the very reader who asked for privacy — so it fails closed with this code. Retry, or the client may explicitly choose a fast (mode:\"speed\") fetch instead. See https://docs.dig.net/docs/protocol/onion-routing."
    },
    {
      "surface": "dig-rpc",
      "code": -32021,
      "name": "PRIVACY_REQUIRES_LOCAL_NODE",
      "http_or_exit": 200,
      "description": "Privacy requires a local node — mode:\"privacy\" was requested but the caller is not the node's own trusted local originator (loopback / dig.local). A node will not fetch privately on a remote/anonymous caller's behalf (that would hand it the caller's identity + query), so privacy mode requires a local DIG node. See https://docs.dig.net/docs/protocol/onion-routing#toggle-placement."
    },
    {
      "surface": "dig-rpc",
      "code": -32022,
      "name": "ONION_HOPS_OUT_OF_RANGE",
      "http_or_exit": 200,
      "description": "Onion hop count out of range — The requested privacy.hops (circuit length) is outside the allowed range [2, 5] (default 3). Request a hop count within range. See https://docs.dig.net/docs/protocol/onion-routing#modes."
    },
    {
      "surface": "dig-rpc",
      "code": -32030,
      "name": "CONTROL_UNAUTHORIZED",
      "http_or_exit": 200,
      "description": "Unauthorized (control) — A control.* method was called without a valid local control token. Control methods are loopback-only. Control codes are -32030+ so they never collide with the onion codes -32020/21/22."
    },
    {
      "surface": "dig-rpc",
      "code": -32031,
      "name": "CONTROL_NOT_SUPPORTED",
      "http_or_exit": 200,
      "description": "Not supported (control) — A control operation this build/pin cannot perform (e.g. §21 whole-store sync with no loaded identity)."
    },
    {
      "surface": "dig-rpc",
      "code": -32032,
      "name": "CONTROL_ERROR",
      "http_or_exit": 200,
      "description": "Control error — A control operation failed at runtime — distinct from bad input or an absent capability."
    },
    {
      "surface": "digstore-cli",
      "code": "success",
      "exit": 0,
      "http_or_exit": 0,
      "description": "The command completed."
    },
    {
      "surface": "digstore-cli",
      "code": "other",
      "exit": 1,
      "http_or_exit": 1,
      "description": "An unclassified error. Re-run with --verbose."
    },
    {
      "surface": "digstore-cli",
      "code": "invalid-argument",
      "exit": 2,
      "http_or_exit": 2,
      "description": "A flag or argument was invalid."
    },
    {
      "surface": "digstore-cli",
      "code": "no-store",
      "exit": 3,
      "http_or_exit": 3,
      "description": "No store found here. Run `digstore init`."
    },
    {
      "surface": "digstore-cli",
      "code": "not-found",
      "exit": 4,
      "http_or_exit": 4,
      "description": "A resource/URN/root wasn't found."
    },
    {
      "surface": "digstore-cli",
      "code": "verification-failed",
      "exit": 5,
      "http_or_exit": 5,
      "description": "Content failed cryptographic verification (wrong salt/key or tampered data)."
    },
    {
      "surface": "digstore-cli",
      "code": "network",
      "exit": 6,
      "http_or_exit": 6,
      "description": "A network/transport failure."
    },
    {
      "surface": "digstore-cli",
      "code": "non-fast-forward",
      "exit": 7,
      "http_or_exit": 7,
      "description": "The remote root has advanced past yours. Pull first."
    },
    {
      "surface": "digstore-cli",
      "code": "unauthorized",
      "exit": 8,
      "http_or_exit": 8,
      "description": "Not authorized for this action."
    },
    {
      "surface": "digstore-cli",
      "code": "no-seed",
      "exit": 9,
      "http_or_exit": 9,
      "description": "No wallet seed is set up."
    },
    {
      "surface": "digstore-cli",
      "code": "bad-passphrase",
      "exit": 10,
      "http_or_exit": 10,
      "description": "Wrong passphrase for the seed."
    },
    {
      "surface": "digstore-cli",
      "code": "invalid-mnemonic",
      "exit": 11,
      "http_or_exit": 11,
      "description": "The mnemonic is invalid (check word list / count)."
    },
    {
      "surface": "digstore-cli",
      "code": "insufficient-funds",
      "exit": 12,
      "http_or_exit": 12,
      "description": "Not enough XCH or DIG to cover the spend (the uniform capsule price in $DIG + XCH fee per capsule)."
    },
    {
      "surface": "digstore-cli",
      "code": "chain",
      "exit": 13,
      "http_or_exit": 13,
      "description": "A Chia chain/coinset error."
    },
    {
      "surface": "digstore-cli",
      "code": "confirm-timeout",
      "exit": 14,
      "http_or_exit": 14,
      "description": "The on-chain confirmation timed out."
    },
    {
      "surface": "digstore-cli",
      "code": "mint-failed",
      "exit": 15,
      "http_or_exit": 15,
      "description": "Minting the store singleton failed."
    },
    {
      "surface": "digstore-cli",
      "code": "update-failed",
      "exit": 16,
      "http_or_exit": 16,
      "description": "Anchoring the new root failed."
    },
    {
      "surface": "dighub",
      "code": "WALLET_DECLINED",
      "http": null,
      "wire": null,
      "http_or_exit": null,
      "description": "You declined the signature in your wallet. Nothing was signed or broadcast."
    },
    {
      "surface": "dighub",
      "code": "DIG_INSUFFICIENT",
      "http": 429,
      "wire": "over_quota",
      "http_or_exit": 429,
      "description": "Not enough $DIG in your wallet to cover this capsule's price."
    },
    {
      "surface": "dighub",
      "code": "COIN_CONFLICT",
      "http": 409,
      "wire": "coin_reserved",
      "http_or_exit": 409,
      "description": "The coin was just spent elsewhere (double-spend / mempool conflict)."
    },
    {
      "surface": "dighub",
      "code": "REG_PENDING",
      "http": null,
      "wire": null,
      "http_or_exit": null,
      "description": "Your spend is on chain and will appear shortly. Do not sign or pay again."
    },
    {
      "surface": "dighub",
      "code": "WALLET_SESSION",
      "http": 401,
      "wire": "unauthorized",
      "http_or_exit": 401,
      "description": "Your wallet session can't sign (expired, watch-only, or missing method)."
    },
    {
      "surface": "dighub",
      "code": "NET_OFFLINE",
      "http": null,
      "wire": null,
      "http_or_exit": null,
      "description": "You appear to be offline."
    },
    {
      "surface": "dighub",
      "code": "NET_TIMEOUT",
      "http": null,
      "wire": null,
      "http_or_exit": null,
      "description": "The request timed out or couldn't reach the network."
    },
    {
      "surface": "dighub",
      "code": "SLUG_TAKEN",
      "http": 409,
      "wire": "slug_taken",
      "http_or_exit": 409,
      "description": "That store name is already taken."
    },
    {
      "surface": "dighub",
      "code": "OVER_QUOTA",
      "http": 429,
      "wire": "over_quota",
      "http_or_exit": 429,
      "description": "You've reached the store limit for this account."
    },
    {
      "surface": "dighub",
      "code": "COIN_RESERVED",
      "http": 409,
      "wire": "coin_reserved",
      "http_or_exit": 409,
      "description": "A coin is busy finishing another transaction."
    },
    {
      "surface": "dighub",
      "code": "UNAUTHORIZED",
      "http": 401,
      "wire": "unauthorized",
      "http_or_exit": 401,
      "description": "Your session isn't authorized for this."
    },
    {
      "surface": "dighub",
      "code": "FORBIDDEN",
      "http": 403,
      "wire": "forbidden",
      "http_or_exit": 403,
      "description": "You don't have permission to do this."
    },
    {
      "surface": "dighub",
      "code": "NOT_FOUND",
      "http": 404,
      "wire": "not_found",
      "http_or_exit": 404,
      "description": "The thing could not be found — it may have expired."
    },
    {
      "surface": "dighub",
      "code": "INVALID_REQUEST",
      "http": 400,
      "wire": "invalid_request",
      "http_or_exit": 400,
      "description": "Something about the request wasn't valid."
    },
    {
      "surface": "dighub",
      "code": "UNEXPECTED",
      "http": 500,
      "wire": null,
      "http_or_exit": 500,
      "description": "An unclassified error."
    },
    {
      "surface": "dig-loader",
      "code": "DIG_ERR_PROOF_MISMATCH",
      "http_or_exit": null,
      "description": "The served ciphertext did not verify against the on-chain generation root (tamper / wrong root)."
    },
    {
      "surface": "dig-loader",
      "code": "DIG_ERR_DECRYPT_TAG",
      "http_or_exit": null,
      "description": "AES-256-GCM-SIV authentication tag failed — wrong key/salt or corrupted bytes."
    },
    {
      "surface": "dig-loader",
      "code": "DIG_ERR_NOT_FOUND",
      "http_or_exit": null,
      "description": "A blind miss (decoy) — no resource at this retrieval key under this generation."
    },
    {
      "surface": "dig-loader",
      "code": "DIG_ERR_NETWORK",
      "http_or_exit": null,
      "description": "The node/CDN was unreachable or the transport failed."
    }
  ],
  "bySurface": {
    "dig-rpc": [
      {
        "surface": "dig-rpc",
        "code": -32700,
        "name": "PARSE_ERROR",
        "http_or_exit": 200,
        "description": "Parse error — The request body isn’t valid JSON (id is null)."
      },
      {
        "surface": "dig-rpc",
        "code": -32600,
        "name": "INVALID_REQUEST",
        "http_or_exit": 200,
        "description": "Invalid request — Not a request object/array, an empty batch, or a missing method."
      },
      {
        "surface": "dig-rpc",
        "code": -32601,
        "name": "METHOD_NOT_FOUND",
        "http_or_exit": 200,
        "description": "Method not found — This node doesn’t implement the method."
      },
      {
        "surface": "dig-rpc",
        "code": -32602,
        "name": "INVALID_PARAMS",
        "http_or_exit": 200,
        "description": "Invalid params — Missing/malformed store_id, root, or retrieval_key; or \"latest\" on a store with no confirmed generation."
      },
      {
        "surface": "dig-rpc",
        "code": -32603,
        "name": "INTERNAL_ERROR",
        "http_or_exit": 200,
        "description": "Internal error — The node failed to satisfy a well-formed call."
      },
      {
        "surface": "dig-rpc",
        "code": -32004,
        "name": "RESOURCE_UNAVAILABLE",
        "http_or_exit": 200,
        "description": "Resource not available at the requested root — A genuine infrastructure miss (no host seed, module absent in both buckets, bad magic, oversize, a wasmtime trap, or an undecodable envelope) — distinct from a content miss, which is an indistinguishable decoy with no error."
      },
      {
        "surface": "dig-rpc",
        "code": -32005,
        "name": "ROOT_NOT_ANCHORED",
        "http_or_exit": 200,
        "description": "Root not chain-anchored — The requested or served generation is not the store’s current on-chain root. A content read is pinned to the CHIP-0035 singleton’s on-chain root (resolved live from the chain, never trusted from the serving node): a requested root that is not the on-chain root, an unreachable chain, or a store with no confirmed generation fails closed with this code rather than serving an unverified generation. Omit root to take the chain tip."
      },
      {
        "surface": "dig-rpc",
        "code": -32006,
        "name": "PEER_UNREACHABLE",
        "http_or_exit": 200,
        "description": "Peer unreachable — No connection to the named peer could be established — every NAT-traversal strategy (direct, UPnP/NAT-PMP/PCP mapping, relay-coordinated hole-punch, and relayed fallback) failed, or the peer is not registered on this network. Returned by the node-profile peer methods (dig.getPeers / dig.announce / dig.getNetworkInfo)."
      },
      {
        "surface": "dig-rpc",
        "code": -32007,
        "name": "RANGE_NOT_SATISFIABLE",
        "http_or_exit": 200,
        "description": "Range not satisfiable — The requested byte range lies outside the resource (offset >= total_length) or is otherwise unsatisfiable. Returned by the node-profile dig.fetchRange when the offset/length cannot be served."
      },
      {
        "surface": "dig-rpc",
        "code": -32008,
        "name": "CONTENT_REDIRECT",
        "http_or_exit": 200,
        "description": "Content held elsewhere — redirect — This node does not hold the requested content, but it located peers that do (via the DHT) — a redirect, not a not-found. error.data.redirect names the holder(s) (providers[] = peer_id + candidate addresses), the requested content, and the bounded redirect budget (redirect_depth, max_redirects). Returned by the node-profile content methods (dig.getContent / dig.fetchRange) on a local miss when a provider exists; re-request against a named provider, echoing redirect_depth."
      },
      {
        "surface": "dig-rpc",
        "code": -32010,
        "name": "UPSTREAM_ERROR",
        "http_or_exit": 200,
        "description": "Upstream error — A thin-shell node relayed a method it does not resolve locally to its upstream DIG RPC, and the upstream was unreachable or returned a non-JSON response."
      },
      {
        "surface": "dig-rpc",
        "code": -32011,
        "name": "STAGE_DIR_UNREADABLE",
        "http_or_exit": 200,
        "description": "Stage: source directory unreadable — dig.stage (local control) could not read the source directory."
      },
      {
        "surface": "dig-rpc",
        "code": -32012,
        "name": "STAGE_NO_FILES",
        "http_or_exit": 200,
        "description": "Stage: no files to stage — dig.stage found no files in the source directory."
      },
      {
        "surface": "dig-rpc",
        "code": -32013,
        "name": "STAGE_OVER_CAP",
        "http_or_exit": 200,
        "description": "Stage: content exceeds capsule size cap — dig.stage content exceeds the capsule size cap."
      },
      {
        "surface": "dig-rpc",
        "code": -32014,
        "name": "STAGE_COMPILE_IO",
        "http_or_exit": 200,
        "description": "Stage: compile/IO failure — dig.stage hit a compile or IO failure while building the module."
      },
      {
        "surface": "dig-rpc",
        "code": -32020,
        "name": "ONION_CIRCUIT_UNAVAILABLE",
        "http_or_exit": 200,
        "description": "Onion circuit unavailable — A mode:\"privacy\" content read could not be served privately (no circuit could be built or a circuit died mid-fetch). The node MUST NOT downgrade to a direct fetch — that would deanonymize the very reader who asked for privacy — so it fails closed with this code. Retry, or the client may explicitly choose a fast (mode:\"speed\") fetch instead. See https://docs.dig.net/docs/protocol/onion-routing."
      },
      {
        "surface": "dig-rpc",
        "code": -32021,
        "name": "PRIVACY_REQUIRES_LOCAL_NODE",
        "http_or_exit": 200,
        "description": "Privacy requires a local node — mode:\"privacy\" was requested but the caller is not the node's own trusted local originator (loopback / dig.local). A node will not fetch privately on a remote/anonymous caller's behalf (that would hand it the caller's identity + query), so privacy mode requires a local DIG node. See https://docs.dig.net/docs/protocol/onion-routing#toggle-placement."
      },
      {
        "surface": "dig-rpc",
        "code": -32022,
        "name": "ONION_HOPS_OUT_OF_RANGE",
        "http_or_exit": 200,
        "description": "Onion hop count out of range — The requested privacy.hops (circuit length) is outside the allowed range [2, 5] (default 3). Request a hop count within range. See https://docs.dig.net/docs/protocol/onion-routing#modes."
      },
      {
        "surface": "dig-rpc",
        "code": -32030,
        "name": "CONTROL_UNAUTHORIZED",
        "http_or_exit": 200,
        "description": "Unauthorized (control) — A control.* method was called without a valid local control token. Control methods are loopback-only. Control codes are -32030+ so they never collide with the onion codes -32020/21/22."
      },
      {
        "surface": "dig-rpc",
        "code": -32031,
        "name": "CONTROL_NOT_SUPPORTED",
        "http_or_exit": 200,
        "description": "Not supported (control) — A control operation this build/pin cannot perform (e.g. §21 whole-store sync with no loaded identity)."
      },
      {
        "surface": "dig-rpc",
        "code": -32032,
        "name": "CONTROL_ERROR",
        "http_or_exit": 200,
        "description": "Control error — A control operation failed at runtime — distinct from bad input or an absent capability."
      }
    ],
    "digstore-cli": [
      {
        "surface": "digstore-cli",
        "code": "success",
        "exit": 0,
        "http_or_exit": 0,
        "description": "The command completed."
      },
      {
        "surface": "digstore-cli",
        "code": "other",
        "exit": 1,
        "http_or_exit": 1,
        "description": "An unclassified error. Re-run with --verbose."
      },
      {
        "surface": "digstore-cli",
        "code": "invalid-argument",
        "exit": 2,
        "http_or_exit": 2,
        "description": "A flag or argument was invalid."
      },
      {
        "surface": "digstore-cli",
        "code": "no-store",
        "exit": 3,
        "http_or_exit": 3,
        "description": "No store found here. Run `digstore init`."
      },
      {
        "surface": "digstore-cli",
        "code": "not-found",
        "exit": 4,
        "http_or_exit": 4,
        "description": "A resource/URN/root wasn't found."
      },
      {
        "surface": "digstore-cli",
        "code": "verification-failed",
        "exit": 5,
        "http_or_exit": 5,
        "description": "Content failed cryptographic verification (wrong salt/key or tampered data)."
      },
      {
        "surface": "digstore-cli",
        "code": "network",
        "exit": 6,
        "http_or_exit": 6,
        "description": "A network/transport failure."
      },
      {
        "surface": "digstore-cli",
        "code": "non-fast-forward",
        "exit": 7,
        "http_or_exit": 7,
        "description": "The remote root has advanced past yours. Pull first."
      },
      {
        "surface": "digstore-cli",
        "code": "unauthorized",
        "exit": 8,
        "http_or_exit": 8,
        "description": "Not authorized for this action."
      },
      {
        "surface": "digstore-cli",
        "code": "no-seed",
        "exit": 9,
        "http_or_exit": 9,
        "description": "No wallet seed is set up."
      },
      {
        "surface": "digstore-cli",
        "code": "bad-passphrase",
        "exit": 10,
        "http_or_exit": 10,
        "description": "Wrong passphrase for the seed."
      },
      {
        "surface": "digstore-cli",
        "code": "invalid-mnemonic",
        "exit": 11,
        "http_or_exit": 11,
        "description": "The mnemonic is invalid (check word list / count)."
      },
      {
        "surface": "digstore-cli",
        "code": "insufficient-funds",
        "exit": 12,
        "http_or_exit": 12,
        "description": "Not enough XCH or DIG to cover the spend (the uniform capsule price in $DIG + XCH fee per capsule)."
      },
      {
        "surface": "digstore-cli",
        "code": "chain",
        "exit": 13,
        "http_or_exit": 13,
        "description": "A Chia chain/coinset error."
      },
      {
        "surface": "digstore-cli",
        "code": "confirm-timeout",
        "exit": 14,
        "http_or_exit": 14,
        "description": "The on-chain confirmation timed out."
      },
      {
        "surface": "digstore-cli",
        "code": "mint-failed",
        "exit": 15,
        "http_or_exit": 15,
        "description": "Minting the store singleton failed."
      },
      {
        "surface": "digstore-cli",
        "code": "update-failed",
        "exit": 16,
        "http_or_exit": 16,
        "description": "Anchoring the new root failed."
      }
    ],
    "dighub": [
      {
        "surface": "dighub",
        "code": "WALLET_DECLINED",
        "http": null,
        "wire": null,
        "http_or_exit": null,
        "description": "You declined the signature in your wallet. Nothing was signed or broadcast."
      },
      {
        "surface": "dighub",
        "code": "DIG_INSUFFICIENT",
        "http": 429,
        "wire": "over_quota",
        "http_or_exit": 429,
        "description": "Not enough $DIG in your wallet to cover this capsule's price."
      },
      {
        "surface": "dighub",
        "code": "COIN_CONFLICT",
        "http": 409,
        "wire": "coin_reserved",
        "http_or_exit": 409,
        "description": "The coin was just spent elsewhere (double-spend / mempool conflict)."
      },
      {
        "surface": "dighub",
        "code": "REG_PENDING",
        "http": null,
        "wire": null,
        "http_or_exit": null,
        "description": "Your spend is on chain and will appear shortly. Do not sign or pay again."
      },
      {
        "surface": "dighub",
        "code": "WALLET_SESSION",
        "http": 401,
        "wire": "unauthorized",
        "http_or_exit": 401,
        "description": "Your wallet session can't sign (expired, watch-only, or missing method)."
      },
      {
        "surface": "dighub",
        "code": "NET_OFFLINE",
        "http": null,
        "wire": null,
        "http_or_exit": null,
        "description": "You appear to be offline."
      },
      {
        "surface": "dighub",
        "code": "NET_TIMEOUT",
        "http": null,
        "wire": null,
        "http_or_exit": null,
        "description": "The request timed out or couldn't reach the network."
      },
      {
        "surface": "dighub",
        "code": "SLUG_TAKEN",
        "http": 409,
        "wire": "slug_taken",
        "http_or_exit": 409,
        "description": "That store name is already taken."
      },
      {
        "surface": "dighub",
        "code": "OVER_QUOTA",
        "http": 429,
        "wire": "over_quota",
        "http_or_exit": 429,
        "description": "You've reached the store limit for this account."
      },
      {
        "surface": "dighub",
        "code": "COIN_RESERVED",
        "http": 409,
        "wire": "coin_reserved",
        "http_or_exit": 409,
        "description": "A coin is busy finishing another transaction."
      },
      {
        "surface": "dighub",
        "code": "UNAUTHORIZED",
        "http": 401,
        "wire": "unauthorized",
        "http_or_exit": 401,
        "description": "Your session isn't authorized for this."
      },
      {
        "surface": "dighub",
        "code": "FORBIDDEN",
        "http": 403,
        "wire": "forbidden",
        "http_or_exit": 403,
        "description": "You don't have permission to do this."
      },
      {
        "surface": "dighub",
        "code": "NOT_FOUND",
        "http": 404,
        "wire": "not_found",
        "http_or_exit": 404,
        "description": "The thing could not be found — it may have expired."
      },
      {
        "surface": "dighub",
        "code": "INVALID_REQUEST",
        "http": 400,
        "wire": "invalid_request",
        "http_or_exit": 400,
        "description": "Something about the request wasn't valid."
      },
      {
        "surface": "dighub",
        "code": "UNEXPECTED",
        "http": 500,
        "wire": null,
        "http_or_exit": 500,
        "description": "An unclassified error."
      }
    ],
    "dig-loader": [
      {
        "surface": "dig-loader",
        "code": "DIG_ERR_PROOF_MISMATCH",
        "http_or_exit": null,
        "description": "The served ciphertext did not verify against the on-chain generation root (tamper / wrong root)."
      },
      {
        "surface": "dig-loader",
        "code": "DIG_ERR_DECRYPT_TAG",
        "http_or_exit": null,
        "description": "AES-256-GCM-SIV authentication tag failed — wrong key/salt or corrupted bytes."
      },
      {
        "surface": "dig-loader",
        "code": "DIG_ERR_NOT_FOUND",
        "http_or_exit": null,
        "description": "A blind miss (decoy) — no resource at this retrieval key under this generation."
      },
      {
        "surface": "dig-loader",
        "code": "DIG_ERR_NETWORK",
        "http_or_exit": null,
        "description": "The node/CDN was unreachable or the transport failed."
      }
    ]
  }
}
