Skip to main content

GMX V2 GM / GLV deposit · withdraw · cancel

GET 

/v1/actions/vaults/gmx

Build calldata for GMX V2 GM-market / GLV liquidity actions (Arbitrum 42161, Avalanche 43114). These are async: each call returns a single ExchangeRouter (GM) / GlvRouter (GLV) multicall transaction (plus any ERC-20 approval to the GMX Router), and a keeper executes the request a few seconds later. The deposit/withdraw tx must carry a native executionFee (the keeper's gas reimbursement) — GMX reverts if it's underpaid.

Actions

  • deposit (default) — add liquidity. Needs longToken + shortToken (the market legs), payAsset (the token paid in), amount, executionFee.
  • withdraw — remove liquidity (burn GM/GLV tokens). Needs amount (GM/GLV tokens), executionFee.
  • cancel — cancel a still-pending deposit/withdrawal ticket. Needs request=deposit|withdrawal and the 32-byte key (from /v1/data/vaults/gmx).

GM vs GLV (kind)

  • gm (default) — a single GM market; market defaults to vault.
  • glv — an auto-rebalancing GLV vault; you must name the GM market within the GLV.
Plain-text reference — GET /v1/actions/vaults/gmx

Parameters

ParameterInTypeRequiredDescription
chainIdquerystringyesChain ID — 42161 (Arbitrum) or 43114 (Avalanche). See the ChainId schema for the full set of supported chains.
actionquerydeposit, withdraw, cancelnoOperation to build.
kindquerygm, glvnoPool kind.
vaultquerystringyesGM market token (gm) or GLV token (glv).
operatorquerystringyesCaller wallet (deposit/withdraw). receiver defaults to it.
receiverquerystringnoRecipient. Defaults to operator.
amountquerystringnodeposit: input-token amount. withdraw: GM/GLV tokens to burn. Wei.
executionFeequerystringnodeposit/withdraw: native keeper fee (wei), forwarded as the tx value. GMX rejects underpaid requests — quote it from the GMX UI/SDK.
marketquerystringnoGLV: required — the GM market within the GLV. GM: defaults to vault.
longTokenquerystringnodeposit: required — the market long leg.
shortTokenquerystringnodeposit: required — the market short leg.
payAssetquerystringnodeposit: token paid in. Zero / 0xEEEE… = native. Defaults to longToken.
minOutqueryintegernoSlippage floor on output GM/GLV (deposit) or output token (withdraw).
minLongTokenAmountqueryintegernowithdraw: min long-token received.
minShortTokenAmountqueryintegernowithdraw: min short-token received.
isMarketTokenDepositquerybooleannodeposit: the input is already GM tokens (GLV deposit of an existing GM position).
shouldUnwrapNativeTokenquerybooleannowithdraw: unwrap WETH/WAVAX output to native.
uiFeeReceiverquerystringnoOptional UI-fee recipient.
callbackGasLimitqueryintegernoOptional gas limit for the keeper callback.
requestquerydeposit, withdrawalnocancel: which pending ticket to cancel.
keyquerystringnocancel: 32-byte request key (from /v1/data/vaults/gmx).

Response 200

FieldTypeDescription
successTrue
dataobjectInformational data (quotes, simulation results, etc.)
actionsobjectTransaction calldata and approvals. Null for quote-only responses (no account provided).
actions.transactionsobject[]Pre-trade setup transactions (e.g. e-mode switch, collateral enable). Execute these before the main swap. Empty when no setup is needed.
actions.transactions[].tostringTarget contract address
actions.transactions[].datastringEncoded calldata
actions.transactions[].valuestringETH value to send with the transaction
actions.transactions[].descriptionstringHuman-readable label. For alternatives, this is the aggregator name (e.g. "Paraswap"). For transactions, describes the setup action (e.g. "Switch e-mode to 1").
actions.alternativesobject[]DEX aggregator swap transactions sorted by best output (descending). Each entry's description is the aggregator name. The client should pick one to execute. Present on loop action endpoints.
actions.alternatives[].tostringTarget contract address
actions.alternatives[].datastringEncoded calldata
actions.alternatives[].valuestringETH value to send with the transaction
actions.alternatives[].descriptionstringHuman-readable label. For alternatives, this is the aggregator name (e.g. "Paraswap"). For transactions, describes the setup action (e.g. "Switch e-mode to 1").
actions.permissionsobject[]Approval/delegation transactions that must execute before both transactions and alternatives. Includes ERC20 allowances (targeting the composer contract) and lender borrow/withdrawal delegations (targeting the lending protocol contract directly). Filtered against on-chain state so only missing approvals are returned. Null when no approvals are needed.
actions.permissions[].tostringTarget contract address
actions.permissions[].datastringEncoded calldata
actions.permissions[].valuestringETH value
actions.permissions[].descriptionstringHuman-readable description of the approval (e.g. "Approve borrow for AAVE_V3", "Approve ERC20")
actions.permissions[].spenderstringERC-20 approve spender (x-chain permissions). Match it against the selected quote's approvalTarget — several bridges can share one spender, so do not match by description.

Example response

{
"success": true,
"data": {},
"actions": {
"transactions": [
{
"to": "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2",
"data": "0x617ba037000000000000000000000000c02aaa39b2",
"value": "0",
"description": "string"
}
],
"alternatives": [
{
"to": "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2",
"data": "0x617ba037000000000000000000000000c02aaa39b2",
"value": "0",
"description": "string"
}
],
"permissions": [
{
"to": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"data": "0x617ba037000000000000000000000000c02aaa39b2",
"value": "0",
"description": "string",
"spender": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
}
]
}
}

Request

Responses

A single ExchangeRouter/GlvRouter multicall transaction (plus any Router approval). A keeper executes the request shortly after.