Build a signed canonical payload to withdraw USDC collateral from a perpetual DEX account back to the user’s wallet.
Documentation Index
Fetch the complete documentation index at: https://docs.mobula.io/llms.txt
Use this file to discover all available pages before exploring further.
payloadStr is an envelope whose payload includes an L1 authorization challenge:
payloadStr.payload.MessageToSign with the user’s wallet (standard EIP-191 personal_sign).payload.L1Sig and delete payload.MessageToSign.finalPayloadStr.`api/2/perp/execute-v2-${timestamp}-${finalPayloadStr}` and call /2/perp/execute-v2 with that payloadStr (no top-level signedTx).lighter.lighter:301)."100"). Must be positive./2/perp/payloads/<action> endpoint verifies the caller by requiring two extra fields in the request body alongside the action parameters:
personal_sign) of the message `${endpoint}-${timestamp}`, where endpoint is the path of this endpoint without the leading slash (e.g., for this page: api/2/perp/payloads/<this-action>). The recovered signer address becomes the user for the request. Single-use — replay returns 403 signature already used.| Status | message |
|---|---|
| 403 | timestamp expired — timestamp older than 30s |
| 403 | signature already used — replay attempt |
| 400 | zod validation failed — timestamp/signature shape invalid |
/2/perp/payloads/<action> endpoint returns the same envelope shape. You pass these fields verbatim into POST /2/perp/execute-v2 to execute the action.
| Status | message |
|---|---|
| 400 | withdraw payload generation failed — insufficient free margin or DEX refusal |