Getting Started

Staking in the Cosmos network using the Staking API consists of several main steps:

  1. Create stake transaction.
  2. Sign and send transaction to the network.

Get an authentication token to start using Staking API.

A request example is provided using cURL.

1. Create Stake Transaction

Send a POST request to /api/v1/cosmos/{network}/staking/stake.

Example request (for cosmoshub network):

curl --request POST \
     --url https://api-test.p2p.org/api/v1/cosmos/cosmoshub-4/staking/stake \
     --header 'accept: application/json' \
     --header 'authorization: Bearer <token>' \
     --header 'content-type: application/json' \
     --data '
     {
     "stashAccountAddress": "cosmos1y9wefmlpm0djkt8sseeveke0httfukg2a60g0r",
     "memo": "The message",
     "amount": 0.00420
     }'
  • stashAccountAddress — the address from which ATOM will be delegated.
  • memo — arbitrary text data to add to the transactions.
  • amount — amount of tokens to stake in ATOM.

Example response:

{
  "error": null,
  "result": {
    "amount": 0.0042,
    "currency": "atom",
    "validatorAddress": "cosmosvaloper17lgg03ze9x6xka02fs0hhw4ad4wwg05heqr2y8",
    "stashAccountAddress": "cosmos1y9wefmlpm0djkt8sseeveke0httfukg2a60g0r",
    "rewardDestinationAddress": "cosmos1y9wefmlpm0djkt8sseeveke0httfukg2a60g0r",
    "transactionData": {
      "messages": [
        {
          "typeUrl": "/cosmos.staking.v1beta1.MsgDelegate",
          "value": {
            "delegatorAddress": "cosmos1y9wefmlpm0djkt8sseeveke0httfukg2a60g0r",
            "validatorAddress": "cosmosvaloper17lgg03ze9x6xka02fs0hhw4ad4wwg05heqr2y8",
            "amount": {
              "denom": "uatom",
              "amount": "4200"
            }
          }
        }
      ],
      "fee": {
        "amount": [
          {
            "amount": "5953",
            "denom": "uatom"
          }
        ],
        "gas": "238098"
      },
      "memo": "The message",
      "encodedBody": "0a9b010a232f636f736d6f732e7374616b696e672e763162657461312e4d736744656c656761746512740a2d636f736d6f733179397765666d6c706d30646a6b74387373656576656b653068747466756b67326136306730721234636f736d6f7376616c6f70657231376c676730337a65397836786b613032667330686877346164347777673035686571723279381a0d0a057561746f6d120434323030120b546865206d657373616765",
      "encodedAuthInfo": "0a500a460a1f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b657912230a2103b0c7ac278e1941ac0b65d6bd45d541cae58aa584058fbbd822311b8718708c0e12040a020801182312130a0d0a057561746f6d1204353935331092c40e"
    },
    "createdAt": "2023-11-02T11:21:40.810Z"
  }
}
  • amount — amount of tokens to stake in ATOM.
  • validatorAddress — the validator address to which ATOM is delegated.
  • stashAccountAddress — the address from which ATOM will be delegated, which will sign the transaction.
  • transactionData — the list of data fields to be used to construct the staking transactions.
  • memo — arbitrary text data to add to the transactions
  • encodedBody — The hexadecimal-encoded string of the transaction body
  • encodedAuthInfo — The hexadecimal-encoded string of the transaction's authentication information
  • createdAt — timestamp of the transaction in the ISO 8601 format.

2. Sign and Send Transaction

Use transactionData to sign and send signed transaction to the Cosmos network.

To check transaction status, send a GET request to /api/v1/cosmos/{network}/transaction/status/{transactionHash}.

Example request (for cosmoshub network):

curl --request GET \
     --url https://api-test.p2p.org/api/v1/cosmos/cosmoshub-4/transaction/status/ADD7B2791E1959075D1836D4BCC71ED256CCD724459F9BD8862D85E205075D47 \
     --header 'accept: application/json' \
     --header 'authorization: Bearer <token>' \
     --header 'content-type: application/json'
  • transactionHash — hash of the transaction.

Example response:

{
    "error": null,
    "result": {
        "status": "success",
        "blockId": 18575267,
        "fee": 0.005952,
        "gas": {
            "used": 202947,
            "wanted": 238047
        },
        "transactionHash": "ADD7B2791E1959075D1836D4BCC71ED256CCD724459F9BD8862D85E205075D47"
    }
}
  • status — transaction status: success, failed.
  • blockId — unique identifier of the block in which the transaction has been included.
  • fee — total cost charged for processing the transaction.
  • gas — computational effort required to execute the transaction:
    • used — the amount of computational work (measured in gas units) that was required to process and execute the transaction.
    • wanted — maximum limit of gas units that the transaction initiator was willing to consume for the transaction.
  • transactionHash — hash of the transaction.

What's Next?