Developer API
Reflex Monster exposes a public read endpoint (list every token and what it reflects) plus a wallet-signed endpoint to change your token's reflection target. No API keys, no accounts.
Read: reflections
A public, read-only endpoint listing every launched token and the reward token it reflects, plus whether that reward can be changed right now and how much has accrued toward the next reflection. The changeable flag is false while the current reward is still waiting to complete its first reflection cycle; accruedSol is the fees waiting to reflect and it fires around triggerAtSol (0.5 SOL). No key, no signature; cached and rate-limited.
GET /api/reflections
curl "https://reflex.monster/api/reflections"
# -> {
# "ok": true,
# "count": 65,
# "updatedAt": "2026-09-22T16:55:00.000Z",
# "reflections": [
# {
# "token": { "mint": "...", "ticker": "KOLCAT", "name": "KOL Cat", "launchpad": "launchlab" },
# "reflects": { "mint": "...", "symbol": "CATE" },
# "changeable": false,
# "changeableReason": "locked until the current reward completes a reflection cycle",
# "accruedSol": 0.53,
# "triggerAtSol": 0.5
# }
# ]
# }Read: market data
Live price, market cap, 24h volume, liquidity and the DEX pair address for any launched token. Fetched server-side and cached, so it stays fast and accurate. No key, no signature.
GET /api/marketdata/{mint}
Manage: change the reflection (wallet-signed)
How it's secured
The only credential is a signature from the wallet that launched your token. You sign a specific message locally with your private key — the key never leaves your machine — and we verify that ed25519 signature against the token's on-chain deploy address. Only that exact wallet can change its token's reflection; every other request is rejected. There is no transaction and no fee — just a signature that proves ownership.
- • Signature verified server-side against the deploy wallet on every call
- • Wrong wallet → 403, invalid signature → 401
- • The new reflection token is validated (must be a real, tradable token) before it's accepted
The flow
- 1. Fetch the exact message to sign for your mint + new reflection token.
- 2. Sign that message with your deploy wallet (ed25519).
- 3. Submit the signature — done.
Endpoints
GET /api/v1/reflection/message?mint=&newReflectedMint=
POST /api/v1/reflection/change { mint, newReflectedMint, signature, pubkey }
Get the message
# 1. Get the exact message to sign
curl "https://reflex.monster/api/v1/reflection/message?mint=YOUR_TOKEN_MINT&newReflectedMint=NEW_REFLECTION_MINT"
# → { "ok": true, "message": "Reflex Monster: set reflected token of ... to ..." }Full example (Node / JS)
import { Keypair } from "@solana/web3.js";
import nacl from "tweetnacl";
import bs58 from "bs58";
// The wallet that LAUNCHED your token (its key never leaves your machine)
const wallet = Keypair.fromSecretKey(bs58.decode(YOUR_DEPLOY_WALLET_SECRET));
const mint = "YOUR_TOKEN_MINT";
const newReflectedMint = "NEW_REFLECTION_MINT";
// 1. Get the exact message to sign
const { message } = await fetch(
`https://reflex.monster/api/v1/reflection/message?mint=${mint}&newReflectedMint=${newReflectedMint}`
).then((r) => r.json());
// 2. Sign it with your deploy wallet (ed25519)
const signature = bs58.encode(
nacl.sign.detached(new TextEncoder().encode(message), wallet.secretKey)
);
// 3. Submit the signed change
const res = await fetch("https://reflex.monster/api/v1/reflection/change", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
mint,
newReflectedMint,
signature,
pubkey: wallet.publicKey.toBase58(),
}),
}).then((r) => r.json());
// → { ok: true, reflectedMint: "NEW_REFLECTION_MINT" }Any Solana wallet that can sign a message works — you don't need to expose the key to a browser; sign server-side or in your own tooling. The change takes effect from the next reflection cycle.
