Skip to main content
Jupiter Skills are pre-built, structured action definitions that AI agents can use to interact with Jupiter’s APIs. Each skill describes a specific capability — like swapping tokens, fetching prices, or searching for tokens — with clear input/output schemas that any agent framework can consume.

skill.md

Jupiter’s documentation automatically exposes a machine-readable skill file at dev.jup.ag/skill.md, following the agentskills.io specification. This file is auto-generated by Mintlify and provides a comprehensive, structured overview of all Jupiter capabilities — including skills, workflows, integration paths, and context — that AI agents and tools can consume directly. Use skill.md when you want a single, self-contained reference for agent discovery. Use the Skills Repository when you need modular, code-ready skill definitions for specific frameworks.

What is a Skill?

A skill is a self-contained description of an API action that an AI agent can perform. It includes:
  • Name and description — what the skill does, in natural language
  • Input schema — the parameters the agent needs to provide
  • Output schema — what the agent gets back
  • API endpoint — the actual HTTP call to make
  • Examples — sample inputs and expected outputs
This structured format lets agent frameworks automatically discover and use Jupiter’s capabilities without custom integration code.

Jupiter Skills Repository

Jupiter Skills Repository

Open-source collection of ready-to-use skill definitions for Jupiter APIs.
The repository includes skills for:
SkillAPIDescription
Swap TokensUltra SwapGet quotes and execute token swaps
Search TokensTokens V2Find tokens by name, symbol, or mint address
Get PricePrice V3Fetch real-time USD prices for any token
Get HoldingsUltraCheck wallet token balances
Token SafetyUltra ShieldGet security warnings for tokens
Trending TokensTokens V2Discover trending tokens
MoreMore to come…More to come…

Using Skills

Skills work with any LLM that supports function calling or tool use. Define them once, and your model can invoke Jupiter APIs autonomously.

Direct Function Calling

The most universal approach — works with any LLM provider.
import anthropic

client = anthropic.Anthropic()

tools = [
    {
        "name": "swap_tokens",
        "description": "Get a swap quote and execute a token swap on Solana via Jupiter Ultra Swap API. Returns route, price impact, and transaction to sign.",
        "input_schema": {
            "type": "object",
            "properties": {
                "inputMint": {"type": "string", "description": "Mint address of the token to sell"},
                "outputMint": {"type": "string", "description": "Mint address of the token to buy"},
                "amount": {"type": "integer", "description": "Amount in smallest unit (e.g., lamports for SOL, where 1 SOL = 1_000_000_000)"}
            },
            "required": ["inputMint", "outputMint", "amount"]
        }
    },
    {
        "name": "search_tokens",
        "description": "Search for Solana tokens by name, symbol, or mint address using Jupiter Tokens V2 API.",
        "input_schema": {
            "type": "object",
            "properties": {
                "query": {"type": "string", "description": "Search term — token name, symbol, or mint address"}
            },
            "required": ["query"]
        }
    },
    {
        "name": "get_price",
        "description": "Get real-time USD price for one or more Solana tokens using Jupiter Price V3 API.",
        "input_schema": {
            "type": "object",
            "properties": {
                "mints": {"type": "string", "description": "Comma-separated mint addresses"}
            },
            "required": ["mints"]
        }
    },
    {
        "name": "get_holdings",
        "description": "Get all token balances for a Solana wallet address using Jupiter Ultra API.",
        "input_schema": {
            "type": "object",
            "properties": {
                "walletAddress": {"type": "string", "description": "Solana wallet public key"}
            },
            "required": ["walletAddress"]
        }
    },
    {
        "name": "check_token_safety",
        "description": "Get security warnings and risk flags for tokens using Jupiter Shield API. Always call this before swapping unknown tokens.",
        "input_schema": {
            "type": "object",
            "properties": {
                "mints": {"type": "string", "description": "Comma-separated mint addresses to check"}
            },
            "required": ["mints"]
        }
    }
]

# Handle tool calls
def handle_tool_call(name, input):
    import requests
    base = "https://lite-api.jup.ag"
    if name == "swap_tokens":
        r = requests.get(f"{base}/ultra/v1/order", params=input)
    elif name == "search_tokens":
        r = requests.get(f"{base}/tokens/v2/search", params={"query": input["query"]})
    elif name == "get_price":
        r = requests.get(f"{base}/price/v3", params={"ids": input["mints"]})
    elif name == "get_holdings":
        r = requests.get(f"{base}/ultra/v1/holdings/{input['walletAddress']}")
    elif name == "check_token_safety":
        r = requests.get(f"{base}/ultra/v1/shield", params={"mints": input["mints"]})
    return r.json()

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "What's the price of SOL right now?"}]
)

Vercel AI SDK

import { tool } from 'ai';
import { z } from 'zod';

const swapQuote = tool({
  description: 'Get a swap quote for trading tokens on Solana via Jupiter',
  parameters: z.object({
    inputMint: z.string().describe('Mint address of the token to sell'),
    outputMint: z.string().describe('Mint address of the token to buy'),
    amount: z.number().describe('Amount in smallest unit (e.g., lamports for SOL)'),
  }),
  execute: async ({ inputMint, outputMint, amount }) => {
    const params = new URLSearchParams({ inputMint, outputMint, amount: amount.toString() });
    const res = await fetch(`https://lite-api.jup.ag/ultra/v1/order?${params}`);
    return res.json();
  },
});

const searchTokens = tool({
  description: 'Search for Solana tokens by name, symbol, or mint address',
  parameters: z.object({
    query: z.string().describe('Search term — token name, symbol, or mint address'),
  }),
  execute: async ({ query }) => {
    const res = await fetch(`https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(query)}`);
    return res.json();
  },
});

const getPrice = tool({
  description: 'Get real-time USD price for Solana tokens',
  parameters: z.object({
    mints: z.string().describe('Comma-separated mint addresses'),
  }),
  execute: async ({ mints }) => {
    const res = await fetch(`https://lite-api.jup.ag/price/v3?ids=${mints}`);
    return res.json();
  },
});

LangChain

from langchain.tools import tool

@tool
def search_tokens(query: str) -> dict:
    """Search for Solana tokens by name, symbol, or mint address using Jupiter Tokens V2 API."""
    import requests
    return requests.get(f"https://lite-api.jup.ag/tokens/v2/search?query={query}").json()

@tool
def get_token_price(mints: str) -> dict:
    """Get real-time USD prices for Solana tokens. Pass comma-separated mint addresses."""
    import requests
    return requests.get(f"https://lite-api.jup.ag/price/v3?ids={mints}").json()

@tool
def swap_quote(input_mint: str, output_mint: str, amount: int) -> dict:
    """Get a swap quote from Jupiter Ultra Swap API. Amount in smallest unit (lamports for SOL)."""
    import requests
    return requests.get("https://lite-api.jup.ag/ultra/v1/order", params={
        "inputMint": input_mint, "outputMint": output_mint, "amount": str(amount)
    }).json()

Contributing Skills

The skills repository is open source. You can contribute new skills, improve existing ones, or adapt them for your preferred agent framework.

Contribute

Submit a pull request to add or improve skills.