{
  "schemaVersion": "1.0",
  "item": {
    "slug": "jup-skill",
    "name": "Jupiter Skill for OpenClaw",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/lifeofpavs/jup-skill",
    "canonicalUrl": "https://clawhub.ai/lifeofpavs/jup-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/jup-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=jup-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "tsconfig.json",
      "package.json",
      "pnpm-lock.yaml",
      "README.md",
      "scripts/execute-ultra.ts",
      "scripts/fetch-api.ts"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/jup-skill"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/jup-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/jup-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/jup-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/jup-skill/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Jupiter API Skill",
        "body": "Execute Jupiter API operations through 4 utility scripts for fetching data, signing transactions, and executing swaps on Solana.\n\nBase URL: https://api.jup.ag"
      },
      {
        "title": "Quick Reference",
        "body": "TaskScriptExampleFetch any Jupiter APIfetch-api.tspnpm fetch-api -e /ultra/v1/search -p '{\"query\":\"SOL\"}'Sign a transactionwallet-sign.tspnpm wallet-sign -t \"BASE64_TX\" -w ~/.config/solana/id.jsonExecute Ultra orderexecute-ultra.tspnpm execute-ultra -r \"REQUEST_ID\" -t \"SIGNED_TX\"Send tx to RPCsend-transaction.tspnpm send-transaction -t \"SIGNED_TX\""
      },
      {
        "title": "Setup",
        "body": "Install dependencies before using scripts:\n\ncd /path/to/jup-skill\npnpm install\n\nRun pnpm install once per clone (and again after dependency changes) before any pnpm fetch-api, pnpm wallet-sign, pnpm execute-ultra, or pnpm send-transaction command."
      },
      {
        "title": "API Key Setup",
        "body": "ALWAYS required. All Jupiter API endpoints require an x-api-key header.\n\nVisit portal.jup.ag\nCreate account and generate API key\nSet via environment variable (recommended):\nexport JUP_API_KEY=your_api_key_here\n\nOr pass via --api-key flag on each command."
      },
      {
        "title": "Wallet Safety",
        "body": "Signing requires access to a local Solana wallet JSON file (--wallet), which contains private key material.\n\nDo not use a high-value wallet for automation.\nPrefer a dedicated low-balance wallet for this workflow.\nFor testing, prefer ephemeral keys.\nIf your setup supports it, prefer hardware signing over raw key files."
      },
      {
        "title": "fetch-api.ts",
        "body": "Fetch data from any Jupiter API endpoint.\n\n# Search for tokens\npnpm fetch-api -e /ultra/v1/search -p '{\"query\":\"SOL\"}'\n\n# Get Ultra swap order (quote + unsigned transaction)\npnpm fetch-api -e /ultra/v1/order -p '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"taker\": \"YOUR_WALLET_ADDRESS\"\n}'\n\n# Get Metis quote\npnpm fetch-api -e /swap/v1/quote -p '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"slippageBps\": \"50\"\n}'\n\n# POST request (for Metis swap transaction)\npnpm fetch-api -e /swap/v1/swap -m POST -b '{\n  \"quoteResponse\": {...},\n  \"userPublicKey\": \"YOUR_WALLET\"\n}'\n\nArguments:\n\n-e, --endpoint (required): API path, e.g., /ultra/v1/order\n-p, --params: Query params (GET) or body (POST) as JSON string\n-b, --body: Request body for POST requests\n-m, --method: HTTP method, GET (default) or POST\n-k, --api-key: API key (or use JUP_API_KEY env var)"
      },
      {
        "title": "wallet-sign.ts",
        "body": "Sign transactions using a local wallet file.\n\nSECURITY NOTE: The --wallet flag is required. This script does not accept private keys via command line arguments to prevent exposure in shell history and process listings.\n\n# Using Solana CLI wallet (JSON array format)\npnpm wallet-sign -t \"BASE64_UNSIGNED_TX\" --wallet ~/.config/solana/id.json\n\n# Tilde expansion is supported\npnpm wallet-sign -t \"BASE64_UNSIGNED_TX\" --wallet ~/my-wallets/trading.json\n\nArguments:\n\n-t, --unsigned-tx (required): Base64-encoded unsigned transaction\n-w, --wallet (required): Path to Solana CLI JSON wallet file (supports ~ for home directory)\n\nOutput: Signed transaction (base64) to stdout."
      },
      {
        "title": "execute-ultra.ts",
        "body": "Execute Ultra orders after signing.\n\npnpm execute-ultra -r \"REQUEST_ID_FROM_ORDER\" -t \"BASE64_SIGNED_TX\"\n\nArguments:\n\n-r, --request-id (required): Request ID from /ultra/v1/order response\n-t, --signed-tx (required): Base64-encoded signed transaction\n-k, --api-key: API key (or use JUP_API_KEY env var)\n\nOutput: Execution result JSON including signature and status."
      },
      {
        "title": "send-transaction.ts",
        "body": "Send signed transactions to Solana RPC. Use for Metis swaps (Ultra handles RPC internally).\n\nWarning: The default public Solana RPC (api.mainnet-beta.solana.com) is rate-limited and unreliable for production use. Use a dedicated RPC provider (Helius, QuickNode, Triton, etc.) for production applications.\n\n# Default RPC (mainnet-beta)\npnpm send-transaction -t \"BASE64_SIGNED_TX\"\n\n# Custom RPC\npnpm send-transaction -t \"BASE64_SIGNED_TX\" -r \"https://your-rpc.com\"\n\n# With environment variable\nexport SOLANA_RPC_URL=\"https://your-rpc.com\"\npnpm send-transaction -t \"BASE64_SIGNED_TX\"\n\nArguments:\n\n-t, --signed-tx (required): Base64-encoded signed transaction\n-r, --rpc-url: RPC endpoint (default: https://api.mainnet-beta.solana.com)\n--skip-preflight: Skip preflight checks (faster, less safe)\n--max-retries: Max send retries (default: 3)\n\nOutput: Transaction signature to stdout."
      },
      {
        "title": "Ultra Swap (Recommended)",
        "body": "Ultra is RPC-less, gasless, with automatic slippage optimization.\n\nUltra Swap Progress:\n- [ ] Step 1: Get order from /ultra/v1/order\n- [ ] Step 2: Sign the transaction\n- [ ] Step 3: Execute via /ultra/v1/execute\n- [ ] Step 4: Verify result\n\nStep 1: Get Order\n\nORDER=$(pnpm fetch-api -e /ultra/v1/order -p '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"taker\": \"YOUR_WALLET_ADDRESS\"\n}')\necho \"$ORDER\"\n\nResponse contains requestId and transaction (base64 unsigned).\n\nStep 2: Sign Transaction\n\nExtract transaction from response and sign:\n\nUNSIGNED_TX=$(echo \"$ORDER\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\n\nStep 3: Execute Order\n\nREQUEST_ID=$(echo \"$ORDER\" | jq -r '.requestId')\npnpm execute-ultra -r \"$REQUEST_ID\" -t \"$SIGNED_TX\"\n\nStep 4: Verify\n\nCheck the signature on Solscan."
      },
      {
        "title": "Metis Swap (Advanced)",
        "body": "Use Metis when you need custom transaction composition or fine-grained control.\n\nMetis Swap Progress:\n- [ ] Step 1: Get quote from /swap/v1/quote\n- [ ] Step 2: Build transaction via /swap/v1/swap\n- [ ] Step 3: Sign the transaction\n- [ ] Step 4: Send to RPC\n- [ ] Step 5: Verify on-chain\n\nStep 1: Get Quote\n\nQUOTE=$(pnpm fetch-api -e /swap/v1/quote -p '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"slippageBps\": \"50\"\n}')\n\nStep 2: Build Transaction\n\nSWAP_TX=$(pnpm fetch-api -e /swap/v1/swap -m POST -b \"{\n  \\\"quoteResponse\\\": $QUOTE,\n  \\\"userPublicKey\\\": \\\"YOUR_WALLET_ADDRESS\\\",\n  \\\"dynamicComputeUnitLimit\\\": true,\n  \\\"prioritizationFeeLamports\\\": \\\"auto\\\"\n}\")\n\nStep 3: Sign\n\nUNSIGNED_TX=$(echo \"$SWAP_TX\" | jq -r '.swapTransaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" --wallet ~/.config/solana/id.json)\n\nStep 4: Send to RPC\n\npnpm send-transaction -t \"$SIGNED_TX\" -r \"https://your-rpc.com\"\n\nStep 5: Verify\n\nCheck signature on Solscan."
      },
      {
        "title": "Prediction Markets (Beta)",
        "body": "Trade on real-world event outcomes. Contracts trade $0-$1 USD, with prices reflecting outcome probability.\n\nPrediction Market Flow:\n- [ ] Step 1: Browse events/markets\n- [ ] Step 2: Create order (buy YES/NO contracts)\n- [ ] Step 3: Sign and send transaction\n- [ ] Step 4: Monitor position\n- [ ] Step 5: Claim winnings (if correct)\n\nStep 1: Browse Events\n\n# Search for events\npnpm fetch-api -e /prediction/v1/events/search -p '{\"query\":\"election\",\"limit\":\"10\"}'\n\n# List all events\npnpm fetch-api -e /prediction/v1/events -p '{\"category\":\"politics\",\"includeMarkets\":\"true\"}'\n\n# Get specific event with markets\npnpm fetch-api -e /prediction/v1/events/{eventId} -p '{\"includeMarkets\":\"true\"}'\n\nStep 2: Create Order\n\n# Buy YES contracts on a market\nORDER=$(pnpm fetch-api -e /prediction/v1/orders -m POST -b '{\n  \"ownerPubkey\": \"YOUR_WALLET_ADDRESS\",\n  \"marketId\": \"MARKET_ID\",\n  \"isYes\": true,\n  \"isBuy\": true,\n  \"contracts\": 10,\n  \"maxBuyPriceUsd\": 0.65\n}')\n\nResponse contains transaction (base64 unsigned) and order details.\n\nStep 3: Sign and Send\n\nUNSIGNED_TX=$(echo \"$ORDER\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\nStep 4: Monitor Position\n\n# List your positions\npnpm fetch-api -e /prediction/v1/positions -p '{\"ownerPubkey\":\"YOUR_WALLET_ADDRESS\"}'\n\n# Get specific position\npnpm fetch-api -e /prediction/v1/positions/{positionPubkey}\n\n# View order history\npnpm fetch-api -e /prediction/v1/history -p '{\"ownerPubkey\":\"YOUR_WALLET_ADDRESS\"}'\n\nStep 5: Claim Winnings\n\nAfter market resolves, claim payout for winning positions:\n\nCLAIM=$(pnpm fetch-api -e /prediction/v1/positions/{positionPubkey}/claim -m POST -b '{\n  \"ownerPubkey\": \"YOUR_WALLET_ADDRESS\"\n}')\nUNSIGNED_TX=$(echo \"$CLAIM\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\nPrediction API Endpoints\n\nMethodEndpointDescriptionGET/prediction/v1/eventsList events with filtersGET/prediction/v1/events/searchSearch events by queryGET/prediction/v1/events/{eventId}Get event detailsGET/prediction/v1/markets/{marketId}Get market detailsGET/prediction/v1/orderbook/{marketId}Get orderbookPOST/prediction/v1/ordersCreate order (returns unsigned tx)DELETE/prediction/v1/ordersClose/cancel orderGET/prediction/v1/positionsList user positionsDELETE/prediction/v1/positions/{positionPubkey}Sell positionPOST/prediction/v1/positions/{positionPubkey}/claimClaim winningsGET/prediction/v1/leaderboardsView leaderboardsGET/prediction/v1/profiles/{ownerPubkey}User profile stats\n\nKey Concepts\n\nContracts: Trade in units, each worth $0-$1 based on probability\nYES/NO: Binary outcomes - buy YES if you think event happens, NO otherwise\nSettlement: Winning contracts pay $1, losing contracts pay $0\nNo claim fees: Winners receive full $1 per contract"
      },
      {
        "title": "Jupiter Lend",
        "body": "Deposit tokens to earn yield or borrow against collateral.\n\nDeposit (Earn)\n\n# Get deposit transaction\nDEPOSIT=$(pnpm fetch-api -e /lend/v1/earn/deposit -m POST -b '{\n  \"asset\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"signer\": \"YOUR_WALLET_ADDRESS\"\n}')\n\n# Sign and send\nUNSIGNED_TX=$(echo \"$DEPOSIT\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\nWithdraw\n\nWITHDRAW=$(pnpm fetch-api -e /lend/v1/earn/withdraw -m POST -b '{\n  \"asset\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"signer\": \"YOUR_WALLET_ADDRESS\"\n}')\n# Sign and send as above"
      },
      {
        "title": "Portfolio API",
        "body": "Track DeFi positions, platform info, and staked JUP across Solana.\n\nGet Positions\n\nFetch all positions for a wallet address across Jupiter products.\n\n# Get all positions\npnpm fetch-api -e /portfolio/v1/positions/YOUR_WALLET_ADDRESS\n\n# Filter by specific platforms\npnpm fetch-api -e /portfolio/v1/positions/YOUR_WALLET_ADDRESS -p '{\"platforms\":\"jupiter-exchange,jupiter-governance\"}'\n\nResponse includes:\n\nelements: Array of position types (Multiple, Liquidity, Leverage, BorrowLend, Trade)\ntokenInfo: Token metadata indexed by network and address\nfetcherReports: Status of each data fetcher\n\nGet Platforms\n\nList all available platforms tracked by the Portfolio API.\n\npnpm fetch-api -e /portfolio/v1/platforms\n\nResponse includes platform details:\n\nid: Platform identifier (e.g., jupiter-exchange)\nname: Display name\nimage: Logo URL\ndescription: Platform summary\ndefiLlamaId: DefiLlama reference\nisDeprecated: Whether platform is deprecated\ntags: Categorization tags\nlinks: Social/web links (website, discord, twitter, github, docs)\n\nGet Staked JUP\n\nCheck staked JUP amounts and pending unstaking for a wallet.\n\npnpm fetch-api -e /portfolio/v1/staked-jup/YOUR_WALLET_ADDRESS\n\nResponse:\n\n{\n  \"stakedAmount\": 15000.5,\n  \"unstaking\": [\n    {\n      \"amount\": 500,\n      \"until\": 1711000000000\n    }\n  ]\n}\n\nstakedAmount: Total staked JUP\nunstaking: Pending unstakes with amount and completion timestamp (ms)"
      },
      {
        "title": "Trigger API (Limit Orders)",
        "body": "Create orders that execute automatically when price conditions are met.\n\nCreate Limit Order\n\nORDER=$(pnpm fetch-api -e /trigger/v1/createOrder -m POST -b '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"maker\": \"YOUR_WALLET_ADDRESS\",\n  \"payer\": \"YOUR_WALLET_ADDRESS\",\n  \"params\": {\n    \"makingAmount\": \"1000000000\",\n    \"takingAmount\": \"150000000\",\n    \"expiredAt\": null\n  }\n}')\n\n# Sign and send\nUNSIGNED_TX=$(echo \"$ORDER\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\nParameters:\n\nmakingAmount: Amount of input token to sell (in smallest units)\ntakingAmount: Minimum amount of output token to receive\nexpiredAt: Unix timestamp for expiration (null = no expiry)\nslippageBps: Optional slippage tolerance (0 = exact price only)\n\nGet Orders\n\n# Get active orders\npnpm fetch-api -e /trigger/v1/getTriggerOrders -p '{\"user\":\"YOUR_WALLET\",\"orderStatus\":\"active\"}'\n\n# Get order history\npnpm fetch-api -e /trigger/v1/getTriggerOrders -p '{\"user\":\"YOUR_WALLET\",\"orderStatus\":\"history\",\"page\":\"1\"}'\n\nCancel Order\n\n# Cancel single order\nCANCEL=$(pnpm fetch-api -e /trigger/v1/cancelOrder -m POST -b '{\n  \"maker\": \"YOUR_WALLET_ADDRESS\",\n  \"order\": \"ORDER_ACCOUNT_ADDRESS\",\n  \"computeUnitPrice\": \"auto\"\n}')\n# Sign and send transaction\n\n# Cancel all orders (batched in groups of 5)\nCANCEL_ALL=$(pnpm fetch-api -e /trigger/v1/cancelOrders -m POST -b '{\n  \"maker\": \"YOUR_WALLET_ADDRESS\",\n  \"computeUnitPrice\": \"auto\"\n}')\n\nTrigger API Endpoints\n\nMethodEndpointDescriptionPOST/trigger/v1/createOrderCreate limit orderGET/trigger/v1/getTriggerOrdersGet orders by walletPOST/trigger/v1/cancelOrderCancel single orderPOST/trigger/v1/cancelOrdersCancel multiple orders (batched)\n\nFees: 0.03% for stable pairs, 0.1% for other pairs."
      },
      {
        "title": "Recurring API (DCA)",
        "body": "Automate recurring token purchases at specified intervals.\n\nCreate DCA Order\n\nORDER=$(pnpm fetch-api -e /recurring/v1/createOrder -m POST -b '{\n  \"user\": \"YOUR_WALLET_ADDRESS\",\n  \"inputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"outputMint\": \"So11111111111111111111111111111111111111112\",\n  \"params\": {\n    \"time\": {\n      \"inAmount\": \"10000000\",\n      \"numberOfOrders\": 10,\n      \"interval\": 86400,\n      \"minPrice\": null,\n      \"maxPrice\": null,\n      \"startAt\": null\n    }\n  }\n}')\n\n# Sign and send\nUNSIGNED_TX=$(echo \"$ORDER\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\nParameters:\n\ninAmount: Total amount to spend (raw units)\nnumberOfOrders: How many purchases to make\ninterval: Seconds between purchases (86400 = daily)\nminPrice/maxPrice: Optional price bounds (null = any price)\nstartAt: Unix timestamp to start (null = immediate)\n\nGet Orders\n\n# Get active DCA orders\npnpm fetch-api -e /recurring/v1/getRecurringOrders -p '{\"user\":\"YOUR_WALLET\",\"orderStatus\":\"active\",\"recurringType\":\"time\"}'\n\n# Get order history\npnpm fetch-api -e /recurring/v1/getRecurringOrders -p '{\"user\":\"YOUR_WALLET\",\"orderStatus\":\"history\",\"recurringType\":\"time\",\"page\":\"1\"}'\n\nCancel Order\n\nCANCEL=$(pnpm fetch-api -e /recurring/v1/cancelOrder -m POST -b '{\n  \"user\": \"YOUR_WALLET_ADDRESS\",\n  \"order\": \"ORDER_ACCOUNT_ADDRESS\",\n  \"recurringType\": \"time\"\n}')\n# Sign and send transaction\n\nRecurring API Endpoints\n\nMethodEndpointDescriptionPOST/recurring/v1/createOrderCreate DCA orderGET/recurring/v1/getRecurringOrdersGet orders by walletPOST/recurring/v1/cancelOrderCancel order\n\nFees: 0.1% per execution. Token2022 tokens NOT supported."
      },
      {
        "title": "API Endpoints Reference",
        "body": "Use CaseAPIEndpointToken swaps (default)Ultra/ultra/v1/order, /ultra/v1/executeSwaps with controlMetis/swap/v1/quote, /swap/v1/swapLimit ordersTrigger/trigger/v1/createOrder, /trigger/v1/cancelOrderGet limit ordersTrigger/trigger/v1/getTriggerOrdersDCA ordersRecurring/recurring/v1/createOrder, /recurring/v1/cancelOrderGet DCA ordersRecurring/recurring/v1/getRecurringOrdersToken searchUltra/ultra/v1/searchToken holdingsUltra/ultra/v1/holdings/{address}Token warningsUltra/ultra/v1/shieldToken pricesPrice/price/v3?ids={mints}Token metadataTokens/tokens/v2/search?query={query}Portfolio positionsPortfolio/portfolio/v1/positions/{address}Portfolio platformsPortfolio/portfolio/v1/platformsStaked JUPPortfolio/portfolio/v1/staked-jup/{address}Prediction marketsPrediction/prediction/v1/events, /prediction/v1/ordersLending depositLend/lend/v1/earn/depositLending withdrawLend/lend/v1/earn/withdraw"
      },
      {
        "title": "API Key & Rate Limits",
        "body": "TierRate LimitFree60 requests/minuteProUp to 30,000 requests/minuteUltraDynamic scaling with executed swap volume\n\nUltra rate limits increase as you execute more swaps. Base: 50 requests per 10-second window."
      },
      {
        "title": "Fees",
        "body": "APIFeeUltra5-10 basis points per swapMetisNo Jupiter fee (you pay gas)\n\nIntegrators can add custom fees (50-255 bps). Jupiter takes 20% of integrator fees."
      },
      {
        "title": "Gasless Requirements",
        "body": "Ultra offers \"gasless\" swaps where Jupiter pays the transaction fees, but with important caveats:\n\nUser still needs SOL for account rent (creating token accounts)\nUser must sign the transaction (not truly \"zero-touch\")\nMinimum trade amount: ~$10 equivalent\nAutomatic when taker has <0.01 SOL\nJupiterZ RFQ: market makers pay transaction fees"
      },
      {
        "title": "Transaction Size Limit",
        "body": "Solana transactions are limited to 1232 bytes. If you hit this:\n\nReduce maxAccounts parameter in quote request\nUse dynamicComputeUnitLimit: true for Metis"
      },
      {
        "title": "Token Limitations",
        "body": "Token2022: NOT supported for Recurring (DCA) orders\nSome tokens may have transfer fees or freeze authority"
      },
      {
        "title": "Ultra vs Metis",
        "body": "FeatureUltraMetisRPC requiredNo (Jupiter handles)Yes (your RPC)GaslessYes (conditions apply)NoCustom instructionsNoYesTransaction compositionNoYesSlippageAuto-optimizedManual\n\nUse Ultra for most swaps. Use Metis only when you need to add custom instructions or compose transactions."
      },
      {
        "title": "Common Errors",
        "body": "ErrorCauseFixTransactionExpiredBlockhashNotFoundBlockhash expiredRequest fresh order/quoteSlippageToleranceExceededPrice moved too muchIncrease slippage or retryInsufficientFundsNot enough SOL/tokensCheck balancesRateLimited (429)Too many requestsWait and retry, or upgrade tierInvalidSignatureWrong signer or corrupted txVerify wallet matches taker address"
      },
      {
        "title": "Ultra Execute Error Codes",
        "body": "CodeMeaning0Success-1 to -5Client/validation errors-1000 to -1999Aggregator routing errors-2000 to -2999RFQ (market maker) errors"
      },
      {
        "title": "Environment Variables",
        "body": "VariableDescriptionDefaultJUP_API_KEYJupiter API key(required)SOLANA_RPC_URLRPC endpoint for send-transactionhttps://api.mainnet-beta.solana.com"
      },
      {
        "title": "Common Token Mints",
        "body": "TokenMint AddressSOL (wrapped)So11111111111111111111111111111111111111112USDCEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vUSDTEs9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYBJUPJUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"
      },
      {
        "title": "Resources",
        "body": "Freshness note: This skill includes Jupiter API guidance, but the API can change. After each new run/session, verify endpoints and params against the latest docs at dev.jup.ag."
      },
      {
        "title": "Docs URLs for Claude Sync",
        "body": "Check these first on each run/session:\n\nhttps://dev.jup.ag/llms.txt\nhttps://dev.jup.ag/llms-full.txt\n\nThen verify workflow-specific pages:\n\nhttps://dev.jup.ag/get-started/index.md\nhttps://dev.jup.ag/portal/setup.md\nhttps://dev.jup.ag/portal/rate-limit.md\nhttps://dev.jup.ag/portal/responses.md\nhttps://dev.jup.ag/docs/ultra/index.md\nhttps://dev.jup.ag/docs/ultra/get-started.md\nhttps://dev.jup.ag/docs/ultra/get-order.md\nhttps://dev.jup.ag/docs/ultra/execute-order.md\nhttps://dev.jup.ag/docs/ultra/response.md\nhttps://dev.jup.ag/docs/ultra/rate-limit.md\nhttps://dev.jup.ag/docs/ultra/search-token.md\nhttps://dev.jup.ag/docs/swap/index.md\nhttps://dev.jup.ag/docs/swap/get-quote.md\nhttps://dev.jup.ag/docs/swap/build-swap-transaction.md\nhttps://dev.jup.ag/docs/swap/send-swap-transaction.md\nhttps://dev.jup.ag/docs/swap/common-errors.md\nhttps://dev.jup.ag/updates/index.md\n\nAny Jupiter docs page can also be fetched as markdown by appending .md to the path.\n\nJupiter Portal - API key management\nJupiter Docs - Full documentation\nStatus Page - API status\nSolscan - Transaction explorer"
      }
    ],
    "body": "Jupiter API Skill\n\nExecute Jupiter API operations through 4 utility scripts for fetching data, signing transactions, and executing swaps on Solana.\n\nBase URL: https://api.jup.ag\n\nQuick Reference\nTask\tScript\tExample\nFetch any Jupiter API\tfetch-api.ts\tpnpm fetch-api -e /ultra/v1/search -p '{\"query\":\"SOL\"}'\nSign a transaction\twallet-sign.ts\tpnpm wallet-sign -t \"BASE64_TX\" -w ~/.config/solana/id.json\nExecute Ultra order\texecute-ultra.ts\tpnpm execute-ultra -r \"REQUEST_ID\" -t \"SIGNED_TX\"\nSend tx to RPC\tsend-transaction.ts\tpnpm send-transaction -t \"SIGNED_TX\"\nSetup\n\nInstall dependencies before using scripts:\n\ncd /path/to/jup-skill\npnpm install\n\n\nRun pnpm install once per clone (and again after dependency changes) before any pnpm fetch-api, pnpm wallet-sign, pnpm execute-ultra, or pnpm send-transaction command.\n\nAPI Key Setup\n\nALWAYS required. All Jupiter API endpoints require an x-api-key header.\n\nVisit portal.jup.ag\nCreate account and generate API key\nSet via environment variable (recommended):\nexport JUP_API_KEY=your_api_key_here\n\nOr pass via --api-key flag on each command.\nWallet Safety\n\nSigning requires access to a local Solana wallet JSON file (--wallet), which contains private key material.\n\nDo not use a high-value wallet for automation.\nPrefer a dedicated low-balance wallet for this workflow.\nFor testing, prefer ephemeral keys.\nIf your setup supports it, prefer hardware signing over raw key files.\nScripts\nfetch-api.ts\n\nFetch data from any Jupiter API endpoint.\n\n# Search for tokens\npnpm fetch-api -e /ultra/v1/search -p '{\"query\":\"SOL\"}'\n\n# Get Ultra swap order (quote + unsigned transaction)\npnpm fetch-api -e /ultra/v1/order -p '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"taker\": \"YOUR_WALLET_ADDRESS\"\n}'\n\n# Get Metis quote\npnpm fetch-api -e /swap/v1/quote -p '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"slippageBps\": \"50\"\n}'\n\n# POST request (for Metis swap transaction)\npnpm fetch-api -e /swap/v1/swap -m POST -b '{\n  \"quoteResponse\": {...},\n  \"userPublicKey\": \"YOUR_WALLET\"\n}'\n\n\nArguments:\n\n-e, --endpoint (required): API path, e.g., /ultra/v1/order\n-p, --params: Query params (GET) or body (POST) as JSON string\n-b, --body: Request body for POST requests\n-m, --method: HTTP method, GET (default) or POST\n-k, --api-key: API key (or use JUP_API_KEY env var)\nwallet-sign.ts\n\nSign transactions using a local wallet file.\n\nSECURITY NOTE: The --wallet flag is required. This script does not accept private keys via command line arguments to prevent exposure in shell history and process listings.\n\n# Using Solana CLI wallet (JSON array format)\npnpm wallet-sign -t \"BASE64_UNSIGNED_TX\" --wallet ~/.config/solana/id.json\n\n# Tilde expansion is supported\npnpm wallet-sign -t \"BASE64_UNSIGNED_TX\" --wallet ~/my-wallets/trading.json\n\n\nArguments:\n\n-t, --unsigned-tx (required): Base64-encoded unsigned transaction\n-w, --wallet (required): Path to Solana CLI JSON wallet file (supports ~ for home directory)\n\nOutput: Signed transaction (base64) to stdout.\n\nexecute-ultra.ts\n\nExecute Ultra orders after signing.\n\npnpm execute-ultra -r \"REQUEST_ID_FROM_ORDER\" -t \"BASE64_SIGNED_TX\"\n\n\nArguments:\n\n-r, --request-id (required): Request ID from /ultra/v1/order response\n-t, --signed-tx (required): Base64-encoded signed transaction\n-k, --api-key: API key (or use JUP_API_KEY env var)\n\nOutput: Execution result JSON including signature and status.\n\nsend-transaction.ts\n\nSend signed transactions to Solana RPC. Use for Metis swaps (Ultra handles RPC internally).\n\nWarning: The default public Solana RPC (api.mainnet-beta.solana.com) is rate-limited and unreliable for production use. Use a dedicated RPC provider (Helius, QuickNode, Triton, etc.) for production applications.\n\n# Default RPC (mainnet-beta)\npnpm send-transaction -t \"BASE64_SIGNED_TX\"\n\n# Custom RPC\npnpm send-transaction -t \"BASE64_SIGNED_TX\" -r \"https://your-rpc.com\"\n\n# With environment variable\nexport SOLANA_RPC_URL=\"https://your-rpc.com\"\npnpm send-transaction -t \"BASE64_SIGNED_TX\"\n\n\nArguments:\n\n-t, --signed-tx (required): Base64-encoded signed transaction\n-r, --rpc-url: RPC endpoint (default: https://api.mainnet-beta.solana.com)\n--skip-preflight: Skip preflight checks (faster, less safe)\n--max-retries: Max send retries (default: 3)\n\nOutput: Transaction signature to stdout.\n\nWorkflows\nUltra Swap (Recommended)\n\nUltra is RPC-less, gasless, with automatic slippage optimization.\n\nUltra Swap Progress:\n- [ ] Step 1: Get order from /ultra/v1/order\n- [ ] Step 2: Sign the transaction\n- [ ] Step 3: Execute via /ultra/v1/execute\n- [ ] Step 4: Verify result\n\n\nStep 1: Get Order\n\nORDER=$(pnpm fetch-api -e /ultra/v1/order -p '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"taker\": \"YOUR_WALLET_ADDRESS\"\n}')\necho \"$ORDER\"\n\n\nResponse contains requestId and transaction (base64 unsigned).\n\nStep 2: Sign Transaction\n\nExtract transaction from response and sign:\n\nUNSIGNED_TX=$(echo \"$ORDER\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\n\n\nStep 3: Execute Order\n\nREQUEST_ID=$(echo \"$ORDER\" | jq -r '.requestId')\npnpm execute-ultra -r \"$REQUEST_ID\" -t \"$SIGNED_TX\"\n\n\nStep 4: Verify\n\nCheck the signature on Solscan.\n\nMetis Swap (Advanced)\n\nUse Metis when you need custom transaction composition or fine-grained control.\n\nMetis Swap Progress:\n- [ ] Step 1: Get quote from /swap/v1/quote\n- [ ] Step 2: Build transaction via /swap/v1/swap\n- [ ] Step 3: Sign the transaction\n- [ ] Step 4: Send to RPC\n- [ ] Step 5: Verify on-chain\n\n\nStep 1: Get Quote\n\nQUOTE=$(pnpm fetch-api -e /swap/v1/quote -p '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"slippageBps\": \"50\"\n}')\n\n\nStep 2: Build Transaction\n\nSWAP_TX=$(pnpm fetch-api -e /swap/v1/swap -m POST -b \"{\n  \\\"quoteResponse\\\": $QUOTE,\n  \\\"userPublicKey\\\": \\\"YOUR_WALLET_ADDRESS\\\",\n  \\\"dynamicComputeUnitLimit\\\": true,\n  \\\"prioritizationFeeLamports\\\": \\\"auto\\\"\n}\")\n\n\nStep 3: Sign\n\nUNSIGNED_TX=$(echo \"$SWAP_TX\" | jq -r '.swapTransaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" --wallet ~/.config/solana/id.json)\n\n\nStep 4: Send to RPC\n\npnpm send-transaction -t \"$SIGNED_TX\" -r \"https://your-rpc.com\"\n\n\nStep 5: Verify\n\nCheck signature on Solscan.\n\nPrediction Markets (Beta)\n\nTrade on real-world event outcomes. Contracts trade $0-$1 USD, with prices reflecting outcome probability.\n\nPrediction Market Flow:\n- [ ] Step 1: Browse events/markets\n- [ ] Step 2: Create order (buy YES/NO contracts)\n- [ ] Step 3: Sign and send transaction\n- [ ] Step 4: Monitor position\n- [ ] Step 5: Claim winnings (if correct)\n\n\nStep 1: Browse Events\n\n# Search for events\npnpm fetch-api -e /prediction/v1/events/search -p '{\"query\":\"election\",\"limit\":\"10\"}'\n\n# List all events\npnpm fetch-api -e /prediction/v1/events -p '{\"category\":\"politics\",\"includeMarkets\":\"true\"}'\n\n# Get specific event with markets\npnpm fetch-api -e /prediction/v1/events/{eventId} -p '{\"includeMarkets\":\"true\"}'\n\n\nStep 2: Create Order\n\n# Buy YES contracts on a market\nORDER=$(pnpm fetch-api -e /prediction/v1/orders -m POST -b '{\n  \"ownerPubkey\": \"YOUR_WALLET_ADDRESS\",\n  \"marketId\": \"MARKET_ID\",\n  \"isYes\": true,\n  \"isBuy\": true,\n  \"contracts\": 10,\n  \"maxBuyPriceUsd\": 0.65\n}')\n\n\nResponse contains transaction (base64 unsigned) and order details.\n\nStep 3: Sign and Send\n\nUNSIGNED_TX=$(echo \"$ORDER\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\n\nStep 4: Monitor Position\n\n# List your positions\npnpm fetch-api -e /prediction/v1/positions -p '{\"ownerPubkey\":\"YOUR_WALLET_ADDRESS\"}'\n\n# Get specific position\npnpm fetch-api -e /prediction/v1/positions/{positionPubkey}\n\n# View order history\npnpm fetch-api -e /prediction/v1/history -p '{\"ownerPubkey\":\"YOUR_WALLET_ADDRESS\"}'\n\n\nStep 5: Claim Winnings\n\nAfter market resolves, claim payout for winning positions:\n\nCLAIM=$(pnpm fetch-api -e /prediction/v1/positions/{positionPubkey}/claim -m POST -b '{\n  \"ownerPubkey\": \"YOUR_WALLET_ADDRESS\"\n}')\nUNSIGNED_TX=$(echo \"$CLAIM\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\n\nPrediction API Endpoints\n\nMethod\tEndpoint\tDescription\nGET\t/prediction/v1/events\tList events with filters\nGET\t/prediction/v1/events/search\tSearch events by query\nGET\t/prediction/v1/events/{eventId}\tGet event details\nGET\t/prediction/v1/markets/{marketId}\tGet market details\nGET\t/prediction/v1/orderbook/{marketId}\tGet orderbook\nPOST\t/prediction/v1/orders\tCreate order (returns unsigned tx)\nDELETE\t/prediction/v1/orders\tClose/cancel order\nGET\t/prediction/v1/positions\tList user positions\nDELETE\t/prediction/v1/positions/{positionPubkey}\tSell position\nPOST\t/prediction/v1/positions/{positionPubkey}/claim\tClaim winnings\nGET\t/prediction/v1/leaderboards\tView leaderboards\nGET\t/prediction/v1/profiles/{ownerPubkey}\tUser profile stats\n\nKey Concepts\n\nContracts: Trade in units, each worth $0-$1 based on probability\nYES/NO: Binary outcomes - buy YES if you think event happens, NO otherwise\nSettlement: Winning contracts pay $1, losing contracts pay $0\nNo claim fees: Winners receive full $1 per contract\nJupiter Lend\n\nDeposit tokens to earn yield or borrow against collateral.\n\nDeposit (Earn)\n\n# Get deposit transaction\nDEPOSIT=$(pnpm fetch-api -e /lend/v1/earn/deposit -m POST -b '{\n  \"asset\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"signer\": \"YOUR_WALLET_ADDRESS\"\n}')\n\n# Sign and send\nUNSIGNED_TX=$(echo \"$DEPOSIT\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\n\nWithdraw\n\nWITHDRAW=$(pnpm fetch-api -e /lend/v1/earn/withdraw -m POST -b '{\n  \"asset\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"amount\": \"1000000\",\n  \"signer\": \"YOUR_WALLET_ADDRESS\"\n}')\n# Sign and send as above\n\nPortfolio API\n\nTrack DeFi positions, platform info, and staked JUP across Solana.\n\nGet Positions\n\nFetch all positions for a wallet address across Jupiter products.\n\n# Get all positions\npnpm fetch-api -e /portfolio/v1/positions/YOUR_WALLET_ADDRESS\n\n# Filter by specific platforms\npnpm fetch-api -e /portfolio/v1/positions/YOUR_WALLET_ADDRESS -p '{\"platforms\":\"jupiter-exchange,jupiter-governance\"}'\n\n\nResponse includes:\n\nelements: Array of position types (Multiple, Liquidity, Leverage, BorrowLend, Trade)\ntokenInfo: Token metadata indexed by network and address\nfetcherReports: Status of each data fetcher\n\nGet Platforms\n\nList all available platforms tracked by the Portfolio API.\n\npnpm fetch-api -e /portfolio/v1/platforms\n\n\nResponse includes platform details:\n\nid: Platform identifier (e.g., jupiter-exchange)\nname: Display name\nimage: Logo URL\ndescription: Platform summary\ndefiLlamaId: DefiLlama reference\nisDeprecated: Whether platform is deprecated\ntags: Categorization tags\nlinks: Social/web links (website, discord, twitter, github, docs)\n\nGet Staked JUP\n\nCheck staked JUP amounts and pending unstaking for a wallet.\n\npnpm fetch-api -e /portfolio/v1/staked-jup/YOUR_WALLET_ADDRESS\n\n\nResponse:\n\n{\n  \"stakedAmount\": 15000.5,\n  \"unstaking\": [\n    {\n      \"amount\": 500,\n      \"until\": 1711000000000\n    }\n  ]\n}\n\nstakedAmount: Total staked JUP\nunstaking: Pending unstakes with amount and completion timestamp (ms)\nTrigger API (Limit Orders)\n\nCreate orders that execute automatically when price conditions are met.\n\nCreate Limit Order\n\nORDER=$(pnpm fetch-api -e /trigger/v1/createOrder -m POST -b '{\n  \"inputMint\": \"So11111111111111111111111111111111111111112\",\n  \"outputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"maker\": \"YOUR_WALLET_ADDRESS\",\n  \"payer\": \"YOUR_WALLET_ADDRESS\",\n  \"params\": {\n    \"makingAmount\": \"1000000000\",\n    \"takingAmount\": \"150000000\",\n    \"expiredAt\": null\n  }\n}')\n\n# Sign and send\nUNSIGNED_TX=$(echo \"$ORDER\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\n\nParameters:\n\nmakingAmount: Amount of input token to sell (in smallest units)\ntakingAmount: Minimum amount of output token to receive\nexpiredAt: Unix timestamp for expiration (null = no expiry)\nslippageBps: Optional slippage tolerance (0 = exact price only)\n\nGet Orders\n\n# Get active orders\npnpm fetch-api -e /trigger/v1/getTriggerOrders -p '{\"user\":\"YOUR_WALLET\",\"orderStatus\":\"active\"}'\n\n# Get order history\npnpm fetch-api -e /trigger/v1/getTriggerOrders -p '{\"user\":\"YOUR_WALLET\",\"orderStatus\":\"history\",\"page\":\"1\"}'\n\n\nCancel Order\n\n# Cancel single order\nCANCEL=$(pnpm fetch-api -e /trigger/v1/cancelOrder -m POST -b '{\n  \"maker\": \"YOUR_WALLET_ADDRESS\",\n  \"order\": \"ORDER_ACCOUNT_ADDRESS\",\n  \"computeUnitPrice\": \"auto\"\n}')\n# Sign and send transaction\n\n# Cancel all orders (batched in groups of 5)\nCANCEL_ALL=$(pnpm fetch-api -e /trigger/v1/cancelOrders -m POST -b '{\n  \"maker\": \"YOUR_WALLET_ADDRESS\",\n  \"computeUnitPrice\": \"auto\"\n}')\n\n\nTrigger API Endpoints\n\nMethod\tEndpoint\tDescription\nPOST\t/trigger/v1/createOrder\tCreate limit order\nGET\t/trigger/v1/getTriggerOrders\tGet orders by wallet\nPOST\t/trigger/v1/cancelOrder\tCancel single order\nPOST\t/trigger/v1/cancelOrders\tCancel multiple orders (batched)\n\nFees: 0.03% for stable pairs, 0.1% for other pairs.\n\nRecurring API (DCA)\n\nAutomate recurring token purchases at specified intervals.\n\nCreate DCA Order\n\nORDER=$(pnpm fetch-api -e /recurring/v1/createOrder -m POST -b '{\n  \"user\": \"YOUR_WALLET_ADDRESS\",\n  \"inputMint\": \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n  \"outputMint\": \"So11111111111111111111111111111111111111112\",\n  \"params\": {\n    \"time\": {\n      \"inAmount\": \"10000000\",\n      \"numberOfOrders\": 10,\n      \"interval\": 86400,\n      \"minPrice\": null,\n      \"maxPrice\": null,\n      \"startAt\": null\n    }\n  }\n}')\n\n# Sign and send\nUNSIGNED_TX=$(echo \"$ORDER\" | jq -r '.transaction')\nSIGNED_TX=$(pnpm wallet-sign -t \"$UNSIGNED_TX\" -w ~/.config/solana/id.json)\npnpm send-transaction -t \"$SIGNED_TX\" -r \"YOUR_RPC_URL\"\n\n\nParameters:\n\ninAmount: Total amount to spend (raw units)\nnumberOfOrders: How many purchases to make\ninterval: Seconds between purchases (86400 = daily)\nminPrice/maxPrice: Optional price bounds (null = any price)\nstartAt: Unix timestamp to start (null = immediate)\n\nGet Orders\n\n# Get active DCA orders\npnpm fetch-api -e /recurring/v1/getRecurringOrders -p '{\"user\":\"YOUR_WALLET\",\"orderStatus\":\"active\",\"recurringType\":\"time\"}'\n\n# Get order history\npnpm fetch-api -e /recurring/v1/getRecurringOrders -p '{\"user\":\"YOUR_WALLET\",\"orderStatus\":\"history\",\"recurringType\":\"time\",\"page\":\"1\"}'\n\n\nCancel Order\n\nCANCEL=$(pnpm fetch-api -e /recurring/v1/cancelOrder -m POST -b '{\n  \"user\": \"YOUR_WALLET_ADDRESS\",\n  \"order\": \"ORDER_ACCOUNT_ADDRESS\",\n  \"recurringType\": \"time\"\n}')\n# Sign and send transaction\n\n\nRecurring API Endpoints\n\nMethod\tEndpoint\tDescription\nPOST\t/recurring/v1/createOrder\tCreate DCA order\nGET\t/recurring/v1/getRecurringOrders\tGet orders by wallet\nPOST\t/recurring/v1/cancelOrder\tCancel order\n\nFees: 0.1% per execution. Token2022 tokens NOT supported.\n\nAPI Endpoints Reference\nUse Case\tAPI\tEndpoint\nToken swaps (default)\tUltra\t/ultra/v1/order, /ultra/v1/execute\nSwaps with control\tMetis\t/swap/v1/quote, /swap/v1/swap\nLimit orders\tTrigger\t/trigger/v1/createOrder, /trigger/v1/cancelOrder\nGet limit orders\tTrigger\t/trigger/v1/getTriggerOrders\nDCA orders\tRecurring\t/recurring/v1/createOrder, /recurring/v1/cancelOrder\nGet DCA orders\tRecurring\t/recurring/v1/getRecurringOrders\nToken search\tUltra\t/ultra/v1/search\nToken holdings\tUltra\t/ultra/v1/holdings/{address}\nToken warnings\tUltra\t/ultra/v1/shield\nToken prices\tPrice\t/price/v3?ids={mints}\nToken metadata\tTokens\t/tokens/v2/search?query={query}\nPortfolio positions\tPortfolio\t/portfolio/v1/positions/{address}\nPortfolio platforms\tPortfolio\t/portfolio/v1/platforms\nStaked JUP\tPortfolio\t/portfolio/v1/staked-jup/{address}\nPrediction markets\tPrediction\t/prediction/v1/events, /prediction/v1/orders\nLending deposit\tLend\t/lend/v1/earn/deposit\nLending withdraw\tLend\t/lend/v1/earn/withdraw\nCaveats & Limitations\nAPI Key & Rate Limits\nTier\tRate Limit\nFree\t60 requests/minute\nPro\tUp to 30,000 requests/minute\nUltra\tDynamic scaling with executed swap volume\n\nUltra rate limits increase as you execute more swaps. Base: 50 requests per 10-second window.\n\nFees\nAPI\tFee\nUltra\t5-10 basis points per swap\nMetis\tNo Jupiter fee (you pay gas)\n\nIntegrators can add custom fees (50-255 bps). Jupiter takes 20% of integrator fees.\n\nGasless Requirements\n\nUltra offers \"gasless\" swaps where Jupiter pays the transaction fees, but with important caveats:\n\nUser still needs SOL for account rent (creating token accounts)\nUser must sign the transaction (not truly \"zero-touch\")\nMinimum trade amount: ~$10 equivalent\nAutomatic when taker has <0.01 SOL\nJupiterZ RFQ: market makers pay transaction fees\nTransaction Size Limit\n\nSolana transactions are limited to 1232 bytes. If you hit this:\n\nReduce maxAccounts parameter in quote request\nUse dynamicComputeUnitLimit: true for Metis\nToken Limitations\nToken2022: NOT supported for Recurring (DCA) orders\nSome tokens may have transfer fees or freeze authority\nUltra vs Metis\nFeature\tUltra\tMetis\nRPC required\tNo (Jupiter handles)\tYes (your RPC)\nGasless\tYes (conditions apply)\tNo\nCustom instructions\tNo\tYes\nTransaction composition\tNo\tYes\nSlippage\tAuto-optimized\tManual\n\nUse Ultra for most swaps. Use Metis only when you need to add custom instructions or compose transactions.\n\nCommon Errors\nError\tCause\tFix\nTransactionExpiredBlockhashNotFound\tBlockhash expired\tRequest fresh order/quote\nSlippageToleranceExceeded\tPrice moved too much\tIncrease slippage or retry\nInsufficientFunds\tNot enough SOL/tokens\tCheck balances\nRateLimited (429)\tToo many requests\tWait and retry, or upgrade tier\nInvalidSignature\tWrong signer or corrupted tx\tVerify wallet matches taker address\nUltra Execute Error Codes\nCode\tMeaning\n0\tSuccess\n-1 to -5\tClient/validation errors\n-1000 to -1999\tAggregator routing errors\n-2000 to -2999\tRFQ (market maker) errors\nEnvironment Variables\nVariable\tDescription\tDefault\nJUP_API_KEY\tJupiter API key\t(required)\nSOLANA_RPC_URL\tRPC endpoint for send-transaction\thttps://api.mainnet-beta.solana.com\nCommon Token Mints\nToken\tMint Address\nSOL (wrapped)\tSo11111111111111111111111111111111111111112\nUSDC\tEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\nUSDT\tEs9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\nJUP\tJUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN\nResources\n\nFreshness note: This skill includes Jupiter API guidance, but the API can change. After each new run/session, verify endpoints and params against the latest docs at dev.jup.ag.\n\nDocs URLs for Claude Sync\n\nCheck these first on each run/session:\n\nhttps://dev.jup.ag/llms.txt\nhttps://dev.jup.ag/llms-full.txt\n\nThen verify workflow-specific pages:\n\nhttps://dev.jup.ag/get-started/index.md\nhttps://dev.jup.ag/portal/setup.md\nhttps://dev.jup.ag/portal/rate-limit.md\nhttps://dev.jup.ag/portal/responses.md\nhttps://dev.jup.ag/docs/ultra/index.md\nhttps://dev.jup.ag/docs/ultra/get-started.md\nhttps://dev.jup.ag/docs/ultra/get-order.md\nhttps://dev.jup.ag/docs/ultra/execute-order.md\nhttps://dev.jup.ag/docs/ultra/response.md\nhttps://dev.jup.ag/docs/ultra/rate-limit.md\nhttps://dev.jup.ag/docs/ultra/search-token.md\nhttps://dev.jup.ag/docs/swap/index.md\nhttps://dev.jup.ag/docs/swap/get-quote.md\nhttps://dev.jup.ag/docs/swap/build-swap-transaction.md\nhttps://dev.jup.ag/docs/swap/send-swap-transaction.md\nhttps://dev.jup.ag/docs/swap/common-errors.md\nhttps://dev.jup.ag/updates/index.md\n\nAny Jupiter docs page can also be fetched as markdown by appending .md to the path.\n\nJupiter Portal - API key management\nJupiter Docs - Full documentation\nStatus Page - API status\nSolscan - Transaction explorer"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/lifeofpavs/jup-skill",
    "publisherUrl": "https://clawhub.ai/lifeofpavs/jup-skill",
    "owner": "lifeofpavs",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/jup-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/jup-skill",
    "agentUrl": "https://openagent3.xyz/skills/jup-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/jup-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/jup-skill/agent.md"
  }
}