docs: [transaction] document tx.jup.ag Solana JSON-RPC submission endpoint#934
docs: [transaction] document tx.jup.ag Solana JSON-RPC submission endpoint#9340xanmol wants to merge 7 commits into
Conversation
…point Beam v2 exposes transaction landing as a Solana JSON-RPC sendTransaction endpoint at tx.jup.ag. Point any Solana client at it with the x-api-key header instead of POSTing to the REST /tx/v1/submit (kept as legacy). Verified end-to-end with a live mainnet transaction.
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
Both verified against tx.jup.ag with live transactions: the @solana/kit send path lands, and a tip-less transaction returns "Transaction must include a Jupiter tip instruction".
|
Verified the primary
The documented flow is validated by real swaps producing token output. |
sendAndConfirmTransaction and sendYoloModeTransaction are role-gated to internal callers (-1012 Access denied with an external key); only sendTransaction (and sendJitoBundle) are available externally. Drop the sendAndConfirmTransaction mention from llmsDescription and record the verified access matrix.
The 20/50/100 dedicated bucket in the api-gateway quota.toml is keyed by the REST paths /tx/v1/submit and /swap/v2/submit on api.jup.ag. tx.jup.ag is a separate direct-to-beam load balancer, not fronted by that gateway, so it does not inherit the bucket. Revert the mistaken tx.jup.ag relabelling on the rate-limits page and scope the submit.mdx note to the REST path.
|
Correction to open question #2 (rate limits), verified in My earlier "assumed yes, same gateway" was wrong. The Fixed in the docs: reverted the Still open (for whoever owns the |
Per Kyle/groovie in-thread: advertise only sendTransaction (sendJitoBundle is internal-only, sendAndConfirmTransaction is being deprecated); tx.jup.ag will require an API key, so drop the keyless advertising and make the OpenAPI auth required; rate limits are a single anti-abuse limit across all tiers with the number still TBD, not the tiered REST buckets.
groovie confirmed the beam require_role(Internal) check. My earlier probe's -32602 on sendJitoBundle was a params-deserialization error before the role gate, not proof of external access. Only sendTransaction is external.
…yet) Verified with real funds: a valid signed swap sent with no x-api-key landed + finalized, same as the keyed send. The API-key requirement Kyle described is not live yet; docs advertise it as forward guidance.
What
Beam v2 exposes transaction landing as a Solana JSON-RPC
sendTransactionendpoint athttps://tx.jup.ag. This rewrites the transaction submission docs around it: point any Solana client (@solana/web3.jsConnectionor@solana/kit) attx.jup.ag, authenticate with thex-api-keyheader, and send. The legacy RESTPOST api.jup.ag/tx/v1/submitstill works and is kept as a<Note>.Confirmed against the
jup-ag/beamsource (beam_cli,scripts/beamv2-testscripts/) and live probes.Changes
transaction/submit.mdx— rewritten aroundtx.jup.ag. Kept the 7-step web3.js/kit examples; only the submit step changes (RPC client pointed attx.jup.agwithx-api-key). Documents it as send-only (keep your own RPC for blockhash + confirmation).openapi-spec/transaction/transaction.yaml+api-reference/transaction/submit.mdx— reshaped from a REST body to the JSON-RPC envelope; servertx.jup.ag; optional auth (keyless allowed).changelog/index.mdx— July 2026 entry.swap/index.mdx,portal/rate-limits.mdx— endpoint identity updated totx.jup.ag..claude/rules/*— recorded the convention change (supersedes the 2026-04-07 REST-URL guidance) and the open questions below.Verification
Live mainnet transaction through
tx.jup.agusing the exact documented web3.js flow:41Zdsg…L6KEp—err: null, confirmedHFqp6…(one of the 16 documented tip accounts)x-api-key= keyless (accepted), invalid key =401,getHealth= "Method not found" (send-only)Open questions for reviewers
SwapAPI-key permission map to thetx.jup.aghost? Leftportal/api-keys.mdx's "Swap covers/tx/v1/submit" line unchanged pending confirmation.tx.jup.ag? (Assumed yes — same gateway.)POST /tx/v1/submit.Follow-ups (not in this PR)
/buildcode examples inswap/build/index.mdxand the mention inswap/quote-and-swap.mdxoncetx.jup.agis confirmed GA (they use the still-working legacy REST endpoint).🤖 Generated with Claude Code