Withdrawal

The withdrawal process on the Story Protocol using the Staking API consists of two main steps:

  1. Request an unstake transaction.
  2. Request a withdrawal transaction.

After each operation, you need to sign and send the transaction to the Story network.

The unbonding process may take some time depending on the staking configuration. Make sure the lock-up period has passed before attempting to withdraw.

1. Unstake

  1. Send a POST request to /api/v1/story/[network]/staking/unstake .

    Example request (for aeneid network):

    curl --request POST \
         --url https://api-test.p2p.org/api/v1/story/aeneid/staking/unstake \
         --header 'accept: application/json' \
         --header 'authorization: Bearer <token>' \
         --header 'content-type: application/json' \
         --data '{
           "delegatorAddress": "0x3202B5B0602274197CcB22B8c02CEC9539990c7c",
           "amount": 512,
           "gas": {
             "maxFeePerGas": 100,
             "maxPriorityFeePerGas": 1,
             "gasLimit": 21000
           }
         }'
    • delegatorAddress — address performing the unstake operation.
    • amount — amount of tokens to unstake.
    • gas — optional gas parameters: maxFeePerGas, gasLimit, etc.

    Example response:

    {
      "result": {
        "unsignedTransaction": "0xf86e808504a817c80082520894c32e3d7c7e6e53d16b9a48d0ae76c70e6adf09f080801ba0f31401df9e6f6d861fdf09d1e69b5f51855f4f63b0179033a6c3871c05ec93da03e0f7d7eab4a3179b29b416d6c75dbe53de763153b7ed9e2c49883c8fca1ef29c",
        "createdAt": "2025-07-22T12:34:56.789Z"
      }
    }
    • unsignedTransaction — unsigned transaction to be signed and broadcast.

    • createdAt — timestamp of the transaction in the ISO 8601 format.

    The unsigned transaction must be signed and broadcasted within ~1 minute.

  2. Use unsignedTransaction to sign and send the signed transaction to the Story network.

2) Withdraw

  1. Send a POST request to /api/v1/story/[network]/staking/withdraw.

    Example request (for aeneid network):

    curl --request POST \
         --url https://api-test.p2p.org/api/v1/story/aeneid/staking/withdraw \
         --header 'Authorization: Bearer <token>' \
         --header 'Content-Type: application/json' \
         --data '{
           "delegatorAddress": "0x3202B5B0602274197CcB22B8c02CEC9539990c7c",
           "amount": 512,
           "gas": {
             "maxFeePerGas": 100,
             "maxPriorityFeePerGas": 1,
             "gasLimit": 21000
           }
         }'
    • delegatorAddress — address performing the withdrawal.
    • amount — amount to withdraw.
    • gas — optional gas configuration.

    Example response:

    {
      "result": {
        "unsignedTransaction": "0xf86e808504a817c80082520894c32e3d7c7e6e53d16b9a48d0ae76c70e6adf09f080801ba0f31401df9e6f6d861fdf09d1e69b5f51855f4f63b0179033a6c3871c05ec93da03e0f7d7eab4a3179b29b416d6c75dbe53de763153b7ed9e2c49883c8fca1ef29c",
        "createdAt": "2025-07-22T12:45:00.123Z"
      }
    }
    • unsignedTransaction — unsigned withdrawal transaction to be signed and sent.

    • createdAt — timestamp of the transaction in the ISO 8601 format.

  2. Use unsignedTransaction to sign and send the signed transaction to the Story Protocol network.

What's Next?