To claim rewards paid in ATOM tokens, you will need:

- The `delegator_address` from which ATOM was delegated, which will sign the transaction.
- The `validator_addresses` from which you want to withdraw the staking rewards.
- An optional memo to identify the transaction.
- An optional `gas_limit` and `gas_price` in ATOM.
- The pubkey (public key) of the `delegator_address`.

In the following guide we will illustrate how to claim ATOM rewards.

# Create New Claim Rewards Flow

To initiate the rewards claim process, create a new flow with a `POST` request to `/flows`.

### URL

`https://api.figment.io/flows`

### Request

- `protocol`\* : `string` Protocol this flow operates on (ex. `cosmos`).
- `network`\* : `string` Network this flow operates on (ex. `testnet`).
- `operation`\* : `string` The operation to perform (ex. `claim_rewards`).

JSON

```json
{
  "protocol": "cosmos",
  "network": "testnet",
  "operation": "claim_rewards"
}
```

### Response

- `id` : `string` ID of the flow.
- `operation` : `string` The Staking API operation being performed by this flow.
- `state` : `string` The current state of the flow.
- `actions` : `array` It includes the `name` & `inputs` of all next possible actions.

- `create_withdraw_tx`: Use this action to transfer ATOM.

- `delegator_address` : The address from which ATOM was delegated.
    - `validator_addresses` : Validator addresses from which staking rewards to be withdrawn.
    - `memo` : an optional message to record on-chain with your transaction.
    - `gas_limit`: the total amount of gas you're willing to let this transaction consume.
    - `gas_price`: how many ATOM you're willing to pay per unit of gas consumed by this transaction.
    - `pubkey` : Pubkey value will be retrieved from the chain but if you're using a fresh account (that does not have any outgoing activity) then this information is not available and it requires the user to pass it.
- `data` : `object` Flow & transaction data.

JSON

```json
{
  "id": "15a26af4-6c71-4d6a-9dc5-934ebdb095c7",
  "operation": "claim_rewards",
  "state": "initialized",
  "actions": [
    {
      "name": "create_withdraw_tx",
      "inputs": [
        {
          "name": "delegator_address",
          "display": "Delegator Address",
          "type": "string",
          "validations": [{"type": "presence", "options": {}}],
          "array": false,
          "default_value": null
        },
        {
          "name": "validator_addresses",
          "display": "Validator Addresses",
          "type": "array_of_strings",
          "validations": [{"type": "array", "options": {"allow_empty": true, "allow_duplicates": false}}],
          "array": false,
          "default_value": null
        },
        {
          "name": "memo",
          "display": "Memo",
          "type": "string",
          "validations": [],
          "array": false,
          "default_value": null
        },
        {
          "name": "gas_price",
          "display": "Gas Price",
          "type": "decimal",
          "validations": [],
          "array": false,
          "default_value": null
        },
        {
          "name": "gas_limit",
          "display": "Gas Limit",
          "type": "decimal",
          "validations": [],
          "array": false,
          "default_value": null
        },
        {
          "name": "pubkey",
          "display": "Pubkey",
          "type": "string",
          "validations": [{"type": "presence", "options": {}}],
          "array": false,
          "default_value": null
        }
      ]
    }
  ],
  "data": {
    "delegator_address": null,
    "validator_addresses": null,
    "memo": null,
    "gas_price": null,
    "gas_limit": null,
    "pubkey": null,
    "withdraw_transaction": null
  },
  "protocol": "cosmos",
  "network": "testnet",
  "created_at": "2023-02-28T11:39:46.810Z",
  "updated_at": "2023-02-28T11:39:46.810Z"
}
```

# Submit Claim Rewards Data

After creating the new claim rewards flow, we need to submit the claim rewards data.

After collecting the required inputs as mentioned below, send a `PUT` request to `/flows/[:flow_id]/next` to proceed to the next step.

### URL

`https://api.figment.io/flows/[:flow_id]/next`

### Request

- `name`\* : `create_withdraw_tx`
- `inputs`\* : `object`
  - `delegator_address`\* : The address from which ATOM was delegated.
  - `validator_addresses`\* : Validator addresses from which staking rewards to be withdrawn.
  - `memo` : `string` A message to record on-chain with your transfer.
  - `gas_limit` : `number` The total amount of gas you're willing to let this transaction consume.
  - `gas_price` : `number` How many ATOM you're willing to pay per unit of gas consumed by this transaction.
  - `pubkey` : `string` Required only if you're using a fresh account (that does not have any outgoing activity) else optional.

JSON

```json
{
  "name": "create_withdraw_tx",
  "inputs": {
    "delegator_address": "cosmos1u85upk2v7pr65g0wv2976zleu6v8qjl9qprvzl",
    "validator_addresses": [
      "cosmosvaloper1tflk30mq5vgqjdly92kkhhq3raev2hnz6eete3"
    ],
    "pubkey": "02db33d72ee215f1a61e5f4ffa098b9325cc1da6f5c3557974ad0f21a5ec9fe235"
  }
}
```

### Response

- `id` : `string` ID of the flow.
- `operation` : `string` The Staking API operation being performed by this flow.
- `state` : `string` The current state of the flow.
- `actions` : `array` It includes the `name` & `inputs` of all next possible actions.
- `data` : `object` Claim rewards flow & transaction data.

JSON

```json
{
  "id": "15a26af4-6c71-4d6a-9dc5-934ebdb095c7",
  "operation": "claim_rewards",
  "state": "withdraw_tx_signature",
  "actions": [
    {
      "name": "refresh_withdraw_tx",
      "inputs": [
        {
          "name": "delegator_address",
          "display": "Delegator Address",
          "type": "string",
          "validations": [{"type": "presence", "options": {}}],
          "array": false,
          "default_value": "cosmos1u85upk2v7pr65g0wv2976zleu6v8qjl9qprvzl"
        },
        {
          "name": "validator_addresses",
          "display": "Validator Addresses",
          "type": "array_of_strings",
          "validations": [{"type": "array", "options": {"allow_empty": true, "allow_duplicates": false}}],
          "array": false,
          "default_value": [
            "cosmosvaloper1tflk30mq5vgqjdly92kkhhq3raev2hnz6eete3"
          ]
        },
        {
          "name": "memo",
          "display": "Memo",
          "type": "string",
          "validations": [],
          "array": false,
          "default_value": null
        },
        {
          "name": "gas_price",
          "display": "Gas Price",
          "type": "decimal",
          "validations": [],
          "array": false,
          "default_value": null
        },
        {
          "name": "gas_limit",
          "display": "Gas Limit",
          "type": "decimal",
          "validations": [],
          "array": false,
          "default_value": null
        },
        {
          "name": "pubkey",
          "display": "Pubkey",
          "type": "string",
          "validations": [{"type": "presence", "options": {}}],
          "array": false,
          "default_value": "02db33d72ee215f1a61e5f4ffa098b9325cc1da6f5c3557974ad0f21a5ec9fe235"
        }
      ]
    }
  ],
  "data": {
    "delegator_address": "cosmos1u85upk2v7pr65g0wv2976zleu6v8qjl9qprvzl",
    "validator_addresses": [
      "cosmosvaloper1tflk30mq5vgqjdly92kkhhq3raev2hnz6eete3"
    ],
    "memo": "",
    "gas_price": null,
    "gas_limit": null,
    "pubkey": "02db33d72ee215f1a61e5f4ffa098b9325cc1da6f5c3557974ad0f21a5ec9fe235",
    "withdraw_transaction": {
      "raw": "7b226d65737361676573223a5b7b227479706555726c223a222f636f736d6f732e646973747269627574696f6e2e763162657461312e4d7367576974686472617744656c656761746f72526577617264222c2276616c7565223a7b2264656c656761746f7241646472657373223a22636f736d6f733175383575706b3276377072363567307776323937367a6c6575367638716a6c39717072767a6c222c2276616c696461746f7241646472657373223a22636f736d6f7376616c6f7065723174666c6b33306d71357667716a646c7939326b6b686871337261657632686e7a366565746533227d7d5d2c22666565223a7b22616d6f756e74223a5b7b22616d6f756e74223a2233353931222c2264656e6f6d223a227561746f6d227d5d2c22676173223a22313433363331227d2c226d656d6f223a22227d"
    }
  },
  "protocol": "cosmos",
  "network": "testnet",
  "created_at": "2023-02-28T11:39:46.810Z",
  "updated_at": "2023-02-28T11:41:23.208Z"
}
```

# Submit Signed Claim Rewards Transaction for Broadcast

Before broadcasting the transaction, you must sign the `transaction_payload` you received in the previous step. After signing the transaction, send a `PUT` request to `/flows/[:flow_id]/next` and the Staking API will broadcast the transaction to the network.

### URL

`https://api.figment.io/flows/[:flow_id]/next`

### Request

- `name`\* : `sign_withdraw_tx`
- `inputs`\* : `object`
  - `transaction_payload`\* : Signed transaction payload from the previous step's response.

JSON

```json
{
  "name": "sign_withdraw_tx",
  "inputs": {
    "transaction_payload": "0aa3010aa0010a372f636f736d6f732e646973747269627574696f6e2e763162657461312e4d7367576974686472617744656c656761746f7252657761726412650a2d636f736d6f733175383575706b3276377072363567307776323937367a6c6575367638716a6c39717072767a6c1234636f736d6f7376616c6f7065723174666c6b33306d71357667716a646c7939326b6b686871337261657632686e7a36656574653312670a500a460a1f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b657912230a2102db33d72ee215f1a61e5f4ffa098b9325cc1da6f5c3557974ad0f21a5ec9fe23512040a020801180912130a0d0a057561746f6d120433353931108fe2081a400f39e63b287138ece0e3d78f4bf8bfeb95b354191abc3545c61f78d1009083880648187192980f87aadfb94bb82f97ff9a5ba6b3d99fc38eb1adbdec2e12e3e4"
  }
}
```

### Response

- `id` : `string` ID of the flow.
- `operation` : `string` The Staking API operation being performed by this flow.
- `state` : `string` The current state of the flow.

JSON

```json
{
  "id": "15a26af4-6c71-4d6a-9dc5-934ebdb095c7",
  "operation": "claim_rewards",
  "state": "withdraw_tx_broadcasting",
  "actions": [
    {
      "name": "wait",
      "inputs": []
    }
  ],
  "data": {
    "delegator_address": "cosmos1u85upk2v7pr65g0wv2976zleu6v8qjl9qprvzl",
    "validator_addresses": [
      "cosmosvaloper1tflk30mq5vgqjdly92kkhhq3raev2hnz6eete3"
    ],
    "memo": "",
    "gas_price": null,
    "gas_limit": null,
    "pubkey": "02db33d72ee215f1a61e5f4ffa098b9325cc1da6f5c3557974ad0f21a5ec9fe235",
    "withdraw_transaction": {
      "raw": "7b226d65737361676573223a5b7b227479706555726c223a222f636f736d6f732e646973747269627574696f6e2e763162657461312e4d7367576974686472617744656c656761746f72526577617264222c2276616c7565223a7b2264656c656761746f7241646472657373223a22636f736d6f733175383575706b3276377072363567307776323937367a6c6575367638716a6c39717072767a6c222c2276616c696461746f7241646472657373223a22636f736d6f7376616c6f7065723174666c6b33306d71357667716a646c7939326b6b686871337261657632686e7a366565746533227d7d5d2c22666565223a7b22616d6f756e74223a5b7b22616d6f756e74223a2233353931222c2264656e6f6d223a227561746f6d227d5d2c22676173223a22313433363331227d2c226d656d6f223a22227d",
      "signing_payload": "c67009f9018391e00842e4b793a2bb5e02b0f27713010960071a28356b30b0d7",
      "signed": null,
      "hash": null,
      "status": null,
      "error": null,
      "signatures": null,
      "block_time": null
    }
  },
  "protocol": "cosmos",
  "network": "testnet",
  "created_at": "2023-02-28T11:39:46.810Z",
  "updated_at": "2023-02-28T11:42:16.132Z"
}
```

# Get Claim Rewards Flow Status

To get the current state of the existing flow, send a `GET` request to `/flows/[:flow_id]` using the flow ID from the previous step.

### URL

`https://api.figment.io/flows/[:flow_id]`

### Response

- `id` : `string` ID of the flow.
- `operation` : `string` The Staking API operation being performed by this flow.
- `state` : `string` The current state of the flow.
- `actions` : `array` It includes the `name` & `inputs` of all next possible actions.
- `data` : `object` Flow & transaction data.

JSON

```json
{
  "id": "1d823c7f-be8a-430e-85cf-7269206cd867",
  "operation": "staking",
  "state": "completed",
  "actions": [],
  "data": {
    "delegator_address": "cosmos1u85upk2v7pr65g0wv2976zleu6v8qjl9qprvzl",
    "validator_address": "cosmosvaloper1tflk30mq5vgqjdly92kkhhq3raev2hnz6eete3",
    "amount": "2.0",
    "memo": "",
    "gas_price": null,
    "gas_limit": null,
    "delegate_transaction": {
      "raw": "7b226d65737361676573223a5b7b227479706555726c223a222f636f736d6f732e7374616b696e672e763162657461312e4d736744656c6567617465222c2276616c7565223a7b2264656c656761746f7241646472657373223a22636f736d6f733175383575706b3276377072363567307776323937367a6c6575367638716a6c39717072767a6c222c2276616c696461746f7241646472657373223a22636f736d6f7376616c6f7065723174666c6b33306d71357667716a646c7939326b6b686871337261657632686e7a366565746533222c22616d6f756e74223a7b2264656e6f6d223a227561746f6d222c22616d6f756e74223a2232303030303030227d7d7d5d2c22666565223a7b22616d6f756e74223a5b7b22616d6f756e74223a2235313037222c2264656e6f6d223a227561746f6d227d5d2c22676173223a22323034323434227d2c226d656d6f223a22227d",
      "signing_payload": "31a9a1e09389b219435eaf2b0dcbab6a1d6950d95545564be627f86c7dfed956",
      "signed": "0aa1010a9e010a232f636f736d6f732e7374616b696e672e763162657461312e4d736744656c656761746512770a2d636f736d6f733175383575706b3276377072363567307776323937367a6c6575367638716a6c39717072767a6c1234636f736d6f7376616c6f7065723174666c6b33306d71357667716a646c7939326b6b686871337261657632686e7a3665657465331a100a057561746f6d12073230303030303012670a500a460a1f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b657912230a2102db33d72ee215f1a61e5f4ffa098b9325cc1da6f5c3557974ad0f21a5ec9fe23512040a020801180612130a0d0a057561746f6d12043531303710d4bb0c1a4024d0155b8cf9f5fcacb15859b51fc1d895979fce08043362edacd7763e9b85a84c7e98b7390d3279e6b8d6629f60d67a1e6ae751a3ab9158a5350188aafd1166",
      "hash": "09F1F2740CA9265E066299DBCB46DB6AF1A1DAB9CF0764499CFD5D421BB045BA",
      "status": "confirmed",
      "error": null,
      "signatures": [{
        "account_address": "cosmos1u85upk2v7pr65g0wv2976zleu6v8qjl9qprvzl",
        "signature": ""
      }],
      "block_time": "2023-02-28T10:51:19.797Z"
    },
    "pubkey": "02db33d72ee215f1a61e5f4ffa098b9325cc1da6f5c3557974ad0f21a5ec9fe235"
  },
  "protocol": "cosmos",
  "network": "testnet",
  "created_at": "2023-02-28T10:45:13.156Z",
  "updated_at": "2023-02-28T10:51:34.001Z"
}
```
