RPC API
Wallet RPC API

DERO Wallet RPC API

A wallet RPC (Remote Procedure Call) enables programmatic control of a DERO wallet. This API allows payment processors, exchanges, and applications to automate wallet operations.

Source: rpc/wallet_rpc.go - All RPC methods verified against Release 142

Network Ports

NetworkWallet RPC PortUsage
Mainnet10103Production use
Testnet40403Development/testing

Source: config/config.go:104,124

Enable RPC Server

ℹ️

The RPC server is not enabled by default. Start the wallet with --rpc-server to enable it:

# Mainnet
./dero-wallet-cli --rpc-server --rpc-bind=127.0.0.1:10103
 
# With authentication
./dero-wallet-cli --rpc-server --rpc-login=username:password

What You Can Do

  • Manage balances - Query DERO and asset balances
  • Send transactions - Transfer DERO and assets with privacy
  • Receive payments - Generate integrated addresses, monitor transfers
  • Smart contract interaction - Call SC methods, query state
  • Address management - Get wallet address, generate integrated addresses

Echo

Test endpoint to verify that the RPC server is enabled and working well on the wallet side.

Available parameters

NameTypeMandatoryComment
[]stringtrueArray of string

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "Echo",
    "params": ["Hello", "World", "!"]
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "Echo",
    "params": ["Hello", "World", "!"]
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": "WALLET Hello World !"
}

Get Address

Returns the DERO address of the wallet to receive DEROs or other tokens.

Available parameters

No parameters

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetAddress"
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetAddress"
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "address": "deto1qyyhg0xznkaxt5udct6lnlylsexvwprun6jphv89xg008vq29jk4vqqayuknf"
    }
}

Get Balance

Retrieves the current balance of the wallet.

Available parameters

No parameters

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetBalance"
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetBalance"
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "balance": 800000,
        "unlocked_balance": 800000
    }
}

NOTE: The amount is in atomic format. As a reminder, 10^5 (=100000) is equivalent to 1 DERO. When using a transfer to carry a payload (a comment, destination port, or app data) rather than to send value, the amount must still be at least 1 atomic unit (0.00001 DERO): a zero-amount transfer creates no output for the recipient's wallet to detect, so its attached payload_rpc never reaches them even though the transaction is valid and mined. This applies to any use of a transfer as a data carrier, not just payments.

⚠️

If this address is not registered on the blockchain, you will get this error:

{
    "jsonrpc": "2.0",
    "id": "1",
    "error": {
        "code": -32098,
        "message": "Account Unregistered"
    }
}

Get Height

Returns at which block height the wallet is synchronized.

Available parameters

No parameters

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetHeight"
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetHeight"
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "height": 420
    }
}

Get Transfer by TXID

Returns the details of the transaction based on its hash.

Available parameters

NameTypeMandatory
hashHashtrue

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetTransferbyTXID",
    "params": {
        "txid": "2a74bcc6262f48630967129793f3b87dc30236f2cb5df6ebb09d620ec0cb503a"
    }
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetTransferbyTXID",
    "params": {
        "txid": "2a74bcc6262f48630967129793f3b87dc30236f2cb5df6ebb09d620ec0cb503a"
    }
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "entry": {
            "height": 31297,
            "topoheight": 31297,
            "blockhash": "44e010e6ae56e66e75b158871570233a8a8b918491efc2d02ce793a7ce258612",
            "minerreward": 0,
            "tpos": 17,
            "pos": 0,
            "coinbase": false,
            "incoming": true,
            "txid": "2a74bcc6262f48630967129793f3b87dc30236f2cb5df6ebb09d620ec0cb503a",
            "destination": "",
            "amount": 500000,
            "fees": 451,
            "proof": "deroproof1qy3zfvkwdz87xa7mvxc0qq7nsmcgkl3gsf00a2amhk7fs2yu09r4uqdzvfyyskpqckdxyd8vgtzd75mjujsyzj6swrfdy6gw7alx78ak23v6ql60ewqxy4j4rgqq0gfqsjjq9u",
            "status": 0,
            "time": "2022-02-03T17:51:16.006+01:00",
            "ewdata": "2efc785f92e9ffdaf1935186e0ffe561e500632722c73f95e741136389a347b8002642ae3d734c6b119a28884920036e895fc8e6a33f9c4ec6d90da1a4d1b65ef901",
            "data": "AqFoQ29tbWVudFNySGVsbG8gZnJvbSBTbGl4ZSAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
            "payloadtype": 0,
            "payload": "oWhDb21tZW50U3JIZWxsbyBmcm9tIFNsaXhlICEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
            "payload_rpc": [
                {
                    "name": "Comment",
                    "datatype": "S",
                    "value": "Hello from Slixe !"
                }
            ],
            "sender": "deto1qyj4kx6azntn9psmg7dsfkuv9qs9xde0s94nmmhm2a0damffpm2zzqqcudacc",
            "dstport": 0,
            "srcport": 0
        }
    }
}

Get Transfers

Returns all transactions present in the portfolio against the applied filters.

Available parameters

NameTypeMandatoryComment
scidHashfalseSmart Contract ID
coinbaseboolfalseAccept coinbase TX ?
inboolfalseAccept incoming TX ?
outboolfalseAccept outgoing TX ?
min_heightuint64falseMinimum height
max_heightuint64falseMaximum height
senderstringfalseSender address equal
receiverstringfalseReceiver address equal
dstportuint64falseDestination Port (Service)
srcportuint64falseSource Port (Service)

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetTransfers",
    "params": {
        "out": true,
        "in": true
    }
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "GetTransfers",
    "params": {
        "out": true,
        "in": true
    }
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "entries": [
            {
                "height": 31297,
                "topoheight": 31297,
                "blockhash": "44e010e6ae56e66e75b158871570233a8a8b918491efc2d02ce793a7ce258612",
                "minerreward": 0,
                "tpos": 17,
                "pos": 0,
                "coinbase": false,
                "incoming": true,
                "txid": "2a74bcc6262f48630967129793f3b87dc30236f2cb5df6ebb09d620ec0cb503a",
                "destination": "",
                "amount": 500000,
                "fees": 451,
                "proof": "deroproof1qy3zfvkwdz87xa7mvxc0qq7nsmcgkl3gsf00a2amhk7fs2yu09r4uqdzvfyyskpqckdxyd8vgtzd75mjujsyzj6swrfdy6gw7alx78ak23v6ql60ewqxy4j4rgqq0gfqsjjq9u",
                "status": 0,
                "time": "2022-02-03T17:51:16.006+01:00",
                "ewdata": "2efc785f92e9ffdaf1935186e0ffe561e500632722c73f95e741136389a347b8002642ae3d734c6b119a28884920036e895fc8e6a33f9c4ec6d90da1a4d1b65ef901",
                "data": "AqFoQ29tbWVudFNySGVsbG8gZnJvbSBTbGl4ZSAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
                "payloadtype": 0,
                "payload": "oWhDb21tZW50U3JIZWxsbyBmcm9tIFNsaXhlICEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
                "payload_rpc": [
                    {
                        "name": "Comment",
                        "datatype": "S",
                        "value": "Hello from Slixe !"
                    }
                ],
                "sender": "deto1qyj4kx6azntn9psmg7dsfkuv9qs9xde0s94nmmhm2a0damffpm2zzqqcudacc",
                "dstport": 0,
                "srcport": 0
            }
        ]
    }
}

Make Integrated Address

Returns a new integrated address with Payloads included.

Available parameters

NameTypeMandatoryComment
addressstringfalseDERO Address (if empty, the one from wallet is used)
payload_rpcArgumentfalseParameters to include in address

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "MakeIntegratedAddress",
    "params": {
        "payload_rpc": [
            {
                "name": "Comment",
                "datatype": "S",
                "value": "Hello from integrated address !"
            }
        ]
    }
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "MakeIntegratedAddress",
    "params": {
        "payload_rpc": [
            {
                "name": "Comment",
                "datatype": "S",
                "value": "Hello from integrated address !"
            }
        ]
    }
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "integrated_address": "detoi1qyyhg0xznkaxt5udct6lnlylsexvwprun6jphv89xg008vq29jk4vq9pdppk7mtdv4h8g5mcrayx2mrvdusxvun0d5sxjmn5v4nhyct5v4jzqctyv3ex2umnyqssvnqraw",
        "payload_rpc": [
            {
                "name": "Comment",
                "datatype": "S",
                "value": "Hello from integrated address !"
            }
        ]
    }
}

Split Integrated Address

Returns the DERO address and the payloads included in an Integrated Address.

Available parameters

NameTypeMandatoryComment
integrated_addressstringtrueIntegrated Address to decode

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "SplitIntegratedAddress",
    "params": {
        "integrated_address": "detoi1qyyhg0xznkaxt5udct6lnlylsexvwprun6jphv89xg008vq29jk4vq9pdppk7mtdv4h8g5mcrayx2mrvdusxvun0d5sxjmn5v4nhyct5v4jzqctyv3ex2umnyqssvnqraw"
    }
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "SplitIntegratedAddress",
    "params": {
        "integrated_address": "detoi1qyyhg0xznkaxt5udct6lnlylsexvwprun6jphv89xg008vq29jk4vq9pdppk7mtdv4h8g5mcrayx2mrvdusxvun0d5sxjmn5v4nhyct5v4jzqctyv3ex2umnyqssvnqraw"
    }
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "address": "deto1qyyhg0xznkaxt5udct6lnlylsexvwprun6jphv89xg008vq29jk4vqqayuknf",
        "payload_rpc": [
            {
                "name": "Comment",
                "datatype": "S",
                "value": "Hello from integrated address !"
            }
        ]
    }
}

Query Key

Returns the mnemonic key (seed) associated with this portfolio.

Available parameters

NameTypeMandatoryComment
key_typestringtrueKey Type ("mnemonic" only)

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "QueryKey",
    "params": {
        "key_type": "mnemonic"
    }
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "QueryKey",
    "params": {
        "key_type": "mnemonic"
    }
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "key": "eavesdrop sailor tavern fizzle mammal were utmost stellar rafts vats dedicated dosage lynx cent after toyed coexist zippers lipstick aztec dedicated custom chrome onto launching"
    }
}

Transfer

Creates a transaction and returns its hash. This is also the only wallet method that can call a smart contract with an explicit fee.

Available parameters

NameTypeMandatoryComment
transfers[]TransferfalsePayments to make — see the table below
scstringfalseSC code to install (base64 or plain)
sc_valueuint64falseDERO to send with an install
scidstringfalseSCID to call — sets the call action automatically
sc_rpcArgumentsfalseSC call arguments (entrypoint and parameters)
ringsizeuint64falseLevel of anonymity
feesuint64falseFee in atomic units. Zero means auto-compute, which under-funds large contract writes — see Storage Gas

Per-transfer fields

Each entry in transfers accepts:

NameTypeMandatoryComment
scidHashfalseSCID of asset
destinationstringfalseDERO Address of receiver
amountuint64falseAmount of token to send
burnuint64falseAmount of token to burn
payload_rpcArgumentsfalsePayload Arguments
⚠️

When you pass scid, the wallet appends the SC_ACTION and SC_ID arguments to sc_rpc itself — do not also send them, or you pay for them twice.

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "transfer",
    "params": {
        "transfers": [{
            "scid": "0000000000000000000000000000000000000000000000000000000000000000",
            "destination": "deto1qyj4kx6azntn9psmg7dsfkuv9qs9xde0s94nmmhm2a0damffpm2zzqqcudacc",
            "amount": 100000
        }],
        "ringsize": 16
    }
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "transfer",
    "params": {
        "transfers": [{
            "scid": "0000000000000000000000000000000000000000000000000000000000000000",
            "destination": "deto1qyj4kx6azntn9psmg7dsfkuv9qs9xde0s94nmmhm2a0damffpm2zzqqcudacc",
            "amount": 100000
        }],
        "ringsize": 16
    }
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "txid": "5201c319d04fb72012ecb2fd8c903feff50bbd5db39c60dfee795b9b3a90433a"
    }
}

Transfer 2

Creates a transaction to several distinct addresses and returns its hash.

Available parameters

NameTypeMandatoryComment
transfers[]Transferfalsesee previous request
scstringfalseSC Code to deploy
sc_rpcArgumentsfalseSC Call Arguments
ringsizeuint64falseLevel of anonymity
scidstringfalseSCID to call
feesuint64falseTx Fees
signerstringfalseused for gas estimation

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "transfer",
    "params": {
        "transfers": [{
                "destination": "deto1qyj4kx6azntn9psmg7dsfkuv9qs9xde0s94nmmhm2a0damffpm2zzqqcudacc",
                "amount": 100000
            },
            {
                "destination": "deto1qydvjhl67a3hmcw6zq9yt449extwshzcjxkd7lgk4uhgpyxdr494yqg6zwnc2",
                "amount": 100000
            }
        ],
        "ringsize": 32
    }
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "transfer",
    "params": {
        "transfers": [{
                "destination": "deto1qyj4kx6azntn9psmg7dsfkuv9qs9xde0s94nmmhm2a0damffpm2zzqqcudacc",
                "amount": 100000
            },
            {
                "destination": "deto1qydvjhl67a3hmcw6zq9yt449extwshzcjxkd7lgk4uhgpyxdr494yqg6zwnc2",
                "amount": 100000
            }
        ],
        "ringsize": 32
    }
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "txid": "3a2712ae039e3f55b4cee132ec7ab76b912d05b3c1fc2744ae2ddd2c18be893e"
    }
}

Smart Contract Invoke

Creates a transaction to call a Smart Contract function and returns its hash.

⚠️

scinvoke has no fee parameter, so it cannot fund a large contract write. The transaction fee is the storage budget for a DVM call, and scinvoke always leaves it at the wallet default — which under-funds any write past a few hundred bytes. The transaction mines, the fee is charged, and nothing is stored. For writes of any size, use Transfer with an explicit fees. See Storage Gas.

Available parameters

NameTypeMandatoryComment
scidstringtrueSCID of asset/token
sc_rpcArgumentstrueSC Arguments
sc_dero_deposituint64falseAmount of DERO to deposit
sc_token_deposituint64falseAmount of token to deposit
ringsizeuint64falseLevel of anonymity

Body

{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "scinvoke",
    "params": {
        "scid": "0000000000000000000000000000000000000000000000000000000000000001",
        "ringsize": 2,
        "sc_rpc": [
            {
                "name": "entrypoint",
                "datatype": "S",
                "value": "Register"
            },
            {
                "name": "name",
                "datatype": "S",
                "value": "Slixe"
            }
        ]
    }
}

cURL Request

curl -X POST \
  http://127.0.0.1:10103/json_rpc \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "scinvoke",
    "params": {
        "scid": "0000000000000000000000000000000000000000000000000000000000000001",
        "ringsize": 2,
        "sc_rpc": [
            {
                "name": "entrypoint",
                "datatype": "S",
                "value": "Register"
            },
            {
                "name": "name",
                "datatype": "S",
                "value": "Slixe"
            }
        ]
    }
}'

Result

{
    "jsonrpc": "2.0",
    "id": "1",
    "result": {
        "txid": "bf4b2cd942f4394a03d0d66bbf8c0639f5cbcbf340becc39d4c9e02f987cecca"
    }
}

Related Pages

Getting Started:

Related APIs:

Understanding Privacy:

For Developers: