Monad
Unified API + Monad Integration Workflow
In the following guide, the integration process for the monad chain is covered. The Monad integration aligns with the general Unified API process but with network-specific parameters.
Get an authentication token to start using the Unified API.
Request examples are provided using cURL.
To check the integration guides for other chains, refer to the Networks Supported section.
Key Monad-specific details
chain— always set tomonadfor Monad-related requests.network— environment in which the transaction is processed:mainnetortestnet(testnet).stakerAddress— account address initiating staking, unstaking or withdrawal transactions.extra.amount— amount of tokens in Wei (1 MON = 10¹⁸ Wei); the root-levelamountfield is not used.The Unified API flow only supports stake, unstake, and withdraw operations. Compound and claim rewards operations are available via the direct Monad API integration.
Staking flow
1. Create staking request
Send a POST request to /api/v1/unified/staking/stake.
Example request:
curl --request POST \
--url https://api.p2p.org/api/v1/unified/staking/stake \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{
"chain": "monad",
"network": "mainnet",
"stakerAddress": "0x1234567890abcdef1234567890abcdef12345678",
"amount": 1,
"extra": {
"amount": "1000000000000000000",
"gas": {
"maxPricePerGas": "50000000000",
"priorityPricePerGas": "2000000000"
}
}
}'chain— blockchain network, always set tomonadfor Monad-related requests.network— environment in which the transaction is processed:mainnetortestnetfor testnet.stakerAddress— account address initiating the staking transaction.amount— not used, any value is ignored; see theextra.amountfield.extra— additional parameters:amount— amount of tokens to delegate in Wei (1 MON = 10¹⁸ Wei).gas— computational effort required to execute the transaction measured in gas units (optional). If not specified, the values will be set due to the network load.maxPricePerGas— maximum price per unit of gas this transaction will pay for the combined EIP-1559 block's base fee and this transaction's priority fee in Wei.priorityPricePerGas— price per unit of gas in Wei, which is added to the EIP-1559 block's base fee. This added fee is used to incentivize validators to prioritize this transaction.
Example response:
{
"amount": 0,
"stakerAddress": "0x1234567890abcdef1234567890abcdef12345678",
"unsignedTransactionData": "0x02f8...",
"createdAt": "2026-03-06T12:00:00.000Z",
"extraData": {
"gas": {
"gasLimit": "100000",
"maxPricePerGas": "50000000000",
"priorityPricePerGas": "2000000000"
},
"validatorId": 1,
"amount": "1000000000000000000"
}
}amount— always set to 0 for Monad; the real stake amount is provided in theextra.amountfield.stakerAddress— account address initiating the staking transaction.unsignedTransactionData— unsigned transaction in Base64 encrypted format. The object contains the list of data fields to be used to construct the staking transaction.createdAt— timestamp of the transaction in ISO 8601 format.extraData— additional transaction details:gas— computational effort required to execute the transaction measured in gas units:gasLimit— maximum gas limit for the transaction.priorityPricePerGas— price per unit of gas in Wei, which is added to the EIP-1559 block's base fee. This added fee is used to incentivize validators to prioritize this transaction.maxPricePerGas— maximum price per unit of gas this transaction will pay for the combined EIP-1559 block's base fee and this transaction's priority fee in Wei.
validatorId— ID of the validator to which tokens are delegated.amount— amount of tokens to delegate in Wei (1 MON = 10¹⁸ Wei).
2. Sign and send transaction
Use unsignedTransactionData to sign the transaction using the Monad-specific signing logic.
To broadcast the signed transaction to the Monad network, send a POST request to /api/v1/unified/transaction/broadcast.
Example request:
curl --request POST \
--url https://api.p2p.org/api/v1/unified/transaction/broadcast \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{
"chain": "monad",
"network": "mainnet",
"stakerAddress": "0x1234567890abcdef1234567890abcdef12345678",
"signedTransaction": "0x02f87a82..."
}'chain— blockchain network.network— environment in which the transaction is processed.stakerAddress— Monad account address initiating the staking transaction.signedTransaction— signed transaction in Base64 encrypted format, which contains all transaction details (e.g., accounts, instructions, and signatures) required to broadcast the transaction to the network.
Example response:
{
"status": "broadcasted",
"extraData": {
"transactionHash": "0xabc123...",
"broadcastedAt": "2026-03-06T12:01:00.000Z"
}
}status— transaction status:pending,broadcasted, orfailed.extraData— additional transaction details:transactionHash— hash of the transaction.broadcastedAt— timestamp of the transaction in the ISO 8601 format.
Unstaking flow
1. Create unstaking request
Send a POST request to /api/v1/unified/staking/unstake.
Example request:
curl --request POST \
--url https://api.p2p.org/api/v1/unified/staking/unstake \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{
"chain": "monad",
"network": "mainnet",
"stakerAddress": "0x1234567890abcdef1234567890abcdef12345678",
"extra": {
"amount": "500000000000000000",
"gas": {
"maxPricePerGas": "50000000000",
"priorityPricePerGas": "2000000000"
}
}
}'chain— blockchain network.network— environment in which the transaction is processed.stakerAddress— account address initiated the staking transaction.extra— additional parameters:amount— amount of tokens to unstake in Wei (1 MON = 10¹⁸ Wei).gas— computational effort required to execute the transaction measured in gas units (optional). If not specified, the values will be set due to the network load.priorityPricePerGas— price per unit of gas in Wei, which is added to the EIP-1559 block's base fee. This added fee is used to incentivize validators to prioritize this transaction.maxPricePerGas— maximum price per unit of gas this transaction will pay for the combined EIP-1559 block's base fee and this transaction's priority fee in Wei.
Example response:
{
"stakerAddress": "0x1234567890abcdef1234567890abcdef12345678",
"unsignedTransactionData": "0x02f8...",
"createdAt": "2026-03-06T12:00:00.000Z",
"extraData": {
"gas": {
"gasLimit": "120000",
"maxPricePerGas": "50000000000",
"priorityPricePerGas": "2000000000"
},
"validatorId": 1,
"withdrawId": 3,
"amount": "500000000000000000"
}
}stakerAddress— account address initiated the staking transaction.unsignedTransactionData— unsigned transaction in Base64 encrypted format. The object contains the list of data fields to be used to construct the unstaking transaction.createdAt— timestamp of the transaction in the ISO 8601 format.extraData— additional transaction details:gas— computational effort required to execute the transaction measured in gas units:gasLimit— maximum gas limit for the transaction.priorityPricePerGas— price per unit of gas in Wei, which is added to the EIP-1559 block's base fee. This added fee is used to incentivize validators to prioritize this transaction.maxPricePerGas— maximum price per unit of gas this transaction will pay for the combined EIP-1559 block's base fee and this transaction's priority fee in Wei.
validatorId— ID of the validator to which tokens are delegated.withdrawId— identifier of the withdrawal request represented as an integer between 0 and 255; required for the withdrawal operation.amount— amount of tokens to unstake in Wei (1 MON = 10¹⁸ Wei).
2. Sign and send transaction
Use unsignedTransactionData to sign and send the transaction following the Monad-specific signing logic.
3. Create withdrawal request
Send a POST request to /api/v1/unified/staking/withdraw.
Example request:
curl --request POST \
--url https://api-test.p2p.org/api/v1/unified/staking/withdraw \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{
"chain": "monad",
"network": "mainnet",
"stakerAddress": "0x1234567890abcdef1234567890abcdef12345678",
"extra": {
"withdrawId": 3,
"gas": {
"maxPricePerGas": "50000000000",
"priorityPricePerGas": "2000000000"
}
}
}'chain— blockchain network.network— environment in which the transaction is processed.stakerAddress— account address initiating the withdrawal transaction.extra— additional parameters:withdrawId— identifier of the withdrawal request from the previous unstake response.gas— computational effort required to execute the transaction measured in gas units (optional). If not specified, the values will be set due to the network load.priorityPricePerGas— price per unit of gas in Wei, which is added to the EIP-1559 block's base fee. This added fee is used to incentivize validators to prioritize this transaction.maxPricePerGas— maximum price per unit of gas this transaction will pay for the combined EIP-1559 block's base fee and this transaction's priority fee in Wei.
Example response:
{
"stakerAddress": "0x1234567890abcdef1234567890abcdef12345678",
"unsignedTransactionData": "0x02f8...",
"createdAt": "2026-03-06T12:00:00.000Z",
"extraData": {
"gas": {
"gasLimit": "80000",
"maxPricePerGas": "50000000000",
"priorityPricePerGas": "2000000000"
},
"validatorId": 1,
"withdrawId": 3
}
}
stakerAddress— account address initiated the withdrawal transaction.unsignedTransactionData— unsigned transaction in Base64 encrypted format. The object contains the list of data fields to be used to construct the staking transaction.createdAt— timestamp of the transaction in the ISO 8601 format.extraData— additional transaction details:gas— computational effort required to execute the transaction measured in gas units:gasLimit— maximum gas limit for the transaction.priorityPricePerGas— price per unit of gas in Wei, which is added to the EIP-1559 block's base fee. This added fee is used to incentivize validators to prioritize this transaction.maxPricePerGas— maximum price per unit of gas this transaction will pay for the combined EIP-1559 block's base fee and this transaction's priority fee in Wei.
validatorId— ID of the validator from which the tokens are undelegated.withdrawId— identifier of the withdrawal request.
4. Sign and send transaction
Use unsignedTransactionData to sign and send the transaction following the Monad-specific signing logic.
What's next?
Updated about 10 hours ago