reflex.monsterreflex.monster

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. 1. Fetch the exact message to sign for your mint + new reflection token.
  2. 2. Sign that message with your deploy wallet (ed25519).
  3. 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.