{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/nano/refs/heads/main/json-schema/nano-rpc-request.json",
  "title": "Nano RPC Request",
  "description": "Base schema for all Nano JSON-RPC requests. Every request must include an 'action' field identifying the RPC command.",
  "type": "object",
  "required": ["action"],
  "properties": {
    "action": {
      "type": "string",
      "description": "The RPC action to perform",
      "enum": [
        "account_balance",
        "account_block_count",
        "account_get",
        "account_history",
        "account_info",
        "account_key",
        "account_representative",
        "account_weight",
        "accounts_balances",
        "accounts_frontiers",
        "accounts_receivable",
        "accounts_representatives",
        "available_supply",
        "block_account",
        "block_confirm",
        "block_count",
        "block_create",
        "block_hash",
        "block_info",
        "blocks",
        "blocks_info",
        "bootstrap",
        "bootstrap_any",
        "bootstrap_lazy",
        "bootstrap_status",
        "chain",
        "confirmation_active",
        "confirmation_history",
        "confirmation_info",
        "confirmation_quorum",
        "delegators",
        "delegators_count",
        "deterministic_key",
        "election_statistics",
        "frontier_count",
        "frontiers",
        "keepalive",
        "key_create",
        "key_expand",
        "ledger",
        "nano_to_raw",
        "node_id",
        "peers",
        "populate_backlog",
        "process",
        "raw_to_nano",
        "receivable",
        "receivable_exists",
        "receive",
        "receive_minimum",
        "receive_minimum_set",
        "representatives",
        "representatives_online",
        "republish",
        "search_receivable",
        "search_receivable_all",
        "send",
        "sign",
        "stats",
        "successors",
        "telemetry",
        "uptime",
        "validate_account_number",
        "version",
        "wallet_add",
        "wallet_add_watch",
        "wallet_balances",
        "wallet_change_seed",
        "wallet_contains",
        "wallet_create",
        "wallet_destroy",
        "wallet_export",
        "wallet_frontiers",
        "wallet_history",
        "wallet_info",
        "wallet_ledger",
        "wallet_lock",
        "wallet_locked",
        "wallet_receivable",
        "wallet_representative",
        "wallet_representative_set",
        "wallet_republish",
        "wallet_work_get",
        "work_cancel",
        "work_generate",
        "work_get",
        "work_set",
        "work_validate",
        "account_create",
        "account_list",
        "account_move",
        "account_remove",
        "account_representative_set",
        "accounts_create",
        "password_change",
        "password_enter",
        "password_valid",
        "node_id",
        "election_statistics"
      ]
    },
    "account": {
      "type": "string",
      "pattern": "^nano_[13][13456789abcdefghijkmnopqrstuwxyz]{59}$",
      "description": "A Nano account address (nano_ prefix followed by 60 base32 characters)"
    },
    "accounts": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^nano_[13][13456789abcdefghijkmnopqrstuwxyz]{59}$"
      },
      "description": "A list of Nano account addresses"
    },
    "hash": {
      "type": "string",
      "pattern": "^[0-9A-F]{64}$",
      "description": "A 64-character uppercase hex block hash"
    },
    "hashes": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[0-9A-F]{64}$"
      },
      "description": "A list of block hashes"
    },
    "wallet": {
      "type": "string",
      "pattern": "^[0-9A-F]{64}$",
      "description": "A 64-character uppercase hex wallet identifier"
    },
    "count": {
      "type": "integer",
      "minimum": 1,
      "description": "Maximum number of results to return"
    },
    "threshold": {
      "type": "string",
      "description": "Minimum amount in raw units to include in results"
    },
    "source": {
      "type": "boolean",
      "description": "Include source account information in results"
    },
    "sorting": {
      "type": "boolean",
      "description": "Sort results by balance descending"
    },
    "representative": {
      "type": ["string", "boolean"],
      "description": "Include or set representative information"
    },
    "weight": {
      "type": "boolean",
      "description": "Include voting weight in results"
    },
    "json_block": {
      "type": "string",
      "enum": ["true"],
      "description": "Return block contents as JSON object rather than string"
    },
    "key": {
      "type": "string",
      "pattern": "^[0-9A-F]{64}$",
      "description": "A 64-character uppercase hex private or public key"
    },
    "seed": {
      "type": "string",
      "pattern": "^[0-9A-F]{64}$",
      "description": "A 64-character uppercase hex wallet seed"
    },
    "work": {
      "type": "string",
      "description": "Proof-of-work value (hex)"
    },
    "difficulty": {
      "type": "string",
      "description": "Target difficulty for work generation (hex)"
    },
    "amount": {
      "type": "string",
      "description": "Amount in raw units (integer string) or Nano units"
    }
  },
  "additionalProperties": true
}
