Rocket Pool Smart Node Daemon API

The Smart Node daemon API is the local HTTP/IPC interface exposed by the rocketpool-daemon Go service that ships with the Smart Node Docker stack. The rocketpool CLI uses this API to manage node operator wallets, minipools, megapools, RPL staking, rewards claims, smoothing pool participation, and protocol/oracle DAO interactions. It is local-only, authenticated by filesystem access, and is the contract between the CLI front-end and the long-running node service.

Rocket Pool Smart Node Daemon API is one of 3 APIs that Rocket Pool publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Smart Node, Node Operator, CLI, Minipool, and Megapool. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

rocket-pool-smart-node-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Rocket Pool Smart Node Daemon API
  description: >-
    Local HTTP API exposed by the rocketpool-daemon Go service that ships with
    the Rocket Pool Smart Node Docker stack. This API is the contract used by
    the rocketpool CLI to drive node operator workflows: wallet management,
    minipool and megapool lifecycle, RPL staking, rewards claims, smoothing
    pool participation, and oracle DAO / protocol DAO actions. It is intended
    to be reached only over a local Unix socket or loopback HTTP endpoint
    inside the Smart Node Docker network — never exposed to the public
    internet. Surface derived from the rocketpool CLI command tree documented
    in the rocket-pool/smartnode README.
  version: 1.16.0
  license:
    name: GPL-3.0
    url: https://github.com/rocket-pool/smartnode/blob/master/LICENSE
  contact:
    name: Rocket Pool
    url: https://github.com/rocket-pool/smartnode
servers:
  - url: http://localhost:8080/api
    description: Local Smart Node daemon (loopback)
tags:
  - name: Wallet
  - name: Node
  - name: Minipool
  - name: Megapool
  - name: Queue
  - name: Network
  - name: Rewards
  - name: Auction
  - name: OracleDAO
  - name: ProtocolDAO
  - name: Service
paths:
  /wallet/status:
    get:
      tags: [Wallet]
      summary: Get Wallet Status
      operationId: getWalletStatus
      responses:
        '200':
          description: Wallet status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletStatus'
  /wallet/init:
    post:
      tags: [Wallet]
      summary: Initialize Node Wallet
      operationId: initWallet
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletInitRequest'
      responses:
        '200':
          description: Wallet initialized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletStatus'
  /wallet/recover:
    post:
      tags: [Wallet]
      summary: Recover Node Wallet From Mnemonic
      operationId: recoverWallet
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletRecoverRequest'
      responses:
        '200':
          description: Wallet recovered
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletStatus'
  /wallet/export:
    get:
      tags: [Wallet]
      summary: Export Node Wallet
      operationId: exportWallet
      responses:
        '200':
          description: Wallet export payload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletExport'
  /node/status:
    get:
      tags: [Node]
      summary: Get Node Status
      operationId: getNodeStatus
      responses:
        '200':
          description: Node status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodeStatus'
  /node/sync:
    get:
      tags: [Node]
      summary: Get Eth1 And Eth2 Sync Progress
      operationId: getNodeSync
      responses:
        '200':
          description: Sync state for the execution and consensus clients
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SyncStatus'
  /node/register:
    post:
      tags: [Node]
      summary: Register Node With Rocket Pool
      operationId: registerNode
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NodeRegisterRequest'
      responses:
        '200':
          description: Registration submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /node/rewards:
    get:
      tags: [Node]
      summary: Get Expected Node Rewards
      operationId: getNodeRewards
      responses:
        '200':
          description: Expected RPL rewards at the next checkpoint
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodeRewards'
  /node/stake-rpl:
    post:
      tags: [Node]
      summary: Stake RPL Against Node
      operationId: stakeRpl
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StakeRplRequest'
      responses:
        '200':
          description: Stake submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /node/withdraw-rpl:
    post:
      tags: [Node]
      summary: Withdraw Staked RPL
      operationId: withdrawRpl
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WithdrawRplRequest'
      responses:
        '200':
          description: Withdraw submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /node/claim-rewards:
    post:
      tags: [Node]
      summary: Claim Available Node Rewards
      operationId: claimNodeRewards
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClaimRewardsRequest'
      responses:
        '200':
          description: Claim submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /node/join-smoothing-pool:
    post:
      tags: [Node]
      summary: Opt Into Smoothing Pool
      operationId: joinSmoothingPool
      responses:
        '200':
          description: Opt-in submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /node/leave-smoothing-pool:
    post:
      tags: [Node]
      summary: Opt Out Of Smoothing Pool
      operationId: leaveSmoothingPool
      responses:
        '200':
          description: Opt-out submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /minipool/status:
    get:
      tags: [Minipool]
      summary: List Node Minipools
      operationId: listMinipools
      responses:
        '200':
          description: List of minipools belonging to the node
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Minipool'
  /minipool/{address}/stake:
    post:
      tags: [Minipool]
      summary: Stake Minipool After Scrub Check
      operationId: stakeMinipool
      parameters:
        - $ref: '#/components/parameters/MinipoolAddress'
      responses:
        '200':
          description: Stake submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /minipool/{address}/exit:
    post:
      tags: [Minipool]
      summary: Exit Minipool From Beacon Chain
      operationId: exitMinipool
      parameters:
        - $ref: '#/components/parameters/MinipoolAddress'
      responses:
        '200':
          description: Exit signed and broadcast
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /minipool/{address}/close:
    post:
      tags: [Minipool]
      summary: Close Minipool
      operationId: closeMinipool
      parameters:
        - $ref: '#/components/parameters/MinipoolAddress'
      responses:
        '200':
          description: Close submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /minipool/{address}/distribute-balance:
    post:
      tags: [Minipool]
      summary: Distribute Minipool Balance
      operationId: distributeMinipoolBalance
      parameters:
        - $ref: '#/components/parameters/MinipoolAddress'
      responses:
        '200':
          description: Distribute submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /megapool/status:
    get:
      tags: [Megapool]
      summary: Get Megapool Status
      operationId: getMegapoolStatus
      responses:
        '200':
          description: Megapool status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MegapoolStatus'
  /megapool/deposit:
    post:
      tags: [Megapool]
      summary: Create Megapool Validators
      operationId: depositMegapool
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MegapoolDepositRequest'
      responses:
        '200':
          description: Deposit submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /megapool/exit-queue:
    post:
      tags: [Megapool]
      summary: Exit Megapool Queue
      operationId: exitMegapoolQueue
      responses:
        '200':
          description: Exit submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /queue/status:
    get:
      tags: [Queue]
      summary: Get Deposit And Minipool Queue Status
      operationId: getQueueStatus
      responses:
        '200':
          description: Queue status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueueStatus'
  /queue/process:
    post:
      tags: [Queue]
      summary: Process Deposit Pool
      operationId: processQueue
      responses:
        '200':
          description: Process submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /network/stats:
    get:
      tags: [Network]
      summary: Get Network Stats
      operationId: getNetworkStats
      responses:
        '200':
          description: Network statistics
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetworkStats'
  /network/node-fee:
    get:
      tags: [Network]
      summary: Get Current Node Commission Rate
      operationId: getNetworkNodeFee
      responses:
        '200':
          description: Current node fee
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodeFee'
  /network/rpl-price:
    get:
      tags: [Network]
      summary: Get Current RPL Price In ETH
      operationId: getRplPrice
      responses:
        '200':
          description: RPL price
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RplPrice'
  /network/dao-proposals:
    get:
      tags: [Network]
      summary: Get Currently Active DAO Proposals
      operationId: getActiveDaoProposals
      responses:
        '200':
          description: Active proposals
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DaoProposal'
  /auction/status:
    get:
      tags: [Auction]
      summary: Get RPL Auction Status
      operationId: getAuctionStatus
      responses:
        '200':
          description: Auction status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuctionStatus'
  /auction/lots:
    get:
      tags: [Auction]
      summary: List Open Auction Lots
      operationId: listAuctionLots
      responses:
        '200':
          description: Auction lots
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AuctionLot'
  /auction/bid-lot:
    post:
      tags: [Auction]
      summary: Bid On Auction Lot
      operationId: bidAuctionLot
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AuctionBidRequest'
      responses:
        '200':
          description: Bid submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /odao/status:
    get:
      tags: [OracleDAO]
      summary: Get Oracle DAO Status
      operationId: getOracleDaoStatus
      responses:
        '200':
          description: Oracle DAO status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OracleDaoStatus'
  /odao/members:
    get:
      tags: [OracleDAO]
      summary: List Oracle DAO Members
      operationId: listOracleDaoMembers
      responses:
        '200':
          description: Oracle DAO members
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OracleDaoMember'
  /pdao/settings:
    get:
      tags: [ProtocolDAO]
      summary: Get Protocol DAO Settings
      operationId: getProtocolDaoSettings
      responses:
        '200':
          description: Protocol DAO settings
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProtocolDaoSettings'
  /pdao/voting-power:
    get:
      tags: [ProtocolDAO]
      summary: Get Node Voting Power
      operationId: getProtocolDaoVotingPower
      responses:
        '200':
          description: Voting power
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VotingPower'
  /rewards/status:
    get:
      tags: [Rewards]
      summary: View Available Rewards And Node Credits
      operationId: getRewardsStatus
      responses:
        '200':
          description: Rewards status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RewardsStatus'
  /rewards/claim-all:
    post:
      tags: [Rewards]
      summary: Claim All Rewards And Node Credits
      operationId: claimAllRewards
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClaimAllRequest'
      responses:
        '200':
          description: Claim submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'
  /service/version:
    get:
      tags: [Service]
      summary: Get Smart Node Service Version
      operationId: getServiceVersion
      responses:
        '200':
          description: Version information
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceVersion'
  /service/status:
    get:
      tags: [Service]
      summary: Get Smart Node Service Status
      operationId: getServiceStatus
      responses:
        '200':
          description: Service status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceStatus'
components:
  parameters:
    MinipoolAddress:
      name: address
      in: path
      required: true
      description: The Ethereum address of the minipool contract
      schema:
        $ref: '#/components/schemas/Address'
  schemas:
    Address:
      type: string
      pattern: '^0x[a-fA-F0-9]{40}$'
      example: '0x0000000000000000000000000000000000000000'
    PublicKey:
      type: string
      pattern: '^0x[a-fA-F0-9]{96}$'
      description: BLS12-381 validator public key
    EthAmount:
      type: string
      description: Amount expressed in wei (1 ETH = 10^18 wei)
      example: '32000000000000000000'
    TransactionHash:
      type: string
      pattern: '^0x[a-fA-F0-9]{64}$'
    TransactionResponse:
      type: object
      properties:
        status:
          type: string
          enum: [success, error]
        txHash:
          $ref: '#/components/schemas/TransactionHash'
        gasInfo:
          type: object
          properties:
            estGasLimit:
              type: integer
            safeGasLimit:
              type: integer
        error:
          type: string
    WalletStatus:
      type: object
      properties:
        accountAddress:
          $ref: '#/components/schemas/Address'
        walletInitialized:
          type: boolean
        passwordSet:
          type: boolean
        ensName:
          type: string
    WalletInitRequest:
      type: object
      required: [password]
      properties:
        password:
          type: string
          format: password
        derivationPath:
          type: string
          example: "m/44'/60'/0'/0/0"
        walletIndex:
          type: integer
    WalletRecoverRequest:
      type: object
      required: [mnemonic, password]
      properties:
        mnemonic:
          type: string
          description: BIP-39 mnemonic phrase
        password:
          type: string
          format: password
        derivationPath:
          type: string
        walletIndex:
          type: integer
    WalletExport:
      type: object
      properties:
        password:
          type: string
        wallet:
          type: string
          description: Encrypted JSON keystore
        accountPrivateKey:
          type: string
    NodeStatus:
      type: object
      properties:
        accountAddress:
          $ref: '#/components/schemas/Address'
        registered:
          type: boolean
        trusted:
          type: boolean
        withdrawalAddress:
          $ref: '#/components/schemas/Address'
        rplWithdrawalAddress:
          $ref: '#/components/schemas/Address'
        timezone:
          type: string
          example: America/Denver
        balances:
          type: object
          properties:
            eth:
              $ref: '#/components/schemas/EthAmount'
            rpl:
              $ref: '#/components/schemas/EthAmount'
            reth:
              $ref: '#/components/schemas/EthAmount'
        minipoolCount:
          type: integer
        rplStake:
          $ref: '#/components/schemas/EthAmount'
        effectiveRplStake:
          $ref: '#/components/schemas/EthAmount'
        minimumRplStake:
          $ref: '#/components/schemas/EthAmount'
        maximumRplStake:
          $ref: '#/components/schemas/EthAmount'
        feeDistributorInitialized:
          type: boolean
        feeDistributorAddress:
          $ref: '#/components/schemas/Address'
        smoothingPoolRegistrationState:
          type: boolean
        smoothingPoolRegistrationChanged:
          type: string
          format: date-time
    SyncStatus:
      type: object
      properties:
        eth1:
          $ref: '#/components/schemas/ClientSync'
        eth2:
          $ref: '#/components/schemas/ClientSync'
    ClientSync:
      type: object
      properties:
        synced:
          type: boolean
        progress:
          type: number
          format: float
          minimum: 0
          maximum: 1
    NodeRegisterRequest:
      type: object
      required: [timezone]
      properties:
        timezone:
          type: string
          example: America/Denver
    NodeRewards:
      type: object
      properties:
        nextCheckpoint:
          type: string
          format: date-time
        estimatedRplRewards:
          $ref: '#/components/schemas/EthAmount'
        nodeRegistrationTime:
          type: string
          format: date-time
        rewardsInterval:
          type: integer
    StakeRplRequest:
      type: object
      required: [amount]
      properties:
        amount:
          $ref: '#/components/schemas/EthAmount'
    WithdrawRplRequest:
      type: object
      required: [amount]
      properties:
        amount:
          $ref: '#/components/schemas/EthAmount'
    ClaimRewardsRequest:
      type: object
      required: [indices]
      properties:
        indices:
          type: array
          items:
            type: integer
        stakeAmount:
          $ref: '#/components/schemas/EthAmount'
    Minipool:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        validatorPubkey:
          $ref: '#/components/schemas/PublicKey'
        status:
          type: string
          enum:
            - Initialized
            - Prelaunch
            - Staking
            - Withdrawable
            - Dissolved
        depositType:
          type: string
          enum: [None, Full, Half, Empty, Variable]
        nodeDepositBalance:
          $ref: '#/components/schemas/EthAmount'
        userDepositBalance:
          $ref: '#/components/schemas/EthAmount'
        nodeFee:
          type: number
          format: float
          description: Node commission rate (0..1)
        createdTime:
          type: string
          format: date-time
        useLatestDelegate:
          type: boolean
    MegapoolStatus:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        validatorCount:
          type: integer
        debt:
          $ref: '#/components/schemas/EthAmount'
        useLatestDelegate:
          type: boolean
        delegateAddress:
          $ref: '#/components/schemas/Address'
        nodeCapital:
          $ref: '#/components/schemas/EthAmount'
        userCapital:
          $ref: '#/components/schemas/EthAmount'
    MegapoolDepositRequest:
      type: object
      required: [validatorCount]
      properties:
        validatorCount:
          type: integer
          minimum: 1
        useExpressTicket:
          type: boolean
    QueueStatus:
      type: object
      properties:
        depositPoolBalance:
          $ref: '#/components/schemas/EthAmount'
        depositPoolExcess:
          $ref: '#/components/schemas/EthAmount'
        minipoolQueueLength:
          type: integer
        minipoolQueueCapacity:
          $ref: '#/components/schemas/EthAmount'
    NetworkStats:
      type: object
      properties:
        totalValueLocked:
          $ref: '#/components/schemas/EthAmount'
        rethSupply:
          $ref: '#/components/schemas/EthAmount'
        rethExchangeRate:
          type: number
          format: double
        rplPriceEth:
          type: number
          format: double
        totalRplStaked:
          $ref: '#/components/schemas/EthAmount'
        totalNodes:
          type: integer
        totalMinipools:
          type: integer
        totalMegapoolValidators:
          type: integer
    NodeFee:
      type: object
      properties:
        nodeFee:
          type: number
          format: float
          example: 0.14
        minNodeFee:
          type: number
          format: float
        maxNodeFee:
          type: number
          format: float
        targetNodeFee:
          type: number
          format: float
    RplPrice:
      type: object
      properties:
        priceEth:
          type: number
          format: double
        block:
          type: integer
        blockTime:
          type: string
          format: date-time
    DaoProposal:
      type: object
      properties:
        id:
          type: integer
        proposer:
          $ref: '#/components/schemas/Address'
        message:
          type: string
        state:
          type: string
          enum:
            - Pending
            - ActivePhase1
            - ActivePhase2
            - Cancelled
            - Vetoed
            - QuorumNotMet
            - Defeated
            - Succeeded
            - Expired
            - Executed
        createdTime:
          type: string
          format: date-time
    AuctionStatus:
      type: object
      properties:
        lotCount:
          type: integer
        remainingRpl:
          $ref: '#/components/schemas/EthAmount'
        canCreateLot:
          type: boolean
    AuctionLot:
      type: object
      properties:
        index:
          type: integer
        exists:
          type: boolean
        startBlock:
          type: integer
        endBlock:
          type: integer
        startPrice:
          $ref: '#/components/schemas/EthAmount'
        currentPrice:
          $ref: '#/components/schemas/EthAmount'
        totalRplAmount:
          $ref: '#/components/schemas/EthAmount'
        claimedRplAmount:
          $ref: '#/components/schemas/EthAmount'
        remainingRplAmount:
          $ref: '#/components/schemas/EthAmount'
    AuctionBidRequest:
      type: object
      required: [lotIndex, amount]
      properties:
        lotIndex:
          type: integer
        amount:
          $ref: '#/components/schemas/EthAmount'
    OracleDaoStatus:
      type: object
      properties:
        memberCount:
          type: integer
        proposalCount:
          type: integer
        isMember:
          type: boolean
    OracleDaoMember:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        id:
          type: string
        url:
          type: string
          format: uri
        joinedTime:
          type: string
          format: date-time
        lastProposalTime:
          type: string
          format: date-time
        rplBondAmount:
          $ref: '#/components/schemas/EthAmount'
    ProtocolDaoSettings:
      type: object
      additionalProperties:
        type: string
      description: Map of protocol DAO setting name to current on-chain value
    VotingPower:
      type: object
      properties:
        votingPower:
          $ref: '#/components/schemas/EthAmount'
        delegate:
          $ref: '#/components/schemas/Address'
        blockNumber:
          type: integer
    RewardsStatus:
      type: object
      properties:
        currentInterval:
          type: integer
        intervalsToClaim:
          type: array
          items:
            type: integer
        unclaimedRpl:
          $ref: '#/components/schemas/EthAmount'
        unclaimedEth:
          $ref: '#/components/schemas/EthAmount'
        unclaimedSmoothingPool:
          $ref: '#/components/schemas/EthAmount'
    ClaimAllRequest:
      type: object
      properties:
        intervals:
          type: array
          items:
            type: integer
        stakeAmount:
          $ref: '#/components/schemas/EthAmount'
    ServiceVersion:
      type: object
      properties:
        smartNodeVersion:
          type: string
          example: 1.16.0
        daemonVersion:
          type: string
        configVersion:
          type: string
    ServiceStatus:
      type: object
      properties:
        running:
          type: boolean
        containers:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              state:
                type: string
              uptimeSeconds:
                type: integer