Verified Calls docs
v1.0.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.