Verified Calls docs
v1.1.0
Live demo Get help
● Ship · When something is off

Troubleshooting
symptom, cause, fix.

Start with Console → Monitor → Status: it names the failing part. Then find the symptom below. The log (journalctl -u verified-calls) has the exact message.

01Install and start

SymptomCause and fix
pnpm install fails building better-sqlite3No prebuilt binary for your platform. Install build tools (apt install -y build-essential python3) and run it again. Use Node 22.
The app exits at start with a configuration errorA value in .env is out of range. The message names it, for example SCORING_RUG_THRESHOLD: must be lower than SCORING_HIT_THRESHOLD.
/admin answers 503ADMIN_SECRET_KEY is empty or not 64 hex characters. Run openssl rand -hex 32, put it in .env, restart.
No setup code in the logAn owner already exists. Sign in; or ask another owner to invite you under Team.
Port already in useAnother process uses 8787. Change PORT and your proxy target.

02Bot and recording

SymptomCause and fix
Status: "Telegram rejected the bot token (401)"The token is wrong or was revoked in @BotFather. Paste the current token under Integrations.
Messages in the group are not recordedPrivacy mode is on (the Test button says so): /setprivacy → Disable, then remove and re-add the bot, or make it admin. Or the chat is still waiting under Monitor → Chats: press Approve. Status → "A chat is recording" names the chats waiting.
Channel posts are not recordedThe bot must be an admin of the channel.
A chat I don't know appears under Monitor → ChatsSomeone added your bot. Leave it unapproved; nothing is recorded. Turn off /setjoingroups in @BotFather.
Status: getUpdates conflict or failuresTwo processes use the same token (for example a local copy and the server). Stop one.
Status: "Seal made but not posted: the bot is not running"Seals are still made; they are posted once the bot runs. Check the token.
A seal chat gets no seal postsThe bot is not a member there, or in a channel it is not an admin allowed to post. The chat id must be the numeric id, e.g. -1001234567890.

03Prices and results

SymptomCause and fix
A call shows "—" and "unpriceable"No pool was found, the price sources disagreed, or no trade happened within 5 minutes after the entry time. The call stays on the record and is not counted in the median.
24 h or 7 d result emptyThe window has not closed yet. It is never guessed.
Results appear minutes lateGeckoTerminal's free limit. The app asks for at most GECKOTERMINAL_RPM (25) per minute and backs off when told to. Busy groups see results a few minutes after a window closes.
Status: "Price data" degraded, rate limitedLower the GeckoTerminal requests per minute under Data sources.
Exit liquidity always "not checked"No Helius key and no own-RPC setting, or the caller has not linked a wallet. "Use my own RPC" refuses the public mainnet endpoint.

04Proof and payments

SymptomCause and fix
"Sign with wallet" is disabledSet the operator wallet under Console → Proof.
Signing fails or is not storedThe wallet that signed is not the operator wallet, the transaction failed, or the RPC could not find it yet. Try again; set your own RPC under Integrations for reliability.
A VIP or listing payment stays "awaiting payment"The transaction is not finalized yet, paid a different amount or asset, or went to another wallet. A payment that arrives late is still found by the background check for 24 hours. Check Money → VIP members → Payments.
A buyer sees "You opened several payment requests in the last half hour"At most 5 payment requests per visitor in 30 minutes (VIP checkouts and paid listings). They finish an open request or wait. Behind a proxy, switch on the proxy setting under Product → API keys, or every visitor looks the same to the app.
Members don't get an inviteThe bot lacks "Invite users" or "Ban users" in the VIP chat. Status → "VIP membership works" says which.
The sponsored slot does not showA field contains a token address, a token page or a promise word. Status → "Sponsored slot passes the rules" names it.
A share-card image answers 503 "Busy rendering cards"At most 40 new card images are rendered per 10 seconds across the site; above that the image answers 503 with Retry-After. Cached cards still load. Try again a few seconds later.
verify-export.mjs reports a mismatchThe database file was changed outside the app or restored from an old backup. The script reports what does not match.

05Console

SymptomCause and fix
A field in Integrations is lockedThe same secret is set in .env. Remove it there and restart to manage it in the console.
I saved a setting but nothing changedPublic address, log level and method apply after a restart. Maintenance, announcement, blocked countries, tagline, support email, website, terms and privacy URLs are not used by the public site in this version.
Saved secrets are unreadable after a moveADMIN_SECRET_KEY differs from the one they were saved with. Restore the old key, or paste the secrets again.
Console Status page with three failing checks (Telegram bot not connected, price data not reachable, Solana RPC) each with a Fix link, and warnings below
Status names the failing check and links to the page that fixes it. Blockers stop a launch; warnings are worth a look.