Voyager

Grid trading bot / Solana

A Solana grid trading bot your agent runs.

Give Claude, ChatGPT or your own agent a token, a price range and a floor. Voyager places a buy at each level below the price, sells every fill one level up and buys again once it sells, through Jupiter and inside the limits you set.

How a grid bot works

Buy each level. Sell one level up. Repeat.

Levels
Pick a price range and a number of levels. Levels are spaced evenly in percent, at least 1% apart, so every rung earns the same share.
Buys
Each level below the current price gets a buy for a fixed amount of USDC. A level above the price gets its buy once the price has been above it.
Sells
When a buy fills, the grid places a sell one level up for exactly what it received. It only sells what it bought.
Again
When the sell fills, the buy is armed again at the same level, so a price that crosses a level twice pays the spacing twice.
Floor
Optional. If the price falls to the floor, the grid withdraws its orders, sells everything it holds at market and stops.
Expiry
A grid runs for 30 days by default and 90 at most, then withdraws its orders. What it holds stays in the wallet.

Three presets

Pick a preset, or set the numbers yourself.

A preset shapes the grid around the current price, so the agent's user only picks the token and the amount. Levels stay about 5% to 7% apart in all three. What changes is how deep the grid buys and how far the floor sits, which is where the risk is.

Cautious
10% either side of the price in 5 levels about 5% apart, with the floor 18% below. The smallest drawdown before the floor, and the fewest fills.
Balanced
20% either side of the price in 8 levels about 6% apart, with the floor 30% below. Rides ordinary swings; a 30% fall ends it.
Bold
30% either side of the price in 10 levels about 7% apart, with the floor 45% below. Keeps buying through deep dips and draws down the most before the floor.

None of the three is safe: every grid can lose. Any bound, level count or floor given alongside a preset overrides it.

Chat-based grid bot

Start a grid from Claude or ChatGPT.

Connect Voyager and ask in plain language. The model calls create_grid, Voyager checks the request against the agent's limits, and its keeper places and refills the orders.

  • you › Run a balanced grid on SOL with 200 USDC.
  • you › Run a grid on SOL between 80 and 120 USD in 9 levels, 20 USD a level, with a floor at 70 USD.
  • you › How are my grids doing?
  • you › Cancel the SOL grid and sell what it holds.

Setup guides: Claude · ChatGPT · Claude Code · Cursor · all clients

The arithmetic

What a grid needs, and what it costs.

Decide these before funding the agent. Voyager refuses a grid that does not fit them.

Round trip
A buy and its sell cost about 1.2% in fees and slippage on the majors, so levels closer than that lose money. Keep them 3% or more apart.
Investment
The wallet needs (levels − 1) × the amount per level in USDC before the grid starts: enough to buy every level on the way down.
Per-trade cap
Each level must fit the agent's per-trade limit, and every fill is checked against the daily and monthly caps like any swap.
Daily limit
Set it to at least twice the grid's investment. The floor sells inside the same limits, so a daily cap spent on buys can block it.
Ranges and trends
A grid earns the spacing between levels while the price ranges and bleeds while it trends. The floor is there for the second case.
Open orders
A grid's rungs count toward the agent's open-order cap: with the default cap of 10, a grid can have up to 11 levels.

REST API and SDK

Or start it from code.

POST /api/v1/grids takes the same fields as the create_grid tool and returns the grid with its level prices and running totals. The TypeScript SDK wraps it as createGrid, listGrids and cancelGrid.

// POST /api/v1/grids, the short form: a preset around the current price and a total
{ "baseToken": "SOL", "preset": "balanced", "investmentUsd": 200 }

// or every number by hand
{ "baseToken": "SOL", "lowerPriceUsd": 80, "upperPriceUsd": 120, "levels": 9, "amountPerLevelUsd": 20, "stopPriceUsd": 70 }

// 201
{ "id": "grid_…", "status": "active", "levels": 9,
  "levelPrices": [80, 84.16, 88.54, 93.14, 97.98, 103.08, 108.44, 114.08, 120],
  "amountPerLevel": "20", "investment": "160", "stopPriceUsd": 70,
  "stats": { "openOrders": 5, "filledBuys": 0, "filledSells": 0, "realizedProfit": "0", "baseHeld": "0", "heldCost": "0" } }

// 400, when the wallet holds less than the grid needs
{ "error": { "code": "invalid_request",
  "message": "The wallet holds 100 USDC, but the grid needs 160 USDC to buy all 8 levels (8 × 20). Fund the wallet, or use fewer levels or a smaller amount." } }

Grid bot reference in the docs

Agent permissions

Every fill is checked against your limits.

A grid's rungs are limit orders. Each one that fires goes through the same checks as a swap the agent asks for, and each Jupiter transaction is decoded and simulated before the agent's key signs it.

Spending caps
Per-trade, rolling 24-hour and 30-day limits in USD. Each trade is checked and reserved against the budget in one locked step.
Token rules
Major tokens resolve to their canonical mints. Purchases are limited to Jupiter-verified tokens, or to an allowlist you choose.
Execution limits
Maximum slippage and price impact apply to every route Jupiter returns.
Approvals
Trades above your threshold wait in the dashboard until you approve or reject them.
No transfer tool
Agents can quote, swap and place limit orders. Withdrawals are owner-only and go to your sign-in wallet.
Pause
A paused agent has its next call refused, including limit orders that fire later.

Safety

Know the risks.

A grid is a strategy, not a guarantee. Limits narrow what it can do; they do not make it profitable.

A grid can lose
It earns the spacing between levels while the price ranges inside the grid. In a fall it holds tokens worth less than it paid; in a rise it stops buying. The floor limits the first case, nothing fixes the second.
The floor runs inside your limits
The floor's sells are swaps like any other and are checked against the agent's caps. A daily limit already spent on buys can refuse them, and the tokens then stay in the wallet.
One swap per fill
Every fill pays the swap fee and slippage, so a grid that cycles often pays often. Levels closer than the round-trip cost lose money on every cycle.
Limits cap exposure, not losses
Your limits bound how much an agent can trade, not whether its trades are good. An agent can lose money on trades inside its limits.
Not financial advice
Voyager executes what your agent asks for. Nothing Voyager or your agent says is financial, investment or tax advice.
Swaps are final
Solana transactions cannot be reversed. Prices move between quote and execution, so a swap can fail or fill at a worse price within your slippage limit.
Agent wallets are hot wallets
Voyager creates each agent wallet and keeps its key encrypted on its servers so it can sign that agent's trades. Fund it only with what the agent may trade, and withdraw what it no longer needs.
Guard your API keys
Anyone with an agent's key can trade within that agent's limits. Store keys like passwords, revoke any that leak, and pause the agent if something looks wrong.
Tokens carry their own risk
Jupiter's token verification and Voyager's checks reduce, but do not remove, the risk of scam, illiquid or volatile tokens.
Early software
Voyager is new and depends on Jupiter and the Solana network. Start with small limits, review your agent's activity, and comply with the laws and tax rules that apply to you.

Voyager earns a fee of 0.50% on each agent-executed swap. It is included in every quote, before execution. Routing and execution by Jupiter.

FAQ

Grid trading bot questions.

What is a grid trading bot?

A grid trading bot places buy orders at fixed price levels below the market and sells each purchase one level up, over and over, to earn the spacing between levels while the price moves inside a range. Voyager runs the grid on its server from limit orders the agent's wallet signs, one fee-bearing swap per fill.

Does a grid trading bot make money?

Not by itself. A grid earns the spacing between its levels while the price ranges inside the grid and loses while it trends out of it: on the way down it holds tokens worth less than it paid, and on the way up it stops buying. The floor limits the first case; nothing fixes the second. Past results say nothing about future ones.

Can Claude or ChatGPT run a grid bot on Solana?

Yes. Connect Voyager as an MCP server, then ask for a grid in plain language. The model calls create_grid with a preset and an amount, or with the token, range, levels, amount per level and floor; Voyager checks the request against the agent's limits, and its keeper places and refills the orders.

Which tokens can a grid trade?

Any token Jupiter can route against USDC, USDT or PYUSD, within the agent's token rules: Jupiter-verified tokens by default, or the owner's allowlist. The quote side must be a stablecoin, so the levels are USD prices.

What does the floor do?

If the base token's price falls to the floor, the grid withdraws its waiting orders and places a market sell for every level still holding tokens, inside the agent's limits. The grid then shows what sold and anything the policy refused to sell.

Which preset should I pick?

Cautious buys from 10% below the price and stops 18% below it; Balanced buys from 20% below the price and stops 30% below it; Bold buys from 30% below the price and stops 45% below it. The deeper the grid buys, the more it earns in a wide range and the more it holds, and loses, in a fall before the floor. None of them is safe: all three can lose. Pick by how far a fall you are willing to sit through, and fund the agent only with what it may trade.

How far apart should the levels be?

At least 1%, which Voyager enforces, and 3% or more in practice. A buy and its sell cost about 1.2% in fees and slippage on the majors, so a rung must earn more than that to pay for itself.

Is there a Jupiter grid bot API?

Jupiter has no grid orders of its own. Voyager's REST API and SDK offer POST /api/v1/grids with the same fields as the create_grid tool, and every fill routes through Jupiter's swap API with Voyager's fee in the quote.

What does a grid cost?

Voyager earns a fee of 0.50% on each agent-executed swap. It is included in every quote, before execution. Each fill is one swap, so a grid that cycles often pays the fee often. Solana network fees are paid from the agent's wallet.