Skip to content

Commit c9bc43f

Browse files
v14.0.0 (#26)
1 parent aae22fe commit c9bc43f

File tree

8 files changed

+138
-172
lines changed

8 files changed

+138
-172
lines changed

README.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ config = {
7373
"tools": {
7474
"solana_ultra": {
7575
"private_key": "my-private-key", # Required - base58 string - please use env vars to store the key as it is very confidential
76-
"jupiter_api_key": "my-jupiter-api-key", # Optional but recommended - get free key at jup.ag for dynamic rate limits (starts at 5 RPS, scales with usage)
76+
"jupiter_api_key": "my-jupiter-api-key", # Required - get free key at portal.jup.ag (60 req/min on free tier)
7777
"referral_account": "my-referral-account", # Optional - your Jupiter referral account public key for collecting fees
7878
"referral_fee": 50, # Optional - fee in basis points (50-255 bps, e.g., 50 = 0.5%). Jupiter takes 20% of this fee.
7979
"payer_private_key": "payer-private-key", # Optional - base58 private key for gasless transactions (integrator pays gas)
@@ -88,10 +88,9 @@ config = {
8888
- **Transaction Landing**: Jupiter handles retries and transaction confirmation
8989
- **Referral Fees**: Optionally collect integrator fees (50-255 bps) via your Jupiter referral account
9090
- **Integrator Gas Payer**: Optionally pay for gas on behalf of users for truly gasless swaps
91-
- **Dynamic Rate Limits**: With API key, rate limits scale automatically with your usage (free)
9291

93-
**API Key (Recommended):**
94-
Get a free Jupiter API key at [jup.ag](https://jup.ag) for dynamic rate limits. Without a key, you use the lite API with lower limits. With a key, you start at 5 RPS and it scales automatically at no cost.
92+
**API Key (Required):**
93+
Get a free Jupiter API key at [portal.jup.ag](https://portal.jup.ag). The free tier provides 60 requests per minute. The lite API (no key) was deprecated on December 31, 2025.
9594

9695
**Setting up Referral Account:**
9796
To collect fees, you need a Jupiter referral account. Create one at [referral.jup.ag](https://referral.jup.ag/). Jupiter takes 20% of the referral fee you set. You also need to create token accounts for the tokens you want to collect fees in.
@@ -108,7 +107,7 @@ config = {
108107
"tools": {
109108
"jupiter_trigger": {
110109
"private_key": "my-private-key", # Required - base58 string
111-
"jupiter_api_key": "my-jupiter-api-key", # Optional - for pro API with higher rate limits
110+
"jupiter_api_key": "my-jupiter-api-key", # Required - get free key at portal.jup.ag
112111
"referral_account": "my-referral-account", # Optional - for collecting fees
113112
"referral_fee": 50, # Optional - fee in basis points (50-255 bps)
114113
"payer_private_key": "payer-private-key", # Optional - for gasless transactions
@@ -139,7 +138,7 @@ config = {
139138
"tools": {
140139
"jupiter_recurring": {
141140
"private_key": "my-private-key", # Required - base58 string
142-
"jupiter_api_key": "my-jupiter-api-key", # Optional - for pro API with higher rate limits
141+
"jupiter_api_key": "my-jupiter-api-key", # Required - get free key at portal.jup.ag
143142
"payer_private_key": "payer-private-key", # Optional - for gasless transactions
144143
},
145144
},
@@ -173,7 +172,9 @@ This plugin enables Solana Agent to get token holdings with USD values for any w
173172
```python
174173
config = {
175174
"tools": {
176-
"jupiter_holdings": {}, # No configuration required
175+
"jupiter_holdings": {
176+
"jupiter_api_key": "my-jupiter-api-key", # Required - get free key at portal.jup.ag
177+
},
177178
},
178179
"agents": [
179180
{
@@ -198,7 +199,9 @@ This plugin enables Solana Agent to get security warnings and risk information f
198199
```python
199200
config = {
200201
"tools": {
201-
"jupiter_shield": {}, # No configuration required
202+
"jupiter_shield": {
203+
"jupiter_api_key": "my-jupiter-api-key", # Required - get free key at portal.jup.ag
204+
},
202205
},
203206
"agents": [
204207
{
@@ -223,7 +226,9 @@ This plugin enables Solana Agent to search for Solana tokens by symbol, name, or
223226
```python
224227
config = {
225228
"tools": {
226-
"jupiter_token_search": {}, # No configuration required
229+
"jupiter_token_search": {
230+
"jupiter_api_key": "my-jupiter-api-key", # Required - get free key at portal.jup.ag
231+
},
227232
},
228233
"agents": [
229234
{
@@ -271,7 +276,7 @@ config = {
271276
"app_id": "your-privy-app-id", # Required - your Privy application ID
272277
"app_secret": "your-privy-app-secret", # Required - your Privy application secret
273278
"signing_key": "wallet-auth:your-signing-key", # Required - your Privy wallet authorization signing key
274-
"jupiter_api_key": "my-jupiter-api-key", # Optional but recommended - get free key at jup.ag for dynamic rate limits
279+
"jupiter_api_key": "my-jupiter-api-key", # Required - get free key at portal.jup.ag
275280
"referral_account": "my-referral-account", # Optional - your Jupiter referral account public key for collecting fees
276281
"referral_fee": 50, # Optional - fee in basis points (50-255 bps, e.g., 50 = 0.5%). Jupiter takes 20% of this fee.
277282
"payer_private_key": "payer-private-key", # Optional - base58 private key for gasless transactions (integrator pays gas)
@@ -285,7 +290,6 @@ config = {
285290
- **Privy Delegated Wallets**: Use Privy's embedded wallets with delegation for seamless user experience
286291
- **Referral Fees**: Optionally collect integrator fees (50-255 bps) via your Jupiter referral account
287292
- **Integrator Gas Payer**: Optionally pay for gas on behalf of users for truly gasless swaps
288-
- **Dynamic Rate Limits**: With API key, rate limits scale automatically with your usage (free)
289293

290294
### Privy Trigger
291295

@@ -298,7 +302,7 @@ config = {
298302
"app_id": "your-privy-app-id", # Required - your Privy application ID
299303
"app_secret": "your-privy-app-secret", # Required - your Privy application secret
300304
"signing_key": "wallet-auth:your-signing-key", # Required - your Privy wallet authorization signing key
301-
"jupiter_api_key": "my-jupiter-api-key", # Optional - for pro API with higher rate limits
305+
"jupiter_api_key": "my-jupiter-api-key", # Required - get free key at portal.jup.ag
302306
"referral_account": "my-referral-account", # Optional - for collecting fees
303307
"referral_fee": 50, # Optional - fee in basis points (50-255 bps)
304308
"payer_private_key": "payer-private-key", # Optional - for gasless transactions
@@ -320,7 +324,7 @@ config = {
320324
"app_id": "your-privy-app-id", # Required - your Privy application ID
321325
"app_secret": "your-privy-app-secret", # Required - your Privy application secret
322326
"signing_key": "wallet-auth:your-signing-key", # Required - your Privy wallet authorization signing key
323-
"jupiter_api_key": "my-jupiter-api-key", # Optional - for pro API with higher rate limits
327+
"jupiter_api_key": "my-jupiter-api-key", # Required - get free key at portal.jup.ag
324328
"payer_private_key": "payer-private-key", # Optional - for gasless transactions
325329
},
326330
},

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "sakit"
3-
version = "13.3.6"
3+
version = "14.0.0"
44
description = "Solana Agent Kit"
55
authors = ["Bevan Hunt <bevan@bevanhunt.com>"]
66
license = "MIT"

sakit/utils/recurring.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@
1616

1717
logger = logging.getLogger(__name__)
1818

19-
# Use lite API for no-key access, main API for keyed access with dynamic rate limits
20-
JUPITER_RECURRING_API_LITE = "https://lite-api.jup.ag/recurring/v1"
21-
JUPITER_RECURRING_API_PRO = "https://api.jup.ag/recurring/v1"
19+
# Jupiter Recurring API base URL (API key required, free tier available at portal.jup.ag)
20+
JUPITER_RECURRING_API = "https://api.jup.ag/recurring/v1"
2221

2322

2423
@dataclass
@@ -59,25 +58,20 @@ class RecurringCancelResponse:
5958
class JupiterRecurring:
6059
"""Jupiter Recurring API client for DCA orders."""
6160

62-
def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None):
61+
def __init__(self, api_key: str, base_url: Optional[str] = None):
6362
"""
6463
Initialize Jupiter Recurring client.
6564
6665
Args:
67-
api_key: Optional Jupiter API key for dynamic rate limits
68-
base_url: Optional custom base URL (auto-selects based on api_key if not provided)
66+
api_key: Jupiter API key (required, get free key at portal.jup.ag)
67+
base_url: Optional custom base URL (defaults to api.jup.ag)
6968
"""
70-
if base_url:
71-
self.base_url = base_url
72-
elif api_key:
73-
self.base_url = JUPITER_RECURRING_API_PRO
74-
else:
75-
self.base_url = JUPITER_RECURRING_API_LITE
76-
69+
self.base_url = base_url or JUPITER_RECURRING_API
7770
self.api_key = api_key
78-
self._headers = {"Content-Type": "application/json"}
79-
if api_key:
80-
self._headers["x-api-key"] = api_key
71+
self._headers = {
72+
"Content-Type": "application/json",
73+
"x-api-key": api_key,
74+
}
8175

8276
async def create_order(
8377
self,

sakit/utils/trigger.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@
1616

1717
logger = logging.getLogger(__name__)
1818

19-
# Use lite API for no-key access, main API for keyed access with dynamic rate limits
20-
JUPITER_TRIGGER_API_LITE = "https://lite-api.jup.ag/trigger/v1"
21-
JUPITER_TRIGGER_API_PRO = "https://api.jup.ag/trigger/v1"
19+
# Jupiter Trigger API base URL (API key required, free tier available at portal.jup.ag)
20+
JUPITER_TRIGGER_API = "https://api.jup.ag/trigger/v1"
2221

2322

2423
@dataclass
@@ -70,25 +69,20 @@ class TriggerCancelMultipleResponse:
7069
class JupiterTrigger:
7170
"""Jupiter Trigger API client for limit orders."""
7271

73-
def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None):
72+
def __init__(self, api_key: str, base_url: Optional[str] = None):
7473
"""
7574
Initialize Jupiter Trigger client.
7675
7776
Args:
78-
api_key: Optional Jupiter API key for dynamic rate limits
79-
base_url: Optional custom base URL (auto-selects based on api_key if not provided)
77+
api_key: Jupiter API key (required, get free key at portal.jup.ag)
78+
base_url: Optional custom base URL (defaults to api.jup.ag)
8079
"""
81-
if base_url:
82-
self.base_url = base_url
83-
elif api_key:
84-
self.base_url = JUPITER_TRIGGER_API_PRO
85-
else:
86-
self.base_url = JUPITER_TRIGGER_API_LITE
87-
80+
self.base_url = base_url or JUPITER_TRIGGER_API
8881
self.api_key = api_key
89-
self._headers = {"Content-Type": "application/json"}
90-
if api_key:
91-
self._headers["x-api-key"] = api_key
82+
self._headers = {
83+
"Content-Type": "application/json",
84+
"x-api-key": api_key,
85+
}
9286

9387
async def create_order(
9488
self,

sakit/utils/ultra.py

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@
1616

1717
logger = logging.getLogger(__name__)
1818

19-
# Use lite API for no-key access, main API for keyed access with dynamic rate limits
20-
JUPITER_ULTRA_API_LITE = "https://lite-api.jup.ag/ultra/v1"
21-
JUPITER_ULTRA_API_PRO = "https://api.jup.ag/ultra/v1"
19+
# Jupiter Ultra API base URL (API key required, free tier available at portal.jup.ag)
20+
JUPITER_ULTRA_API = "https://api.jup.ag/ultra/v1"
2221

2322

2423
@dataclass
@@ -54,26 +53,20 @@ class UltraExecuteResponse:
5453
class JupiterUltra:
5554
"""Jupiter Ultra API client."""
5655

57-
def __init__(self, api_key: Optional[str] = None, base_url: Optional[str] = None):
56+
def __init__(self, api_key: str, base_url: Optional[str] = None):
5857
"""
5958
Initialize Jupiter Ultra client.
6059
6160
Args:
62-
api_key: Optional Jupiter API key for dynamic rate limits (get free key at jup.ag)
63-
base_url: Optional custom base URL (auto-selects based on api_key if not provided)
61+
api_key: Jupiter API key (required, get free key at portal.jup.ag)
62+
base_url: Optional custom base URL (defaults to api.jup.ag)
6463
"""
65-
# Use Pro API with dynamic rate limits if API key provided, otherwise use Lite API
66-
if base_url:
67-
self.base_url = base_url
68-
elif api_key:
69-
self.base_url = JUPITER_ULTRA_API_PRO
70-
else:
71-
self.base_url = JUPITER_ULTRA_API_LITE
72-
64+
self.base_url = base_url or JUPITER_ULTRA_API
7365
self.api_key = api_key
74-
self._headers = {"Content-Type": "application/json"}
75-
if api_key:
76-
self._headers["x-api-key"] = api_key
66+
self._headers = {
67+
"Content-Type": "application/json",
68+
"x-api-key": api_key,
69+
}
7770

7871
async def get_order(
7972
self,

0 commit comments

Comments
 (0)