{
 "openrpc": "1.3.2",
 "info": {
  "title": "Animica Node JSON-RPC",
  "version": "10.1.0",
  "description": "Machine-readable catalog of the Animica L1 node JSON-RPC surface: chain.*, state.*, tx.*, tx2.*, mempool.*, net.*, aicf.* and l2_* namespaces (plus the devnet-only faucet, marked as such).\n\nTransport: JSON-RPC 2.0 over HTTP POST to https://rpc.animica.org/rpc \u2014 always use the /rpc path; the bare host root returns a 301 redirect that breaks naive POST clients. Example: {\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"chain.getHead\",\"params\":{}}.\n\nConventions: params may be passed positionally or by name unless a method says otherwise. Amounts are base units: 1 ANM = 10^9 base units (nano-ANM). Addresses are bech32m (anim1\u2026); most methods also accept 0x-hex account digests. Signatures: ML-DSA-65 (FIPS 204), scheme id 0x1003 \u2014 the only current signature scheme. Chain id 1 (L1); the L2 rollup reports l2ChainId 1001 via l2_status. There is no chain.getHeight \u2014 use chain.getHead. There is no ai.* namespace \u2014 AI compute lives under aicf.*.\n\nThis catalog is generated from the node's actual RPC method registry (animica 10.1.0). Schemas are intentionally loose (additionalProperties true) where handlers are dynamic. The node also exposes additional namespaces not cataloged here (da.*, ena.*, quantum.*, miner.*, p2p.*, snapshot.*, sync.*, debug.*, node.*, wallet.*, marketplace.*, and Bitcoin-Core- and Ethereum-style compatibility facades).",
  "contact": {
   "name": "Animica",
   "email": "ai@3vdc.com",
   "url": "https://animica.org/developers/"
  },
  "license": {
   "name": "Apache-2.0",
   "url": "https://www.apache.org/licenses/LICENSE-2.0"
  }
 },
 "servers": [
  {
   "name": "mainnet",
   "url": "https://rpc.animica.org/rpc"
  }
 ],
 "externalDocs": {
  "description": "Animica developer documentation",
  "url": "https://animica.org/developers/"
 },
 "methods": [
  {
   "name": "aicf.buildClaimTx",
   "summary": "Build an unsigned claim transaction",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "array",
      "items": {}
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "aicf_buildClaimTx_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "aicf.buildClaimTx - Build an unsigned claim transaction.\n\nParams: [\n    from_address: HexString,\n    to_address: HexString,\n    amount: HexQuantity,\n    options?: {\n        nonce?: HexQuantity,\n        gas_limit?: HexQuantity,\n        gas_price?: HexQuantity,\n    }\n]\n\nReturns: Unsigned transaction object that can be signed and sent via tx.sendRawTransaction"
  },
  {
   "name": "aicf.claim",
   "summary": "Get claim information (read-only)",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "up_to_epoch",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "aicf_claim_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "aicf.claim - Process a claim transaction.\n\nNOTE: This is a read-only method that returns claimable info.\nActual claiming requires sending a transaction through tx.sendRawTransaction.\nUse aicf.buildClaimTx to build an unsigned transaction.\n\nParams: address (string), up_to_epoch? (int)\n\nReturns: {\n    claimable: HexQuantity,\n    epochs: [int, ...],\n    message: string\n}"
  },
  {
   "name": "aicf.claimProviderRewards",
   "summary": "Claim accrued provider rewards",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "provider_id",
     "required": true,
     "schema": {
      "type": "string"
     }
    },
    {
     "name": "to_address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "amount",
     "required": true,
     "schema": {
      "type": "integer"
     }
    },
    {
     "name": "epochs",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "array",
        "items": {}
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "aicf_claimProviderRewards_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_claimProviderRewards"
   ],
   "description": "Claim provider rewards (read-only, returns tx data).\n\nArgs:\n    provider_id: Provider identifier\n    to_address: Destination address for rewards\n    amount: Amount to claim (nano-ANM)\n    epochs: Optional list of specific epochs to claim from\n\nReturns:\n    {\n        \"tx_data\": str (hex-encoded unsigned tx),\n        \"claimable_amount\": int,\n        \"claim_count\": int,\n        \"epochs_claimed\": [int]\n    }\n\nRaises:\n    RpcError: If amount exceeds claimable, not finalized, etc."
  },
  {
   "name": "aicf.creditsByAddress",
   "summary": "Return AICF credits earned by a specific miner/verifier address",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": false,
     "schema": {
      "description": "Positional params array or by-name object; see method description."
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "aicf_creditsByAddress_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_creditsByAddress",
    "aicf.credits_by_address"
   ],
   "description": "aicf.creditsByAddress(address) \u2192 {address, balance, spent, minted, events[]}"
  },
  {
   "name": "aicf.estimateJobCost",
   "summary": "Estimate cost of a distributed-AICF job",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "prompt_tokens",
     "required": false,
     "schema": {
      "type": "integer",
      "default": 0
     }
    },
    {
     "name": "max_output_tokens",
     "required": false,
     "schema": {
      "type": "integer",
      "default": 256
     }
    },
    {
     "name": "tier_preferred",
     "required": false,
     "schema": {
      "type": "string"
     },
     "description": "Preferred worker tier; resolved to a supported tier server-side."
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_estimateJobCost_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "cost_animica": {
       "type": "number"
      },
      "latency_ms": {
       "type": "integer"
      },
      "tier": {
       "type": "string"
      },
      "providers": {
       "type": "integer"
      },
      "schedule": {
       "type": "string"
      }
     }
    }
   }
  },
  {
   "name": "aicf.fn.delete",
   "summary": "Delete all versions of a function from the registry.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "name",
     "required": true,
     "schema": {
      "type": "string"
     }
    }
   ],
   "result": {
    "name": "aicf_fn_delete_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "Delete every version of ``name`` from the registry.\n\nIdempotent: deleting an unknown name still returns ``{\"ok\": True}`` so\nteardown scripts don't have to special-case the not-found path."
  },
  {
   "name": "aicf.fn.deploy",
   "summary": "Deploy (upsert) a Studio function; auto-increments version.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "meta",
     "required": true,
     "schema": {}
    }
   ],
   "result": {
    "name": "aicf_fn_deploy_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "Upsert a function deploy-meta by name; auto-increment its version.\n\nReturns ``{\"ok\": True, \"name\": <name>, \"version\": <n>}``. Each deploy\nrecords a new ``(name, version)`` row, so the table retains the full\nredeploy history while ``get`` / ``list`` read the latest version."
  },
  {
   "name": "aicf.fn.get",
   "summary": "Fetch the latest deploy meta for a function by name.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "name",
     "required": true,
     "schema": {
      "type": "string"
     }
    }
   ],
   "result": {
    "name": "aicf_fn_get_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "Return the latest stored deploy-meta for ``name``.\n\nRaises ``InvalidParams`` (not-found is a caller mistake) when the\nfunction has never been deployed."
  },
  {
   "name": "aicf.fn.list",
   "summary": "List the latest version of every deployed function.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "aicf_fn_list_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "List the latest version of every deployed function.\n\nReturns ``{\"items\": [...]}`` ordered by most-recently-created first.\nOnly the newest ``(name, version)`` row per name is surfaced."
  },
  {
   "name": "aicf.getClaimable",
   "summary": "Get claimable rewards for an address",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "up_to_epoch",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ]
     }
    },
    {
     "name": "include_details",
     "required": false,
     "schema": {
      "type": "boolean",
      "default": false
     }
    }
   ],
   "result": {
    "name": "aicf_getClaimable_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "aicf.getClaimable - Get claimable rewards for an address.\n\nAccepts params by name (paramStructure=by-name) or positional.\n\nParams: address (string), up_to_epoch? (int), include_details? (bool)\n\nReturns: {\n    claimable: HexQuantity,\n    epochs: [int, ...],\n    details?: [{\n        epoch: int,\n        credits: HexQuantity,\n        total_credits: HexQuantity,\n        share: HexQuantity\n    }, ...]\n}"
  },
  {
   "name": "aicf.getEpochStatus",
   "summary": "Get current epoch and payout status",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "aicf_getEpochStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_getEpochStatus"
   ],
   "description": "Get current epoch and payout accounting status.\n\nReturns:\n    {\n        \"current_epoch\": int,\n        \"current_height\": int,\n        \"epoch_start_height\": int,\n        \"epoch_end_height\": int,\n        \"blocks_until_finalization\": int,\n        \"pool_balance\": int (nano-ANM),\n        \"epoch_inflow\": int,\n        \"epoch_distributed\": int,\n        \"reserve_held\": int,\n        \"maturity_depth\": int,\n        \"epoch_length\": int\n    }"
  },
  {
   "name": "aicf.getMaturityDepth",
   "summary": "Get maturity depth configuration",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "aicf_getMaturityDepth_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_getMaturityDepth"
   ],
   "description": "Get maturity depth and finalization config.\n\nReturns:\n    {\n        \"maturity_depth_blocks\": int,\n        \"epoch_length_blocks\": int,\n        \"reserve_ratio_bps\": int,\n        \"payout_mode\": \"pull\" | \"push\",\n        \"min_claim_amount\": int,\n        \"max_claims_per_epoch\": int\n    }"
  },
  {
   "name": "aicf.getParams",
   "summary": "Get AICF configuration parameters",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "array",
      "items": {}
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "aicf_getParams_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "aicf.getParams - Get AICF configuration parameters.\n\nParams: []\n\nReturns: {\n    epoch_length_blocks: int,\n    block_reward_slice_bps: int,\n    fee_slice_bps: int,\n    ena_call_fee_base_nano: int,\n    ena_call_fee_aicf_bps: int,\n    epoch_payout_bps: int,\n    credits_per_block: int,\n    max_claim_epochs: int,\n    prune_after_epochs: int\n}"
  },
  {
   "name": "aicf.getProvider",
   "summary": "Get provider information by ID",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "provider_id",
     "required": true,
     "schema": {
      "type": "string"
     }
    }
   ],
   "result": {
    "name": "aicf_getProvider_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_getProvider"
   ],
   "description": "Get detailed provider information.\n\nArgs:\n    provider_id: Provider identifier\n\nReturns:\n    {\n        \"id\": str,\n        \"status\": str,\n        \"capabilities\": { model_family, max_context, ... },\n        \"reputation\": {\n            \"successful_jobs\": int,\n            \"failed_jobs\": int,\n            \"success_rate\": float,\n            \"avg_latency_ms\": float,\n            \"overall_score\": float\n        },\n        \"stake\": int,\n        \"bond\": int,\n        \"payout_address\": str,\n        \"created_at\": int,\n        \"last_heartbeat\": int\n    }"
  },
  {
   "name": "aicf.getProviderRewards",
   "summary": "Get accrued rewards for a provider",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "provider_id",
     "required": true,
     "schema": {
      "type": "string"
     }
    }
   ],
   "result": {
    "name": "aicf_getProviderRewards_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_getProviderRewards"
   ],
   "description": "Get provider's accrued and claimable rewards.\n\nArgs:\n    provider_id: Provider identifier\n\nReturns:\n    {\n        \"provider_id\": str,\n        \"total_accrued\": int (nano-ANM),\n        \"total_claimed\": int,\n        \"claimable\": int,\n        \"epochs\": [\n            {\n                \"epoch\": int,\n                \"accrued\": int,\n                \"claimed\": int,\n                \"is_finalized\": bool,\n                \"receipt_count\": int,\n                \"tokens_processed\": int\n            }\n        ]\n    }"
  },
  {
   "name": "aicf.getStatus",
   "summary": "Get current AICF pool status",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "array",
      "items": {}
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "aicf_getStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "aicf.getStatus - Get current AICF pool status.\n\nParams: []\n\nReturns: {\n    pool_balance: HexQuantity,\n    current_epoch: int,\n    current_height: int,\n    last_finalized_epoch: int\n}"
  },
  {
   "name": "aicf.getTrainingReceipt",
   "summary": "Get training receipt by hash",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "receipt_hash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "aicf_getTrainingReceipt_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_getTrainingReceipt"
   ],
   "description": "Get training receipt details.\n\nArgs:\n    receipt_hash: 32-byte receipt hash (hex)\n\nReturns:\n    {\n        \"receipt_hash\": str,\n        \"task_id\": str,\n        \"job_type\": str,\n        \"miner_address\": str,\n        \"provider_id\": str,\n        \"gpu_hours\": float,\n        \"cost_paid\": int,\n        \"training_credit\": int,\n        \"epochs_completed\": int,\n        \"samples_processed\": int,\n        \"is_verified\": bool\n    }"
  },
  {
   "name": "aicf.getTreasuryAddress",
   "summary": "Get the on-chain AICF treasury address for this node",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "chain_id",
     "required": false,
     "schema": {
      "type": "integer"
     },
     "description": "Defaults to the node's active chain id (1 on mainnet)."
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_getTreasuryAddress_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "treasury_address": {
       "$ref": "#/components/schemas/Address"
      },
      "chain_id": {
       "type": "integer"
      },
      "source": {
       "type": "string"
      },
      "require_settlement": {
       "type": "boolean"
      }
     }
    }
   }
  },
  {
   "name": "aicf.jobStatus",
   "summary": "Get the current status of an AICF job",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "job_id",
     "required": true,
     "schema": {
      "type": "string"
     }
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_jobStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "job_id": {
       "type": "string"
      },
      "state": {
       "type": "string",
       "description": "running | completed | failed"
      },
      "text": {
       "type": "string"
      },
      "tier": {
       "type": "string"
      },
      "provider_id": {
       "oneOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ]
      },
      "error": {
       "oneOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ]
      },
      "created_at": {
       "type": "number"
      },
      "completed_at": {
       "oneOf": [
        {
         "type": "number"
        },
        {
         "type": "null"
        }
       ]
      },
      "payment_tx_hash": {
       "oneOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ]
      },
      "payment_accepted": {
       "type": "boolean"
      },
      "payment_status": {
       "type": "string"
      }
     }
    }
   }
  },
  {
   "name": "aicf.listProviders",
   "summary": "List all registered AICF providers",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "offset",
     "required": false,
     "schema": {
      "type": "integer",
      "default": 0
     }
    },
    {
     "name": "limit",
     "required": false,
     "schema": {
      "type": "integer",
      "default": 100
     }
    },
    {
     "name": "status_filter",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "aicf_listProviders_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_listProviders"
   ],
   "description": "List registered providers with pagination.\n\nArgs:\n    offset: Pagination offset\n    limit: Max results (default 100, max 1000)\n    status_filter: Optional filter (\"active\", \"jailed\", etc.)\n\nReturns:\n    {\n        \"providers\": [{ id, status, capabilities, reputation, ... }],\n        \"total\": int,\n        \"offset\": int,\n        \"limit\": int\n    }"
  },
  {
   "name": "aicf.pipelineClaimStage",
   "summary": "Claim the next available pipeline stage for a worker",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_pipelineClaimStage_result",
    "schema": {
     "oneOf": [
      {
       "type": "object",
       "additionalProperties": true
      },
      {
       "type": "null"
      }
     ]
    }
   },
   "x-aliases": [
    "aicf_pipelineClaimStage"
   ],
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.pipelineFeedToken",
   "summary": "Final stage pushes the next-token id back to stage 0 for the next decode step",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_pipelineFeedToken_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_pipelineFeedToken"
   ],
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.pipelineGetNextTokenStep",
   "summary": "Stage 0 polls for the next token to embed for the current decode round",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_pipelineGetNextTokenStep_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_pipelineGetNextTokenStep"
   ],
   "description": "Long-poll for the next token to embed.\n\nStage 0 calls this after submitting the prefill. The response\ncarries a fresh monotonic step_index allocated atomically so two\ncompeting stage-0 workers couldn't accidentally emit the same\nstep number even when the SQLite store is shared across pool\nprocesses.\n\nParameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.pipelineGetStageInfo",
   "summary": "Resolve a pipeline stage's worker + direct endpoint for W2W transport",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_pipelineGetStageInfo_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_pipelineGetStageInfo"
   ],
   "description": "Resolve who owns a given pipeline stage and how to reach them\ndirectly. Downstream stages call this with the upstream stage's\nindex to learn the upstream worker's HTTP endpoint, then fetch the\nactivation bytes peer-to-peer. Falls back to the node-proxy path\n(aicf.pipelineGetUpstreamActivation) when the upstream worker\ndidn't advertise a reachable endpoint at registration.\n\nParameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.pipelineGetUpstreamActivation",
   "summary": "Long-poll for the upstream stage's activation",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_pipelineGetUpstreamActivation_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_pipelineGetUpstreamActivation"
   ],
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.pipelineGetUpstreamStep",
   "summary": "Long-poll for the upstream stage's output at a specific step index",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_pipelineGetUpstreamStep_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_pipelineGetUpstreamStep"
   ],
   "description": "Used by middle + final stages during streaming decode. Returns\nthe upstream's decode-step record once available. Stage 0's\n\"upstream\" is the user prompt, which is delivered via\npipelineGetNextTokenStep instead.\n\nParameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.pipelineJobStatus",
   "summary": "Get full per-stage status for a pipeline job",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_pipelineJobStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_pipelineJobStatus"
   ],
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.pipelineSubmitDecodeStep",
   "summary": "Append a decode-step output to a pipeline stage",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_pipelineSubmitDecodeStep_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_pipelineSubmitDecodeStep"
   ],
   "description": "Each pipeline stage uses this for every decode-loop iteration.\n\nIntermediate stages submit ``output_b64`` (the safetensors-encoded\nhidden state) and leave ``output_text`` empty. The final stage\nsubmits ``output_text`` (the decoded token text) plus\n``meta.is_terminal=true`` on the last step to close the job. Any\nstage may include ``meta.next_token_id`` so the inbox push happens\nin the same round-trip; this saves the final stage one RPC per\ndecoded token.\n\nParameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.pipelineSubmitStageResult",
   "summary": "Submit a worker's pipeline-stage output",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_pipelineSubmitStageResult_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_pipelineSubmitStageResult"
   ],
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.recentEvents",
   "summary": "Return recent AICF credit events (newest first)",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": false,
     "schema": {
      "description": "Positional params array or by-name object; see method description."
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "aicf_recentEvents_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_recentEvents",
    "aicf.recent_events"
   ],
   "description": "aicf.recentEvents([limit]) \u2192 {events: [...]}"
  },
  {
   "name": "aicf.registerProvider",
   "summary": "Register as an AICF provider (GPU contributor)",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "capabilities",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true
     }
    },
    {
     "name": "payout_address",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "bond_amount",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "aicf_registerProvider_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_registerProvider"
   ],
   "description": "Register as an AICF GPU provider.\n\nArgs:\n    address: Provider address (bech32m format)\n    capabilities: Provider capabilities object:\n        - model_family: str (e.g., \"nvidia-h100\")\n        - max_context: int (max tokens)\n        - throughput: int (tokens/sec)\n        - memory_gb: int (VRAM in GB)\n        - price_per_1k_input: int (optional, nano-ANM)\n        - price_per_1k_output: int (optional, nano-ANM)\n    payout_address: Optional payout address (defaults to provider address)\n    bond_amount: Optional anti-spam bond (nano-ANM)\n\nReturns:\n    {\n        \"provider_id\": str,\n        \"status\": str,\n        \"registered_at\": int (timestamp),\n        \"bond_required\": int (if applicable)\n    }\n\nRaises:\n    RpcError: If registration fails (insufficient bond, not allowlisted, etc.)"
  },
  {
   "name": "aicf.settleJob",
   "summary": "Settle and return final result for a completed AICF job",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "job_id",
     "required": true,
     "schema": {
      "type": "string"
     }
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_settleJob_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "text": {
       "type": "string"
      },
      "cost_animica": {
       "type": "number"
      },
      "provider_id": {
       "type": "string"
      },
      "settled": {
       "type": "boolean"
      },
      "latency_ms": {
       "type": "integer"
      },
      "state": {
       "type": "string"
      },
      "error": {
       "oneOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ]
      },
      "payment_tx_hash": {
       "oneOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ]
      },
      "payment_accepted": {
       "type": "boolean"
      },
      "payment_status": {
       "type": "string"
      }
     }
    }
   }
  },
  {
   "name": "aicf.status",
   "summary": "Get AICF status in standard schema",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": false,
     "schema": {
      "description": "Positional params array or by-name object; see method description."
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "aicf_status_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_status",
    "aicf.getStatus",
    "aicf_getStatus"
   ],
   "description": "aicf.status - Get AICF pool status in the standard status schema.\n\nReturns: {enabled, ok, reason, message, details}"
  },
  {
   "name": "aicf.streamJob",
   "summary": "Stream chunks for an in-flight AICF job",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "job_id",
     "required": true,
     "schema": {
      "type": "string"
     }
    },
    {
     "name": "cursor",
     "required": false,
     "schema": {
      "type": "integer",
      "default": 0
     },
     "description": "Character offset already received; long-polls up to ~1.5 s for new text."
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_streamJob_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "text": {
       "type": "string"
      },
      "final": {
       "type": "boolean"
      },
      "next_cursor": {
       "type": "integer"
      },
      "token_count": {
       "type": "integer"
      },
      "state": {
       "type": "string"
      }
     }
    }
   }
  },
  {
   "name": "aicf.submitInferenceJob",
   "summary": "Submit a distributed-AICF inference job",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "spec",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true,
      "properties": {
       "prompt": {
        "type": "string"
       },
       "tier_preferred": {
        "type": "string"
       },
       "max_output_tokens": {
        "type": "integer"
       },
       "replicas": {
        "type": "integer",
        "minimum": 1,
        "maximum": 16
       },
       "mode": {
        "type": "string"
       }
      }
     },
     "description": "Job spec; spec.prompt is required."
    },
    {
     "name": "payment",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true
     },
     "description": "Payment object (on-chain payment reference)."
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_submitInferenceJob_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "job_id": {
       "type": "string"
      }
     },
     "description": "Job handle; poll with aicf.jobStatus / aicf.streamJob, finish with aicf.settleJob."
    }
   }
  },
  {
   "name": "aicf.submitTrainingReceipt",
   "summary": "Submit training contribution receipt for miner credit",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "receipt_cbor",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    }
   ],
   "result": {
    "name": "aicf_submitTrainingReceipt_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_submitTrainingReceipt"
   ],
   "description": "Submit a training receipt for miner AICF credit.\n\nArgs:\n    receipt_cbor: Hex-encoded CBOR serialized TrainingReceipt\n\nReturns:\n    {\n        \"receipt_hash\": str,\n        \"training_credit\": int,\n        \"miner_address\": str,\n        \"provider_id\": str,\n        \"anchored_at_height\": int\n    }"
  },
  {
   "name": "aicf.summary",
   "summary": "Return a high-level AICF summary: totals, event count, recent activity",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": false,
     "schema": {
      "description": "Positional params array or by-name object; see method description."
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "aicf_summary_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_summary"
   ],
   "description": "aicf.summary \u2192 {total_minted, total_spent, balance, event_count, recent_events[5]}"
  },
  {
   "name": "aicf.topUp",
   "summary": "Governance-only method to add funds to AICF pool",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "array",
      "items": {}
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "aicf_topUp_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "aicf.topUp - Governance-only method to add funds to AICF pool.\n\nParams: [amount: HexQuantity]\n\nReturns: {\n    success: bool,\n    message: string\n}\n\nNOTE: This requires governance/admin permissions."
  },
  {
   "name": "aicf.work.approvePayout",
   "summary": "Approve + execute a payout (one per result).",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_approvePayout_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.claimNext",
   "summary": "Lease the next eligible task to a worker.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_claimNext_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.createJob",
   "summary": "Create a useful-work job (idempotent on idempotencyKey).",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_createJob_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.getJob",
   "summary": "Fetch a job with its tasks / claims / results / payouts.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_getJob_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.getWorker",
   "summary": "aicf.work.getWorker",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_getWorker_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.heartbeatClaim",
   "summary": "Keep an active claim's lease alive.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_heartbeatClaim_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.heartbeatWorker",
   "summary": "Mark a worker as live; bumps lastSeenAt.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_heartbeatWorker_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.listJobs",
   "summary": "List open or planning jobs (most recent first).",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_listJobs_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.listPendingVerifications",
   "summary": "aicf.work.listPendingVerifications",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_listPendingVerifications_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.listWorkers",
   "summary": "aicf.work.listWorkers",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_listWorkers_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.registerWorker",
   "summary": "Register or refresh a worker by (wallet, machineId).",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_registerWorker_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.releaseClaim",
   "summary": "Release a claim back to the open pool.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_releaseClaim_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.submitResult",
   "summary": "Submit a worker result (idempotent on resultHash).",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_submitResult_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.work.verifyResult",
   "summary": "Record a verification verdict for a result.",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [],
   "result": {
    "name": "aicf_work_verifyResult_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "description": "Parameters are passed as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "aicf.workerClaimNextJob",
   "summary": "Claim the next pending AICF job",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "tiers",
     "required": false,
     "schema": {
      "type": "array",
      "items": {
       "type": "string"
      }
     }
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_workerClaimNextJob_result",
    "schema": {
     "oneOf": [
      {
       "type": "object",
       "additionalProperties": true
      },
      {
       "type": "null"
      }
     ],
     "description": "Next claimable job, or null when none is pending."
    }
   },
   "x-aliases": [
    "aicf_workerClaimNextJob"
   ]
  },
  {
   "name": "aicf.workerEarnings",
   "summary": "Get pending and paid AICF earnings for a worker address",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_workerEarnings_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_workerEarnings"
   ],
   "description": "Per-worker earnings ledger.\n\n``earnings_pending_animica`` accumulates each completed-job cost; it\nrepresents value the worker has earned but which has not been swept\nfrom the on-chain treasury into the AICF state pool yet. That sweep\nis a future consensus-level operation \u2014 when wired, the pending\namount becomes claimable via the existing aicf.claim / aicf.getClaimable\nflow.\n\nUntil then, this ledger is the canonical reference for \"what does\nthe network owe me.\" Persistence is in-memory and resets on node\nrestart, just like the rest of the AICF job queue."
  },
  {
   "name": "aicf.workerRegister",
   "summary": "Register a worker to claim AICF jobs",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "tiers",
     "required": false,
     "schema": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "description": "Tiers the worker can serve (empty = any)."
    },
    {
     "name": "hardware",
     "required": false,
     "schema": {
      "type": "object",
      "additionalProperties": true
     }
    },
    {
     "name": "direct_endpoint",
     "required": false,
     "schema": {
      "type": "string"
     },
     "description": "Optional reachable HTTP endpoint for worker-to-worker transport."
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_workerRegister_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_workerRegister"
   ]
  },
  {
   "name": "aicf.workerStatus",
   "summary": "Get status of a registered AICF worker",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_workerStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "registered": {
       "type": "boolean"
      },
      "address": {
       "$ref": "#/components/schemas/Address"
      }
     }
    }
   },
   "x-aliases": [
    "aicf_workerStatus"
   ]
  },
  {
   "name": "aicf.workerSubmitResult",
   "summary": "Submit the result of a claimed AICF job",
   "tags": [
    {
     "name": "aicf"
    }
   ],
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "job_id",
     "required": true,
     "schema": {
      "type": "string"
     }
    },
    {
     "name": "text",
     "required": false,
     "schema": {
      "type": "string"
     }
    }
   ],
   "paramStructure": "by-name",
   "result": {
    "name": "aicf_workerSubmitResult_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "aicf_workerSubmitResult"
   ]
  },
  {
   "name": "chain.getBlockByHash",
   "summary": "Get a block by hash. Params: (hash, includeTxObjects: bool=false, includeReceipts: bool=false)",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "blockHash",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    },
    {
     "name": "includeTxObjects",
     "required": false,
     "schema": {
      "type": "boolean",
      "default": false
     }
    },
    {
     "name": "includeReceipts",
     "required": false,
     "schema": {
      "type": "boolean",
      "default": false
     }
    },
    {
     "name": "includeTx",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "boolean"
       },
       {
        "type": "null"
       }
      ]
     }
    },
    {
     "name": "hash",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "chain_getBlockByHash_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "x-aliases": [
    "eth_getBlockByHash",
    "block_getBlockByHash"
   ],
   "description": "blockHash must be a hex string (0x\u2026).\nReturns a JSON object or null if not found."
  },
  {
   "name": "chain.getBlockByHeight",
   "summary": "Get a block by height (alias for getBlockByNumber). Params: (height, includeTxObjects: bool=false, includeReceipts: bool=false)",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "height",
     "required": true,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "string"
       }
      ]
     }
    },
    {
     "name": "includeTxObjects",
     "required": false,
     "schema": {
      "type": "boolean",
      "default": false
     }
    },
    {
     "name": "includeReceipts",
     "required": false,
     "schema": {
      "type": "boolean",
      "default": false
     }
    },
    {
     "name": "includeTx",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "boolean"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "chain_getBlockByHeight_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "x-aliases": [
    "block_getBlockByHeight"
   ],
   "description": "Alias for chain.getBlockByNumber that explicitly accepts height parameter.\nAccepts int, hex string (0x\u2026), decimal string, or 'latest'/'earliest'.\nReturns a JSON object or null if not found."
  },
  {
   "name": "chain.getBlockByNumber",
   "summary": "Get a block by number. Params: (number, includeTxObjects: bool=false, includeReceipts: bool=false)",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "number",
     "required": true,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "string"
       }
      ]
     }
    },
    {
     "name": "includeTxObjects",
     "required": false,
     "schema": {
      "type": "boolean",
      "default": false
     }
    },
    {
     "name": "includeReceipts",
     "required": false,
     "schema": {
      "type": "boolean",
      "default": false
     }
    },
    {
     "name": "includeTx",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "boolean"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "chain_getBlockByNumber_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "x-aliases": [
    "eth_getBlockByNumber",
    "block_getBlockByNumber"
   ],
   "description": "number can be an int, hex string (0x\u2026), decimal string, or 'latest'/'earliest'/'pending'.\nReturns a JSON object or null if not found.\n\nFor 'pending', returns a synthetic block with pending transactions from mempool."
  },
  {
   "name": "chain.getChainId",
   "summary": "Return the active chainId for this node.",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "chain_getChainId_result",
    "schema": {
     "type": "integer"
    }
   },
   "x-aliases": [
    "eth_chainId",
    "chain_getChainId"
   ],
   "description": "Returns the numeric chainId (e.g., 1 for animica mainnet)."
  },
  {
   "name": "chain.getChainIdentity",
   "summary": "Return the full chain identity (chainId + genesis/fork/consensus/protocol).",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "chain_getChainIdentity_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "chain_getChainIdentity"
   ],
   "description": "Returns an object:\n  { chainId, genesisHash, genesisHeaderHash, genesisBlockHash, forkId, consensusId, protocolVersion }."
  },
  {
   "name": "chain.getCheckpoints",
   "summary": "Return built-in checkpoints for the requested chain.",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "chain_id",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "chain_getCheckpoints_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "chain_getCheckpoints"
   ],
   "description": "Returns a list of built-in checkpoints suitable for bootstrap syncing."
  },
  {
   "name": "chain.getForks",
   "summary": "Return fork-choice tips (top competing branches).",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "limit",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "chain_getForks_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "chain_getForks"
   ]
  },
  {
   "name": "chain.getHead",
   "summary": "Return the current best head (height + header view).",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "chain_getHead_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "height": {
       "type": "integer"
      },
      "number": {
       "type": "integer"
      },
      "hash": {
       "$ref": "#/components/schemas/Hash32"
      },
      "chainId": {
       "type": "integer"
      },
      "thetaMicro": {
       "type": "integer"
      },
      "mixSeed": {
       "$ref": "#/components/schemas/Hash32"
      },
      "nonce": {
       "type": "integer"
      },
      "roots": {
       "type": "object",
       "additionalProperties": true,
       "properties": {
        "stateRoot": {
         "$ref": "#/components/schemas/Hash32"
        },
        "txsRoot": {
         "$ref": "#/components/schemas/Hash32"
        },
        "receiptsRoot": {
         "$ref": "#/components/schemas/Hash32"
        },
        "proofsRoot": {
         "$ref": "#/components/schemas/Hash32"
        },
        "daRoot": {
         "$ref": "#/components/schemas/Hash32"
        }
       }
      }
     },
     "description": "Current best head. Live-verified against https://rpc.animica.org/rpc on 2026-08-14."
    }
   },
   "x-aliases": [
    "chain_getHead"
   ],
   "x-verified-live": "2026-08-14",
   "description": "Returns an object: { height, canonicalHeight, hash, chainId, thetaMicro, mixSeed, nonce, roots }\nThe 'hash' field is computed from canonical sign-bytes when available."
  },
  {
   "name": "chain.getNetworkHashrate",
   "summary": "Estimate network hashrate over a recent window.",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "window_blocks",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "chain_getNetworkHashrate_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "chain_getNetworkHashrate"
   ]
  },
  {
   "name": "chain.getParams",
   "summary": "Return canonical chain/economic/consensus parameters.",
   "tags": [
    {
     "name": "chain"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "chain_getParams_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "name": {
       "type": "string"
      },
      "symbol": {
       "type": "string"
      },
      "decimals": {
       "type": "integer"
      },
      "genesis_time_utc": {
       "type": "string"
      },
      "system_addresses": {
       "type": "object",
       "additionalProperties": true
      },
      "aicf": {
       "type": "object",
       "additionalProperties": true
      }
     },
     "description": "Canonical chain/economic/consensus parameters (subset of spec/params.yaml). Live-verified against https://rpc.animica.org/rpc on 2026-08-14."
    }
   },
   "x-aliases": [
    "chain_getParams"
   ],
   "x-verified-live": "2026-08-14",
   "description": "Returns the chain parameters loaded by the node (subset of spec/params.yaml)."
  },
  {
   "name": "faucet.request",
   "summary": "DEVNET/TESTNET ONLY \u2014 not available on mainnet. Request test funds from the devnet/testnet faucet. NOT AVAILABLE ON MAINNET. Credits the specified address with tokens directly (no block production required). Default amount: 500,000,000 ANM (5000000",
   "tags": [
    {
     "name": "faucet"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "amount",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "faucet_request_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-devnet-only": true,
   "description": "This method exists only on devnet/testnet nodes. There is NO faucet on Animica mainnet; calling it against https://rpc.animica.org/rpc will not credit funds. To acquire ANM: mine via pool.animica.org, trade on NonKYC (https://nonkyc.io/market/ANM_USDT), or accept payments via pay.animica.dev.\n\nRequest test funds from the faucet (devnet/testnet only).\n\nArgs:\n    address: Recipient address (bech32m anim1... or hex 0x...)\n    amount: Optional amount in base units (default: 500,000,000 ANM)\n\nReturns:\n    {\n        \"address\": str,        # recipient address (as provided)\n        \"amount\": str,         # amount credited (hex quantity)\n        \"balance\": str,        # new balance after credit (hex quantity)\n        \"message\": str         # confirmation message\n    }\n\nRaises:\n    RpcError: If called on mainnet (chainId == 1)\n    InvalidParams: If address is invalid or amount is negative"
  },
  {
   "name": "l2_chainId",
   "summary": "L2 chain id",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "l2_chainId_result",
    "schema": {
     "type": "integer"
    }
   }
  },
  {
   "name": "l2_estimateFee",
   "summary": "Estimate the fee (nanos) for a signed-or-draft L2 tx",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "raw",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    }
   ],
   "result": {
    "name": "l2_estimateFee_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getAccountProof",
   "summary": "SMT membership/non-membership proof for an address",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    }
   ],
   "result": {
    "name": "l2_getAccountProof_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getBalance",
   "summary": "L2 (instant) ANM balance for an address, in nanos",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    }
   ],
   "result": {
    "name": "l2_getBalance_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getBatch",
   "summary": "Batch header by number",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "number",
     "required": false,
     "schema": {
      "type": "integer",
      "description": "Batch number."
     }
    }
   ],
   "result": {
    "name": "l2_getBatch_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   }
  },
  {
   "name": "l2_getBatchData",
   "summary": "DA blob (0x-hex) for a batch \u2014 reconstructs the batch",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "number",
     "required": false,
     "schema": {
      "type": "integer",
      "description": "Batch number."
     }
    }
   ],
   "result": {
    "name": "l2_getBatchData_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   }
  },
  {
   "name": "l2_getDeposit",
   "summary": "Deposit record by id",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "deposit_id",
     "required": false,
     "schema": {
      "type": "string"
     }
    }
   ],
   "result": {
    "name": "l2_getDeposit_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   }
  },
  {
   "name": "l2_getMetrics",
   "summary": "Full L2 metrics snapshot",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "l2_getMetrics_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getNonce",
   "summary": "Next L2 nonce (pending-aware) for an address",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    }
   ],
   "result": {
    "name": "l2_getNonce_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getProofStatus",
   "summary": "Proof presence for a batch",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "number",
     "required": false,
     "schema": {
      "type": "integer",
      "description": "Batch number."
     }
    }
   ],
   "result": {
    "name": "l2_getProofStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getReceipt",
   "summary": "Execution receipt for an L2 tx by id",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txid",
     "required": false,
     "schema": {
      "type": "string",
      "description": "L2 transaction id (0x-hex)."
     }
    }
   ],
   "result": {
    "name": "l2_getReceipt_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "x-aliases": [
    "l2_getTransactionReceipt"
   ]
  },
  {
   "name": "l2_getSequencerStatus",
   "summary": "Sequencer queue + backend status",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "l2_getSequencerStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getStateRoot",
   "summary": "Current L2 state root",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "l2_getStateRoot_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getSyncStatus",
   "summary": "Sync/head status",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "l2_getSyncStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getTPS",
   "summary": "Throughput snapshot (ingress/executed/soft/settled)",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "l2_getTPS_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_getTransaction",
   "summary": "Lifecycle status of an L2 tx by id",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txid",
     "required": false,
     "schema": {
      "type": "string",
      "description": "L2 transaction id (0x-hex)."
     }
    }
   ],
   "result": {
    "name": "l2_getTransaction_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   }
  },
  {
   "name": "l2_getWithdrawalProof",
   "summary": "Proof data a user needs to claim a withdrawal on L1",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "nullifier",
     "required": false,
     "schema": {
      "type": "string"
     }
    }
   ],
   "result": {
    "name": "l2_getWithdrawalProof_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   }
  },
  {
   "name": "l2_prepareTransfer",
   "summary": "Build the canonical body + signing hash for a TRANSFER/PAY/WITHDRAW. Wallet signs signingHash with its ML-DSA-65 key, then calls l2_submitSigned.",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "kind",
     "required": false,
     "schema": {
      "type": "string",
      "description": "transfer | pay | withdraw",
      "default": "transfer"
     }
    },
    {
     "name": "sender",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "recipient",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "amount",
     "required": false,
     "schema": {
      "type": "integer",
      "description": "Amount in base units (nano-ANM)."
     }
    },
    {
     "name": "memo",
     "required": false,
     "schema": {
      "type": "string",
      "default": ""
     }
    },
    {
     "name": "nonce",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ]
     }
    },
    {
     "name": "fee",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ],
      "description": "Fee in base units (nano-ANM); node estimates when omitted."
     }
    },
    {
     "name": "expiry",
     "required": false,
     "schema": {
      "type": "integer",
      "default": 0
     }
    }
   ],
   "result": {
    "name": "l2_prepareTransfer_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_sendRawTransaction",
   "summary": "Submit one signed L2 tx (0x-hex). Returns txid.",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "raw",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    }
   ],
   "result": {
    "name": "l2_sendRawTransaction_result",
    "schema": {
     "type": "string"
    }
   }
  },
  {
   "name": "l2_sendRawTransactions",
   "summary": "Submit many signed L2 txs in one call (high-throughput batch ingress).",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txs",
     "required": false,
     "schema": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/HexData"
      }
     }
    }
   ],
   "result": {
    "name": "l2_sendRawTransactions_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "l2_status",
   "summary": "L2 node/sequencer status summary",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "l2_status_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "enabled": {
       "type": "boolean"
      },
      "mode": {
       "type": "string"
      },
      "l2ChainId": {
       "type": "integer",
       "description": "L2 chain id (1001 on mainnet; distinct from L1 chainId 1)."
      },
      "settlementMode": {
       "type": "string"
      },
      "headBatch": {
       "type": "integer"
      },
      "stateRoot": {
       "$ref": "#/components/schemas/Hash32"
      },
      "pending": {
       "type": "integer"
      },
      "sigBackend": {
       "type": "string"
      },
      "bridgeAddress": {
       "$ref": "#/components/schemas/Address"
      },
      "depositsEnabled": {
       "type": "boolean"
      },
      "bridge": {
       "type": "object",
       "additionalProperties": true
      }
     },
     "description": "L2 node/sequencer status summary. Live-verified against https://rpc.animica.org/rpc on 2026-08-14."
    }
   },
   "x-verified-live": "2026-08-14"
  },
  {
   "name": "l2_submitSigned",
   "summary": "Assemble a signed envelope from a prepared body + wallet pubkey/signature and submit it. Returns the txid.",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "body",
     "required": false,
     "schema": {
      "type": "object",
      "additionalProperties": true,
      "description": "Prepared tx body from l2_prepareTransfer."
     }
    },
    {
     "name": "pubkey",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    },
    {
     "name": "signature",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    }
   ],
   "result": {
    "name": "l2_submitSigned_result",
    "schema": {
     "type": "string"
    }
   }
  },
  {
   "name": "l2_verifyBatch",
   "summary": "Re-verify a committed batch's proof from its DA blob (trustless check)",
   "tags": [
    {
     "name": "l2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "number",
     "required": false,
     "schema": {
      "type": "integer",
      "description": "Batch number."
     }
    }
   ],
   "result": {
    "name": "l2_verifyBatch_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "mempool.add",
   "summary": "Compatibility shim for old mempool.add \u2192 tx.submitRawTransaction.",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "mempool_add_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "deprecated": true,
   "description": "Compatibility shim; use tx.sendRawTransaction / tx.submitRawTransaction."
  },
  {
   "name": "mempool.dropTransaction",
   "summary": "Drop a pending transaction by hash.",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "tx_hash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "mempool_dropTransaction_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "mempool_dropTransaction"
   ]
  },
  {
   "name": "mempool.explain",
   "summary": "Explain whether a pending transaction is mineable and why.",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "tx_hash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "mempool_explain_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "mempool_explain"
   ]
  },
  {
   "name": "mempool.get",
   "summary": "Compatibility shim for old mempool.get \u2192 tx.get.",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "mempool_get_result",
    "schema": {
     "oneOf": [
      {
       "type": "object",
       "additionalProperties": true
      },
      {
       "type": "null"
      }
     ]
    }
   },
   "deprecated": true,
   "description": "Compatibility shim; use tx.get / tx.getTransactionByHash."
  },
  {
   "name": "mempool.getInfo",
   "summary": "Return mempool service identity and persistence path (if available).",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "mempool_getInfo_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "mempool.getPending",
   "summary": "List pending transaction hashes currently held by the node.",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "verbose",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "boolean"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "mempool_getPending_result",
    "schema": {
     "type": "array",
     "items": {}
    }
   },
   "x-aliases": [
    "mempool_pending"
   ]
  },
  {
   "name": "mempool.getRawTx",
   "summary": "Return raw CBOR bytes for a pending transaction hash (hex string).",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "tx_hash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "mempool_getRawTx_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "mempool_getRawTx"
   ]
  },
  {
   "name": "mempool.getStats",
   "summary": "Return summary stats for the pending pool (count/bytes/age).",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "mempool_getStats_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "count": {
       "type": "integer"
      },
      "totalBytes": {
       "type": "integer"
      },
      "oldestAgeSec": {
       "oneOf": [
        {
         "type": "integer"
        },
        {
         "type": "null"
        }
       ]
      }
     },
     "description": "Summary stats for the pending pool. Live-verified against https://rpc.animica.org/rpc on 2026-08-14."
    }
   },
   "x-aliases": [
    "mempool_stats"
   ],
   "x-verified-live": "2026-08-14"
  },
  {
   "name": "mempool.getStatus",
   "summary": "Return whether a transaction is known to the mempool and its current state.",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "tx_hash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "mempool_getStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "mempool_getStatus"
   ]
  },
  {
   "name": "mempool.list",
   "summary": "Compatibility shim for old mempool.list \u2192 tx.pending.",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "mempool_list_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "deprecated": true,
   "description": "Compatibility shim; use tx.pending / mempool.getPending."
  },
  {
   "name": "mempool.listRawTxs",
   "summary": "List pending transactions with raw CBOR hex payloads.",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "limit",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "null"
       }
      ]
     }
    }
   ],
   "result": {
    "name": "mempool_listRawTxs_result",
    "schema": {
     "type": "array",
     "items": {}
    }
   },
   "x-aliases": [
    "mempool_listRawTxs"
   ]
  },
  {
   "name": "mempool.simulateAdmission",
   "summary": "Simulate mempool admission for a signed CBOR tx without insertion.",
   "tags": [
    {
     "name": "mempool"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "rawTx",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    }
   ],
   "result": {
    "name": "mempool_simulateAdmission_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   }
  },
  {
   "name": "net.getBootstrapSeeds",
   "summary": "Return canonical bootstrap seeds for the active network",
   "tags": [
    {
     "name": "net"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "net_getBootstrapSeeds_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "net.peerCount",
   "summary": "Return the number of connected peers",
   "tags": [
    {
     "name": "net"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "net_peerCount_result",
    "schema": {
     "type": "integer"
    }
   },
   "x-aliases": [
    "p2p.peerCount"
   ]
  },
  {
   "name": "net.peers",
   "summary": "Return a snapshot of connected peers",
   "tags": [
    {
     "name": "net"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "net_peers_result",
    "schema": {
     "type": "array",
     "items": {}
    }
   },
   "x-aliases": [
    "p2p.netPeers"
   ]
  },
  {
   "name": "state.call",
   "summary": "Read-only contract simulation call. Accepts payload {to,data,from?} or positional [to,data,from?,block?]. Returns ABI-encoded return bytes as 0x-hex.",
   "tags": [
    {
     "name": "state"
    }
   ],
   "params": [
    {
     "name": "to",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     },
     "description": "Contract address to call."
    },
    {
     "name": "data",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     },
     "description": "ABI-encoded call data (0x-hex)."
    },
    {
     "name": "from",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Address"
     },
     "description": "Optional caller address."
    },
    {
     "name": "block",
     "required": false,
     "schema": {
      "oneOf": [
       {
        "type": "integer"
       },
       {
        "type": "string"
       }
      ]
     },
     "description": "Optional block tag or height."
    }
   ],
   "paramStructure": "either",
   "result": {
    "name": "state_call_result",
    "schema": {
     "description": "ABI-encoded return bytes as 0x-hex.",
     "$ref": "#/components/schemas/HexData"
    }
   },
   "x-aliases": [
    "execution.simulateCall",
    "vm.simulateCall",
    "state.simulateCall",
    "call.simulate",
    "contracts.simulate"
   ],
   "description": "Also accepts a single payload object {to, data, from?} or positional [to, data, from?, block?]."
  },
  {
   "name": "state.getAccount",
   "summary": "Return the full account state (address, balance) for an address. Useful for debugging.",
   "tags": [
    {
     "name": "state"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "tag",
     "required": false,
     "schema": {
      "type": "string",
      "default": "latest"
     }
    }
   ],
   "result": {
    "name": "state_getAccount_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "state_getAccount"
   ],
   "description": "Get full account state for an address.\n\nArgs:\n    address: Address in bech32 (anim1...), system:... or hex (0x...) format\n    tag: Block tag (latest, pending, safe, finalized)\n    \nReturns:\n    dict: {\n        \"address\": str,     # Original address format\n        \"balance\": str,     # Balance in hex (e.g., \"0x0\" for 0 nANM)\n    }"
  },
  {
   "name": "state.getAddressBalance",
   "summary": "Return a rich balance object for an address with unit info, availability flags, and head context. Stable schema for Studio and Explorer integration.",
   "tags": [
    {
     "name": "state"
    }
   ],
   "x-dynamic-params": true,
   "paramStructure": "by-name",
   "params": [
    {
     "name": "address",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    }
   ],
   "result": {
    "name": "state_getAddressBalance_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "wallet.getAddressBalance",
    "account.getBalance"
   ],
   "description": "Return stable balance schema for Studio/Explorer:\n{\n  address, exists, confirmed_balance, pending_incoming, pending_outgoing,\n  spendable_balance, unit, display_decimals, as_of_head_height, as_of_head_hash\n}\n\nZero balance is explicit (exists=true, confirmed_balance=\"0\").\nInvalid address returns INVALID_PARAMS error.\nTemporarily unavailable returns structured service error.\n\nAdditional parameters are accepted as a by-name object; field names are method-specific (loose schema \u2014 additionalProperties true)."
  },
  {
   "name": "state.getAicfMinerCredits",
   "summary": "Get AICF credit balance for a specific miner address",
   "tags": [
    {
     "name": "state"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    }
   ],
   "result": {
    "name": "state_getAicfMinerCredits_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "Get AICF credit balance and statistics for a miner.\n\nArgs:\n    address: Miner address (hex, bech32, or system format)\n\nReturns:\n    Dict with:\n    - miner_address: Normalized miner address\n    - balance: Current AICF credit balance\n    - lifetime_earned: Total credits ever earned\n    - lifetime_spent: Total credits ever spent\n    - last_mint_height: Last block height that minted credits\n    - last_mint_hash: Last block hash that minted credits"
  },
  {
   "name": "state.getAicfSummary",
   "summary": "Get global AICF credit totals and summary statistics",
   "tags": [
    {
     "name": "state"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "state_getAicfSummary_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "Get global AICF credit accounting summary.\n\nReturns:\n    Dict with:\n    - balance_total: Total AICF credits available\n    - minted_total: Total credits minted from mining\n    - spent_total: Total credits spent on jobs\n    - last_update_height: Last block height that updated credits\n    - last_update_hash: Last block hash that updated credits"
  },
  {
   "name": "state.getBalance",
   "summary": "Return the account balance for an address at a given block tag. Returns a hex quantity string (e.g. 0x0).",
   "tags": [
    {
     "name": "state"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "tag",
     "required": false,
     "schema": {
      "type": "string",
      "default": "latest"
     }
    }
   ],
   "result": {
    "name": "state_getBalance_result",
    "schema": {
     "type": "string"
    }
   }
  },
  {
   "name": "state.getNextNonce",
   "summary": "Return the next usable nonce for an address, accounting for pending mempool transactions.",
   "tags": [
    {
     "name": "state"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    }
   ],
   "result": {
    "name": "state_getNextNonce_result",
    "schema": {
     "type": "integer"
    }
   },
   "x-aliases": [
    "state_getNextNonce"
   ]
  },
  {
   "name": "state.getNonce",
   "summary": "Return the account nonce for an address at a given block tag (latest|pending).",
   "tags": [
    {
     "name": "state"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    },
    {
     "name": "tag",
     "required": false,
     "schema": {
      "type": "string",
      "default": "latest"
     }
    }
   ],
   "result": {
    "name": "state_getNonce_result",
    "schema": {
     "type": "integer"
    }
   }
  },
  {
   "name": "state.getPendingNonce",
   "summary": "Return the next usable nonce for an address, accounting for pending mempool transactions.",
   "tags": [
    {
     "name": "state"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "address",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Address"
     }
    }
   ],
   "result": {
    "name": "state_getPendingNonce_result",
    "schema": {
     "type": "integer"
    }
   },
   "x-aliases": [
    "state_getPendingNonce"
   ]
  },
  {
   "name": "state.getRichList",
   "summary": "Return addresses sorted by balance (descending). Supports pagination with limit/offset.",
   "tags": [
    {
     "name": "state"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "limit",
     "required": false,
     "schema": {
      "type": "integer",
      "default": 100
     }
    },
    {
     "name": "offset",
     "required": false,
     "schema": {
      "type": "integer",
      "default": 0
     }
    }
   ],
   "result": {
    "name": "state_getRichList_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "Get rich list - addresses sorted by balance in descending order.\n\nArgs:\n    limit: Maximum number of addresses to return (default: 100, max: 1000)\n    offset: Number of addresses to skip (for pagination)\n    \nReturns:\n    dict: {\n        \"height\": int,              # Chain height when list was generated\n        \"totalAddresses\": int,      # Total number of non-zero balance addresses\n        \"items\": [\n            {\n                \"rank\": int,        # Position in ranking (1-indexed)\n                \"address\": str,     # Address in bech32 format\n                \"balance\": str,     # Balance in hex (e.g., \"0x1234\")\n            }\n        ]\n    }"
  },
  {
   "name": "state.getTotalSupply",
   "summary": "Return the total supply (sum of all account balances).",
   "tags": [
    {
     "name": "state"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "state_getTotalSupply_result",
    "schema": {
     "type": "object",
     "additionalProperties": true,
     "properties": {
      "height": {
       "type": "integer"
      },
      "totalSupply": {
       "$ref": "#/components/schemas/HexQuantity"
      },
      "addressCount": {
       "type": "integer"
      }
     },
     "description": "Total supply as the sum of all account balances. Live-verified against https://rpc.animica.org/rpc on 2026-08-14."
    }
   },
   "x-verified-live": "2026-08-14",
   "description": "Get total supply by summing all account balances.\n\nReturns:\n    dict: {\n        \"height\": int,           # Chain height when computed\n        \"totalSupply\": str,      # Total supply in hex\n        \"addressCount\": int,     # Number of accounts with non-zero balance\n    }"
  },
  {
   "name": "tx.debugSignHash",
   "summary": "Compute canonical body/sign-bytes/sign-hash for tx body.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "tx_body",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true
     }
    }
   ],
   "result": {
    "name": "tx_debugSignHash_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "tx.debugSigningPreimage",
   "summary": "Return canonical tx signing preimage diagnostics.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txid",
     "required": true,
     "schema": {
      "type": "string"
     }
    }
   ],
   "result": {
    "name": "tx_debugSigningPreimage_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "tx.debugSignBytes",
    "tx_debugSignBytes"
   ]
  },
  {
   "name": "tx.debugVerify",
   "summary": "Verify tx signature diagnostics by txid/rawTx or explicit tx+sig fields.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "target",
     "required": true,
     "schema": {}
    }
   ],
   "result": {
    "name": "tx_debugVerify_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "tx.debugVerifyRawTransaction",
   "summary": "Decode and verify a raw PQ transaction without admitting it to the mempool.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "rawTx",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    }
   ],
   "result": {
    "name": "tx_debugVerifyRawTransaction_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "tx_debugVerifyRawTransaction"
   ]
  },
  {
   "name": "tx.decodeRawTransaction",
   "summary": "Decode a raw CBOR-encoded transaction without signature verification.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "rawTx",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    }
   ],
   "result": {
    "name": "tx_decodeRawTransaction_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "tx_decodeRawTransaction"
   ]
  },
  {
   "name": "tx.explainNotIncluded",
   "summary": "Explain why a transaction is not included in a block yet.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "tx_hash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "tx_explainNotIncluded_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "tx_explainNotIncluded"
   ]
  },
  {
   "name": "tx.explainReject",
   "summary": "Explain why a transaction would be rejected by the mempool",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "description": "Positional params array or by-name object; see method description."
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "tx_explainReject_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "debug.explainReject",
    "tx.explain_reject"
   ],
   "description": "Dry-run validation for a transaction to explain why it would be rejected.\n\nThis is useful for debugging transaction submission issues without actually\nsubmitting the transaction to the mempool.\n\nArgs:\n    params: Either raw transaction bytes (hex string) or dict with \"raw\" key\n\nReturns:\n    {\n        \"valid\": bool,\n        \"reason\": str | null,\n        \"details\": {\n            \"chain_id\": int | null,\n            \"sender\": str | null,\n            \"nonce\": int | null,\n            \"gas_limit\": int | null,\n            \"checks\": {\n                \"chain_id_match\": bool,\n                \"sender_valid\": bool,\n                \"nonce_valid\": bool,\n                \"balance_sufficient\": bool,\n                \"gas_price_sufficient\": bool,\n                \"signature_valid\": bool\n            }\n        }\n    }"
  },
  {
   "name": "tx.get",
   "summary": "Get a transaction by ID from PTL.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "description": "Positional params array or by-name object; see method description."
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "tx_get_result",
    "schema": {
     "oneOf": [
      {
       "type": "object",
       "additionalProperties": true
      },
      {
       "type": "null"
      }
     ]
    }
   },
   "description": "Get a transaction by ID from PTL.\n\nArgs:\n    params: {\"txid\": transaction ID (hex)}\n\nReturns:\n    Transaction details or None if not found"
  },
  {
   "name": "tx.getInstantReceipt",
   "summary": "Return instant tx block receipt for a transaction hash.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txHash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "tx_getInstantReceipt_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "tx_getInstantReceipt"
   ]
  },
  {
   "name": "tx.getStatus",
   "summary": "Return detailed transaction status (mempool presence, inclusion, confirmations, reorg state).",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txHash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "tx_getStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "tx_getStatus",
    "tx.status",
    "tx_getStatusDetail"
   ]
  },
  {
   "name": "tx.getSupportedSignatureSchemes",
   "summary": "List signature schemes supported by this node",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "tx_getSupportedSignatureSchemes_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "tx_getSupportedSignatureSchemes"
   ]
  },
  {
   "name": "tx.getTransaction",
   "summary": "Get a transaction by hash (alias of tx.getTransactionByHash).",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txHash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "tx_getTransaction_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "x-aliases": [
    "tx_getTransaction"
   ]
  },
  {
   "name": "tx.getTransactionByHash",
   "summary": "Get a transaction by hash. Returns full object with pending/persisted context.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txHash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "tx_getTransactionByHash_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "x-aliases": [
    "tx_getTransactionByHash"
   ]
  },
  {
   "name": "tx.getTransactionReceipt",
   "summary": "Return the transaction receipt for a mined transaction hash. If the transaction is pending or unknown, returns null.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txHash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "tx_getTransactionReceipt_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "x-aliases": [
    "tx_getTransactionReceipt",
    "tx.getReceipt",
    "tx_getReceipt"
   ]
  },
  {
   "name": "tx.getTransactionStatus",
   "summary": "Return transaction status (pending, confirmed, rejected, not_found).",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "txHash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "tx_getTransactionStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "x-aliases": [
    "tx_getTransactionStatus"
   ]
  },
  {
   "name": "tx.pending",
   "summary": "Get pending transactions from PTL.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "tx_pending_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "Get pending transactions from PTL.\n\nArgs:\n    params: {\n        \"limit\": max number of transactions (default 100),\n        \"status\": optional status filter\n    }\n\nReturns:\n    List of pending transactions"
  },
  {
   "name": "tx.replicationStatus",
   "summary": "Backward-compatible alias for ptl.replicationStatus.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "tx_replicationStatus_result",
    "schema": {
     "oneOf": [
      {
       "type": "object",
       "additionalProperties": true
      },
      {
       "type": "null"
      }
     ]
    }
   },
   "description": "Backward-compatible alias for ptl.replicationStatus.\n\nArgs:\n    params: {\"txid\": transaction ID (hex)}\n\nReturns:\n    Detailed replication status (delegates to ptl.replicationStatus)"
  },
  {
   "name": "tx.sendHelp",
   "summary": "Return accepted parameter shapes and examples for tx send methods.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "tx_sendHelp_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "tx.sendRawTransaction",
   "summary": "Submit a signed CBOR-encoded transaction. Param may be positional [rawTx] or named {rawTx/raw_tx/tx}. Returns tx hash.\n\nEnvelope formats supported:\n  { \"body\": {...}, \"sig\": { \"algId\": <int>, \"pubkey\"",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "rawTx",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    },
    {
     "name": "raw_tx",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    },
    {
     "name": "tx",
     "required": false,
     "schema": {}
    },
    {
     "name": "raw",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    },
    {
     "name": "cbor",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    },
    {
     "name": "txBytes",
     "required": false,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    }
   ],
   "result": {
    "name": "tx_sendRawTransaction_result",
    "schema": {
     "description": "Method-specific result (loose schema)."
    }
   },
   "x-aliases": [
    "tx_sendRawTransaction"
   ]
  },
  {
   "name": "tx.submitRawTransaction",
   "summary": "Submit a raw transaction to the PTL.",
   "tags": [
    {
     "name": "tx"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "params",
     "required": true,
     "schema": {
      "type": "object",
      "additionalProperties": true
     },
     "description": "Method parameters; shape documented in the method description."
    }
   ],
   "result": {
    "name": "tx_submitRawTransaction_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   },
   "description": "Submit a raw transaction to the PTL.\n\nArgs:\n    params: {\n        \"tx\": hex-encoded or bytes transaction data,\n        \"origin\": optional origin identifier\n    }\n\nReturns:\n    {\n        \"txid\": transaction ID (hex),\n        \"status\": current status,\n        \"received_at\": timestamp\n    }"
  },
  {
   "name": "tx2.getMempoolStats",
   "summary": "Get mempool2 statistics",
   "tags": [
    {
     "name": "tx2"
    }
   ],
   "paramStructure": "either",
   "params": [],
   "result": {
    "name": "tx2_getMempoolStats_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "tx2.getTransaction",
   "summary": "Get transaction by hash from mempool2 or blocks",
   "tags": [
    {
     "name": "tx2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "tx_hash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "tx2_getTransaction_result",
    "schema": {
     "oneOf": [
      {
       "type": "string"
      },
      {
       "type": "null"
      }
     ]
    }
   }
  },
  {
   "name": "tx2.getTransactionStatus",
   "summary": "Get transaction status (pending/confirmed/unknown)",
   "tags": [
    {
     "name": "tx2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "tx_hash",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/Hash32"
     }
    }
   ],
   "result": {
    "name": "tx2_getTransactionStatus_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  },
  {
   "name": "tx2.sendRawTransaction",
   "summary": "Submit raw CBOR transaction to mempool2",
   "tags": [
    {
     "name": "tx2"
    }
   ],
   "paramStructure": "either",
   "params": [
    {
     "name": "raw_tx",
     "required": true,
     "schema": {
      "$ref": "#/components/schemas/HexData"
     }
    }
   ],
   "result": {
    "name": "tx2_sendRawTransaction_result",
    "schema": {
     "type": "object",
     "additionalProperties": true
    }
   }
  }
 ],
 "components": {
  "schemas": {
   "Address": {
    "title": "Address",
    "description": "Animica address: canonical bech32m with prefix anim1\u2026; most methods also accept a 0x-prefixed 32-byte hex account digest.",
    "type": "string"
   },
   "HexQuantity": {
    "title": "HexQuantity",
    "description": "Quantity encoded as a 0x-prefixed hex string. Amounts are base units: 1 ANM = 10^9 base units (nano-ANM).",
    "type": "string",
    "pattern": "^0x[0-9a-fA-F]+$"
   },
   "Hash32": {
    "title": "Hash32",
    "description": "0x-prefixed 32-byte hash.",
    "type": "string",
    "pattern": "^0x[0-9a-fA-F]{64}$"
   },
   "HexData": {
    "title": "HexData",
    "description": "0x-prefixed hex-encoded bytes (transactions are CBOR-encoded before hexing).",
    "type": "string",
    "pattern": "^0x[0-9a-fA-F]*$"
   }
  }
 },
 "x-tags": [
  {
   "name": "chain",
   "description": "Chain head, params, identity, blocks, forks, checkpoints, hashrate."
  },
  {
   "name": "state",
   "description": "Account balances, nonces, rich list, total supply, read-only contract calls."
  },
  {
   "name": "tx",
   "description": "Transaction submit, lookup, status, receipts, decode/verify diagnostics."
  },
  {
   "name": "tx2",
   "description": "mempool2-based transaction methods."
  },
  {
   "name": "mempool",
   "description": "Pending-pool inspection and admission simulation."
  },
  {
   "name": "net",
   "description": "Peer and bootstrap-seed information."
  },
  {
   "name": "aicf",
   "description": "AI Compute Fund: credits/claims, provider registry, inference-job protocol, useful-work jobs, Studio function registry."
  },
  {
   "name": "l2",
   "description": "ANM-native L2 rollup (l2_* methods): balances, transfers, batches, bridge deposits/withdrawals, validity proofs."
  },
  {
   "name": "faucet",
   "description": "Devnet/testnet faucet. NOT available on mainnet."
  }
 ]
}