justi.fun
§10 · API

Rate limits and API keys

Limits per class and tier, self-serve keys by wallet signature, partner keys.

API keys

Keys are optional for everything except webhooks. A key raises your limits and attributes the swaps and launches you build to you. Send it as Authorization: Bearer jf_live_... or X-API-Key. An invalid or revoked key is a 401; it never quietly falls back to anonymous.

Get a free key

Sign this exact message with any Solana wallet (ed25519, for example Phantom's signMessage), then send the base58 signature within 5 minutes. One active free key per wallet. The key is shown once.

justi.fun api key
wallet: <wallet>
label: <label>
time: <unix seconds>

Partner keys

Building something with real volume (a terminal, a wallet, a bot with many users)? Ask for a partner key on X at @justifun. Partner keys have the limits below and per-key usage reports.

Rate limits

A token bucket per identity (key, else IP) per rate class: burst, then a steady refill. Every response carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (seconds until full) and RateLimit-Policy; a 429 adds Retry-After. Each endpoint shows its class.

Classanon (per IP)free keypartner key
read120 burst, 300/min200, 600/min600, 3000/min
quote40, 120/min100, 300/min300, 1200/min
build (POST /v1/swap)10, 30/min20, 60/min120, 600/min
submit10, 30/min20, 60/min120, 600/min
launch (POST /v1/launches)3, 6 per 10 min5, 2/min20, 12/min
manage (webhooks, revoke)not allowed20, 30/min60, 120/min
keys (self-serve create)3, 5/hour
asset (meta, image, banner)600, 3000/min1000, 6000/min3000, 20000/min
stream (new SSE/WS connections)10, 20/min20, 60/min100, 300/min
Body limits
8 KB swap, 16 KB submits, 3 MB launches, 8 KB webhooks, 4 KB keys. GETs take no body.

Reference

#Self-serve: a wallet signs a message and gets a free-tier key

POST/v1/keys
No keyRate class keysBody 4kbcreateFreeKey

Sign the UTF-8 message "justi.fun api key\nwallet: <wallet>\nlabel: <label>\ntime: <ts>" with the wallet (ed25519, e.g. signMessage), send the base58 signature. ts within 5 minutes. One active free key per wallet. The key is shown once.

Body

FieldTypeAbout
walletrequiredaddress
labelrequiredstringmax 40 chars
tsrequiredintegerUnix seconds used in the message.
signaturerequiredstringBase58 ed25519 signature of the message. max 100 chars
Response KeyCreated
FieldTypeAbout
keyrequiredstringjf_live_... Store it now; only its hash is kept.
recordrequiredApiKey
idrequiredstringUUID.
prefixrequiredstring
labelrequiredstring
ownerWalletrequiredaddress | null
tierrequired"free" | "partner" | "internal"
limitsrequiredobject | null
createdAtrequiredintegerUnix time in seconds.
lastUsedAtrequiredinteger | nullUnix time in seconds.
revokedAtrequiredinteger | nullUnix time in seconds.
messagerequiredstring
Errors400 bad_request, signature_invalid, invalid_params, invalid_json409 conflict413 payload_too_large429 rate_limited500 internal
curl -X POST "https://api.justi.fun/v1/keys" \
  -H "Content-Type: application/json" \
  -d '{"wallet":"<wallet>","label":"my-bot","ts":1793110000,"signature":"<signature>"}'

#The calling key, its tier and limits

GET/v1/keys/me
Key requiredRate class readgetMyKey
Response object
FieldTypeAbout
keyrequiredApiKey
idrequiredstringUUID.
prefixrequiredstring
labelrequiredstring
ownerWalletrequiredaddress | null
tierrequired"free" | "partner" | "internal"
limitsrequiredobject | null
createdAtrequiredintegerUnix time in seconds.
lastUsedAtrequiredinteger | nullUnix time in seconds.
revokedAtrequiredinteger | nullUnix time in seconds.
limitsrequiredobject
maxStreamConnectionsrequiredinteger
Errors400 invalid_params401 unauthorized429 rate_limited500 internal
curl "https://api.justi.fun/v1/keys/me" \
  -H "Authorization: Bearer $JUSTI_API_KEY"

#Revoke the calling key (its webhooks stop)

DELETE/v1/keys/me
Key requiredRate class managerevokeMyKey
Response object
FieldTypeAbout
revokedrequiredboolean
Errors400 invalid_params401 unauthorized429 rate_limited500 internal
curl -X DELETE "https://api.justi.fun/v1/keys/me" \
  -H "Authorization: Bearer $JUSTI_API_KEY"