bullpen solana limit-sell¶
Last updated: October 7, 2026
Place a Jupiter Trigger limit sell for a Solana token into USDC
Usage¶
Live Help¶
Place a Jupiter Trigger limit sell for a Solana token into USDC
Usage: bullpen solana limit-sell [OPTIONS] --price <PRICE> <MINT> <AMOUNT>
Arguments:
<MINT>
Input SPL token mint address
<AMOUNT>
Token amount to sell in token units for this mint; NOT USD
Options:
--output <OUTPUT>
Output format for command results
[possible values: table, json]
--price <PRICE>
Trigger price in USD per input token; executes as a swap when crossed (not an exact resting limit order — the received amount is an estimate)
--env <ENV>
Target environment to connect to (overrides config.toml)
[env: BULLPEN_ENV=]
[possible values: staging, production]
--expiry <EXPIRY>
Expiry duration such as 1h, 24h, or 7d. Default is 30d; Jupiter Trigger v2 rejects 'never'
--config <CONFIG>
Path to a custom config.toml file (overrides $BULLPEN_CONFIG and the default location).
Explicit --config and BULLPEN_CONFIG paths fail closed: if the file is missing, the CLI exits validation instead of silently loading defaults. Credentials still resolve via BULLPEN_HOME, so set BULLPEN_HOME too when isolating a session.
--slippage-bps <SLIPPAGE_BPS>
Slippage tolerance in basis points (0-10000) for the swap executed when the trigger fires. Defaults to the configured Solana swap slippage
--yes
Skip confirmation prompt
--preview
Show the Trigger order request without signing or submitting
--read-only
Enable read-only mode: blocks all mutating commands
--non-interactive
Suppress interactive prompts; does NOT imply --yes for money-moving commands
[env: BULLPEN_NON_INTERACTIVE=]
-h, --help
Print help (see a summary with '-h')
EXAMPLES:
# Review active Trigger orders before creating another order
bullpen solana orders --status active
# Preview a Trigger limit sell without signing or submitting
bullpen solana limit-sell DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 200000 --price 0.00003 --preview
# Export the Trigger limit-sell preview as JSON
bullpen solana limit-sell DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 200000 --price 0.00003 --preview --output json
Example Commands¶
Live: Run the matching preview first. Submit only when it matches the intended target, size, price guards, and account scope.
bullpen solana orders --status active
bullpen solana limit-sell DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 200000 --price 0.00003 --preview
bullpen solana limit-sell DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 200000 --price 0.00003 --preview --output json
JSON Output¶
Contract: JSON Output Contract.
Preview (--preview --output json)¶
Preview output is a single JSON document emitted only when --preview --output json is passed. Live submit output uses the corresponding Solana Trigger mutation-report schema instead.
Schema version: 2 for Solana limit-order JSON output (ticket 1961 migrated Jupiter Trigger v1 to v2, renaming order to order_id and removing batches).
Top-level Keys¶
| key | type | nullable | notes |
|---|---|---|---|
action |
string | no | limit_buy or limit_sell |
side |
string | no | buy or sell |
maker |
string | no | Bullpen Solana wallet used as the Trigger v2 maker |
payer |
string | no | Bullpen Solana wallet used as the transaction payer |
input |
object | no | Input mint, symbol, decimal amount, and atomics |
output |
object | no | Output mint, symbol, decimal amount, and atomics — an ESTIMATE; not sent to Jupiter (see output_amount_is_estimate) |
output_amount_is_estimate |
boolean | no | Always true: the order executes as a swap when the trigger fires, so the actual received amount can differ from output |
price_usd |
string | no | Trigger price in USD per token |
execution |
string | no | Always trigger_swap: this is a trigger-executed swap, not an exact resting limit order |
plan |
object | no | Jupiter Trigger v2 order plan preview (inputMint, outputMint, inputAmount, triggerMint, expiresAt in ms, orderType, triggerCondition, triggerPriceUsd, slippageBps); live submission adds depositRequestId/depositSignedTx/userPubkey internally, not shown in preview |
Example¶
Example output: This non-runnable command-and-response pair documents the JSON shape. Use the preview/live workflow in Example Commands when you intend to submit.
Example JSON output
bullpen solana limit-sell DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 200000 --price 0.00003 --preview --output json
{
"action": "limit_sell",
"side": "sell",
"maker": "7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e",
"payer": "7qRkWTrM4DLpmeSnB8xT8p8mpqLQ9JdYatYczS4u1G8e",
"input": {
"mint": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
"symbol": "BONK",
"amount": "200000",
"amount_atomics": 20000000000
},
"output": {
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"symbol": "USDC",
"amount": "6",
"amount_atomics": 6000000
},
"output_amount_is_estimate": true,
"price_usd": "0.00003",
"execution": "trigger_swap",
"plan": {
"inputMint": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
"outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"inputAmount": "20000000000",
"triggerMint": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
"expiresAt": 1780000000000,
"orderType": "single",
"triggerCondition": "above",
"triggerPriceUsd": 0.00003,
"slippageBps": 50
}
}
Stability¶
Patch releases may add nullable or optional fields. Minor releases may add required fields or increment schema_version. Major releases may remove or rename fields.
Solana Trigger Notes¶
--previewbuilds the order plan without Turnkey signing or Jupiter Trigger v2 authentication, deposit crafting, or order submission.- Public
limit-buy/limit-sellsubmit staticsingletrigger orders only; the CLI intentionally does not expose trailing-stop, OCO, or OTOCO order types. - These orders execute as a swap once the trigger price is crossed, not as an exact resting limit order: Trigger v2's create request carries only
inputAmount/triggerPriceUsd, with no output-amount field, so the received amount is an estimate.--slippage-bps(0-10000) sets the swap's slippage tolerance and defaults to the configured Solana swap slippage; preview and live JSON markexecution: "trigger_swap"andoutput_amount_is_estimate: true. - Limit orders do not run JupiterShield and do not expose
--skip-shield-check. - Jupiter Trigger v2 requires a deposit of at least
$10per limit order (raised from Trigger v1's$5). --expirydefaults to30d; Jupiter Trigger v2 has no never-expiring order, so--expiry neveris rejected.- Live create crafts and signs a deposit transaction once and submits it to Jupiter's
/orders/priceendpoint; the CLI never calls a Trigger v2/executeroute and never broadcasts the deposit itself — Jupiter submits it.