Skip to content

Changelog ​

Notable changes to the integration surface.

2026-09-27 — Current unrealized PnL API ​

Added GET /v1/portfolio/{user_address}/unrealized-pnl for a trader's current POOL position valuation on Monad. Returns gross and accrued-fee-adjusted PnL, funding and holding fees as decimal USD strings, together with block and quote timestamps. Successful responses use no-store; incomplete or stale valuations return 503.

2026-08 — LVMONMinter documented ​

The mainnet LVMONMinter converts native MON or WMON into LVMON. Calls are permissioned by caller address and go to the standalone minter contract, not the Diamond.

2026-07 — CANCEL_ALL_DECREASE_ORDERS (1CT action 13) ​

The onchain cancelAllDecreaseOrders(positionHash) now has a gasless counterpart: CANCEL_ALL_DECREASE_ORDERS, action 13, signed under OneClickCancelAllDecreaseOrders with actionData of a single bytes32 positionHash. It clears every take-profit leg and the stop-loss on a position in one intent, and charges no fee.

Two things to check if you already have a 1CT integration:

  • Agents authorized with an explicit permission bitmask do not have bit 13. They will keep getting skipReason = INVALID for this action until the trader calls updateAgentPermissions. Agents authorized with the type(uint256).max wildcard pick it up automatically.
  • Action validation widened to [0, 13]. If you mirror the relayer's range check client-side, update it.

2026-07 — Documentation rewrite ​

The documentation was restructured around three integration paths — onchain, gasless, and REST API — and rewritten against the current contracts and services.

If you built against the previous version of these docs, the following changed.

One-Click Trading is now V2 ​

The previous documentation described the V1 flow. V2 is a different protocol; a V1-shaped request will not produce a valid signature.

Previous docs (V1)Current (V2)
AuthorizationSeparate OneClickAgent contractBuilt into the Diamond — verifyingContract is the Diamond address
OperationsOpen and close only14 actions
EIP-712 structBusiness fields expanded per actionSeven shared fields plus actionDataHash
Replay protectionsaltMillisecond nonce, strictly increasing, time-windowed
PermissionsAll or nothingPer-action bitmask
EndpointPOST /v1/trading/send-open-position-v2POST /v2/trading/submit-intent
Execution feeNonePer-action ERC-20 fee

Migrating means rewriting the signing layer, not adjusting it. Start at Signing Intents.

Trading events renamed ​

OpenMarketTrade no longer exists. Market and limit opens now emit:

OldNew
OpenMarketTradeOpenPosition (new slot) or PositionIncreased (existing slot)
CloseTradeSuccessfulClosePosition, or PositionDecreased for a partial close

The old close events are retained for positions created before the merged-position upgrade. See Events.

getPositionsV2 superseded by getPositionsV4 ​

getPositionsV2 still exists but its Position struct gained an earliestCloseTime field — an ABI copied from the older documentation decodes incorrectly. Use getPositionsV4, which also exposes accruedFundingFee and accruedHoldingFee.

Positions are merged per market ​

A position is now a slot keyed by (user, pairBase, isLong, lvToken) rather than one object per trade. Opening the same market twice blends into one position. See Core Concepts.

Newly documented operations ​

These existed but were not covered previously:

Code samples ​

Samples previously imported a monad chain object from viem/chains, which does not exist. Define the chain with defineChain — see Networks & Contracts.

Testnet removed ​

The documentation covers Monad mainnet only.

Trading pairs are no longer listed inline ​

Pair addresses moved out of the docs and into GET /v1/pairs. Hardcoded addresses go stale as markets are listed and delisted.

Trading perpetuals involves risk. Nothing here is financial advice.