Developer API
Reflex Monster exposes one public endpoint: change your token's reflection target programmatically. Secured entirely by your wallet signature — no API keys, no accounts.
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.
