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 15 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.
…sOnly Verified live against tx.jup.ag: skipPreflight must be true and maxRetries must be 0 (explicit false / non-zero rejected with -1015), correcting the earlier "skipPreflight is only a perf rec" framing. Document swqosOnly (optional SWQoS-only routing for lowest latency) and the external error codes (-1013/-1014/-1015/-1016) from the beam api-v2 design spec.
Lead with how-to instead of the infra pitch: move "Why it's competitive" down to "Why it lands fast" after best practices. Consolidate the sendTransaction param rules (encoding/skipPreflight/maxRetries/swqosOnly) into a scannable config table under Requirements. Cut redundant prose: the duplicate API-key clause, the vague scale bullet, and the tipAmount / simulate / skipPreflight / swqosOnly best-practice bullets now covered elsewhere.
Per YY's feedback: call out that tx.jup.ag routes straight to Beam while the legacy api.jup.ag/tx/v1/submit proxies through the API gateway first.
…" section tx.jup.ag / submit is product-neutral (any signed transaction, not just swaps), so move it out of Docs > Swap > Router into a dedicated "Transaction Landing" menu item. Nav-only: URLs unchanged, no redirects. Seeds DEV-328 (YY's broader transactions & landing section).
Per groovie (beam dev): swqosOnly is not yet implemented. I had documented it from the design spec plus a live test where swqosOnly:true "landed", but that test was invalid: JSON-RPC silently ignores unknown config fields, so an unimplemented param lands exactly like a real one. Remove it from the config table, OpenAPI, and example. Logged the correction and a follow-up for real jito-tip / priority-fee guidance.
…n Landing, Lend, Trigger
Document transaction landing via
tx.jup.ag(Solana JSON-RPCsendTransaction) and move it into its own Transaction Landing section (out of Swap). Seeds DEV-328.Verified live (real swaps + reject-path probes): sendTransaction lands (real SOL→USDC); tip min 0.001 SOL (
-1013);skipPreflightmust betrue/maxRetriesmust be0(-1015); base64 only (-1016); send-only (no blockhash/simulate); onlysendTransactionis external (others-1012).Open (gates merge):
🤖 Generated with Claude Code