Skip to content

Gift codes

One of the most popular features. Autopilot keeps a game-scoped registry of Century Game promo codes in db/state/state.db, scrapes new ones from configured sources, and redeems them against every configured account. The dashboard page is your single view of “which codes succeeded for which accounts.”

Gift codes dashboard
  • Scrapes new codes — the API startup poller, scheduler poller, and Scrape now button all hit the configured source for the selected game, dedupe against state.db, and store anything new.
  • Redeems live-game codes across all accountsRedeem now (or the shared 6-hour poll cycle) walks every account configured in db/state/state.db and submits each pending live-game code. The matrix view shows the result per account, per code.
  • Works without ADB for live games — gift-code discovery and live-game redeem use Century/Discord HTTP APIs directly. uv run play can refresh and redeem live codes even before you press Start bot.
  • Tracks the lifecycle — once a code is ALREADY_RECEIVED for an account, it never gets retried for that account. SUCCESS rows turn green and are dropped from the next pass.
  • Per-account columns — each configured player ID gets its own column. Status values:
    • SUCCESS — code redeemed, rewards in inbox
    • ALREADY_RECEIVED — this account already had it (no retry)
    • FAILED — API rejected the attempt or a transient request failed; it will be retried on a later run
    • CDK_EXPIRED / CDK_NOT_FOUND — the code is globally dead and skipped on later runs
    • STOVE_LEVEL_TOO_LOW / VIP_LEVEL_TOO_LOW — this account is not eligible for the code
    • PENDING — queued but not yet attempted
  • API errors surfaced — the API ERR column shows the upstream code (20000, 40005, …) so you can tell “the code is bad” from “this one account is rate-limited.”

The Gift codes page has separate tabs for:

Whiteout Survival

Public WOS code sources plus Century’s WOS redeem API.

Kingshot

Kingshot code aggregator plus Century’s Kingshot redeem API.

WOS Beta

Code discovery from a Discord channel, stored under wos_beta. Apply manually inside the beta game client for the logged-in player.

Kingshot Beta

Code discovery from a Discord channel, stored under kingshot_beta. Apply manually inside the beta game client for the logged-in player.

Beta tabs are discovery/manual-apply only. They still show discovered codes in the same table, but Redeem now and the external-account panel are hidden there because beta code application belongs to the in-game interface and only affects the current beta player.

Beta redeem pages

Private-server web clients

manual check

Use these pages when verifying beta codes by hand. Autopilot stores Discord-discovered beta codes separately under wos_beta and kingshot_beta.

  • Active — codes that haven’t expired and could still pay out for someone.
  • Needs run — active codes that have at least one account in PENDING state.
  • Pending slots — total account × code pairs waiting to be tried (this is what the next run will burn through).
  • Expired — codes the API has confirmed dead, kept around for history but skipped on redeem.

Manual gift code redemption is the single biggest time sink for a Whiteout Survival multi-account player — every time the Century Game team or a content creator drops a new code, you’d otherwise have to switch accounts and re-type it N times. The bot does the whole sweep in one pass and logs which accounts came up empty so you can spot a stuck account quickly.

Redeem for any user ID, not just your own accounts

Beyond the accounts the bot owns, the redeem loop can target any list of player IDs (FIDs) you paste in — alliance members, partner farms, secondary accounts on other servers, friends who don’t run the bot themselves. Same matrix view, same per-code/per-account status, same retries.

Bulk-paste accepts fid or fid label, one per line. Scope is per game — WOS and Kingshot have independent lists.

The External accounts panel on the Gift codes page is where you manage this list. Each external ID gets its own column in the matrix alongside your own accounts. Add or remove rows in the panel at any time — every listed ID is included on the next redeem pass.

Gift codes run through a global HTTP poller, not through emulator scenarios:

  • API startup (uv run play / uv run api) starts one background gift-code cycle.
  • The bot scheduler uses the same 6-hour cadence key, so API startup and bot scheduler do not double-run the same cycle.
  • Scrape now is a direct dashboard action for the selected game; Redeem now is shown only for live games.
  • A shared Redis redeem lock prevents manual, API startup, and scheduler redeems from racing.

For beta games, the same cycle only scrapes Discord and stores new codes. It does not acquire the redeem lock or run a no-op redeemer.

The shared cadence keys look like wos:scheduler:gift_codes_poll:{game}. The redeem locks look like wos:gift_code_redeem:lock[:game].

Open Gift codes, switch to either beta tab, and paste your Discord token into Discord beta source — that’s the only field. The beta channels are built in, no IDs to configure.

How to find your Discord token: see this Reddit thread.

Safe

Autopilot stores this configuration in the encrypted db/state/state.db runtime database. The token is never echoed back to the browser after save; the page only shows whether a token is configured.

The parser looks for common labels such as gift code:, promo code:, code:, and backticked tokens.