The browser refuses the loader or the connection
The console names the directive or the cause. Each refusal has one fix:
Content Security Policy has the full set of directives.
Origin denied
Your game server answers403 Origin denied to any request whose Origin is not in Allowed origins, under Players and sessions in Settings. The match is exact: scheme, host and port.
https://luckystar.exampleandhttps://www.luckystar.exampleare different origins. Add each one your pages use.http://localhost:5173is allowed only in sandbox. A live casino acceptshttpsorigins only.- Saved origins reach your game servers within about a minute.
The game stays on Connecting
The element shows Connecting when it cannot open its connection to your game server. Browsers hide the reason from the page, so look in the Network tab at the request to/v1/stream:
- No request, or an error before it. Your session endpoint failed. The
onErrorcallback ofconnect()receives your endpoint’s error,token_timeoutafter 10 seconds, ortoken_invalidwhen the answer is not a token. Check that the endpoint answers the token as plain text. 401. The game server refused the token. See The game server answers unauthorized.403. The page’s origin is not allowed. See Origin denied.503. The game server has no settings yet. Wait a minute after the first deploy.
The game server answers unauthorized
Every token problem gives the sameunauthorized. Decode the token your endpoint answered and check each claim:
A
409 with request_failed instead means the game server received something that is not a JWT: check that your endpoint answers only the token, with no quotes or JSON around it.
Bets are refused
Bets stay open
When your wallet’s answers fail, the game server keeps each call and sends it again with the same ID and body: after 1, 2, 4, 8 and 16 seconds, then every 30 seconds. The bets stay open, the game shows settlement as delayed, and new bets are refused withsettlement_backpressure once the queue backs up. The Live page counts the codes under Errors in the last 24 hours, each with a sentence; nothing reaches the player as an error.
Fix your wallet’s answer and the queued calls go through on the next attempt. The codes:
wallet_unavailablewith a3xxstatus. Your wallet URL redirects, for example fromhttptohttps, from the bare domain towww, or to add a trailing slash. The game server never follows redirects. Set the wallet URL to the address that answers directly.wallet_unavailablewith401or403. Your signature check refused the call. See Your wallet refuses the signature.wallet_unavailablewith404. The game server appendsdebit,creditandbalanceto your wallet URL. Check that the URL is the prefix of your three endpoints.wallet_timeout. Your wallet took longer than 8 seconds.wallet_receipt. Your receipt does not repeatidandcurrency, orbalanceandrevisionare numbers instead of strings of digits.
Your wallet refuses the signature
Compute the signature exactly as the game server does:- Read the raw request body as bytes, before any JSON parsing. A body parsed and serialized again does not match.
- Join the
X-Kinematic-Timestampheader, a dot and the raw body:1793606400123.{"id":"batch_...",...}. - HMAC-SHA256 it with your
WALLET_SECRET, taken as text, and compare the lowercase hex digest withX-Kinematic-Signaturein constant time. - Allow 60 seconds between the timestamp and your clock. Keep your servers’ clocks synchronized.
The deploy fails on your own hostname
A game server on your own hostname needs its domain to be an active zone in the same Cloudflare account, with no DNS record for that hostname. Choose an address explains why. The form checks the hostname before it deploys and shows its refusal under Hostname:
If Cloudflare refuses the hostname during the deploy, the game server’s card shows one of these sentences, with Read the fix linking here and What Cloudflare said holding Cloudflare’s exact error:
For a game server that never deployed, each sentence adds
, or remove this game server and create one on another hostname before its final full stop. If you cannot move your domain’s DNS to Cloudflare, use the workers.dev address instead.
There is no workers.dev subdomain
An account gets its workers.dev subdomain the first time someone opens Workers & Pages in its Cloudflare dashboard. Without one, the form says:This account has no workers.dev subdomain yet. Open Workers & Pages once in its Cloudflare dashboard to create one, or use your own hostname.
A deploy that fails for the same reason shows on the card:
This Cloudflare account has no workers.dev subdomain yet. Open Workers & Pages once in its Cloudflare dashboard to create one, then deploy again.
Open Workers & Pages once in that Cloudflare account, then select Deploy in the form, or Deploy again on the card. You can also deploy on your own hostname instead.
The game server does not report
Each game server sends the dashboard a report about once a minute. The game server’s card on the Game server page shows its state:- Waiting for its first report, then No report yet when it deployed more than 5 minutes ago and has not reported. The card says
It has not reported since it was deployed <time ago>. Check now asks it why. - Not reporting after 5 minutes without a report. The card says
It sent its last report <time ago>. Check now asks it at once. - Deploying, Deploy failed or Not deployed: the game server does not run yet. See the card’s note.
Your game server <host> sent its last report <time ago>. with Open game server when a game server has not reported for 5 minutes.
Select Check now on the card. Its answer names the cause:
- The game server does not answer. The card shows why, for example
Your game server could not be reached.orYour game server did not answer in time. - It refuses its settings. A line starts with
Settings:, such asSettings: The settings are for the other mode. A mode switch takes effect when you redeploy the game server.Most refusals are fixed by redeploying. See Game server settings. - It cannot reach the dashboard. A line such as
Settings: Your game server could not reach the dashboard.orReports: Your game server could not post its report to the dashboard.These clear on their own once the connection returns.
<host> runs a release from before the live monitor, so its bets show here once you update it. Update it on the Game server page with Update to and the release, or leave automatic updates on.
Bets wait to be recorded on Solana
Sandbox game servers record each bet on Solana devnet shortly after its proof is disclosed. Until then, the Provably fair dialog shows the bet as waiting to be recorded. When bets keep waiting, the Solana record section of the Game server page shows Paused under Recording, with one of these sentences:Its address cannot pay the next transaction's fee. Recording resumes within a minute after the address is funded.Bets wait for a new VRF key to be registered on Solana. It is registered automatically within 10 minutes, or you can register it now.To register it at once, select Plan key registration, then Register key.The Solana RPC failed. Your game server tries again every few seconds.
Sandbox and live mismatches
- You switched to live, and bets still use test balances. Each game server keeps running in its mode until you redeploy it, and refuses the live settings with
control_modeuntil then: Check now showsSettings: The settings are for the other mode. A mode switch takes effect when you redeploy the game server.Settings showsOne game server still runs in sandbox mode. It switches to live mode when you redeploy it.with Open game server, and the game server’s card saysThis game server runs in sandbox mode and your casino is set to live. Redeploy it to switch.Select Redeploy in live mode on each card. Automatic updates never switch modes. - Saving live settings fails on origins. Live accepts
httpsorigins only. Removehttpandlocalhostorigins. - Tokens fail after the switch. Your live currencies differ from your sandbox ones, for example
TESTreplaced byUSD. Sign tokens with a currency your casino serves now. - Check my wallet does not run. It runs only in live mode, with your wallet URL set.
- A player shows an old test balance in live. The player’s ID played in sandbox on the same game server, which keeps the last balance it saw for that ID until your wallet reports a newer revision. Use test player IDs that no real player has, such as
test-followed by a number.