Call GET /games on CDK Bot and every product comes back with a marketplace_offers array: the current G2A, Eneba and Kinguin price, in USD, sitting inside its own API response. An agent gets the whole market in one call and never has to scrape three keyshops. We scanned the entire catalog to see how that comparison actually lands. Against the typical market price, meaning the median of G2A, Eneba and Kinguin, CDK Bot is cheaper on about four titles in five. Against G2A alone it wins nine in ten. On the strictest test, being the single lowest price anywhere on the grey market, it wins 57% of the time, so it is not always cheapest. We'd rather give you the numbers to check than ask you to believe us.
Below we explain why a merchant would do something that looks this backwards, then show a live snapshot of CDK Bot's checkout price next to the cheapest live rival. Readers of why agents won't buy pizza first will recognize the thesis. Here it's applied to one specific surface, the price check an agent runs before it spends.
Why an agent-native merchant surfaces its rivals' prices
Human shops hide competitor prices for a simple reason. A shopper who spots something cheaper next door might leave. An agent doesn't get nudged like that. It's a procurement function with a budget, and a price check is built into its loop. Whether or not you show G2A, Eneba and Kinguin, it will check them. So the incentive runs the other way from a human storefront.
That leaves two choices. One is to make the agent leave your API, scrape three keyshops, normalize the currencies and come back. That adds latency and failure modes, and if its own scrape turns out good enough, it has no reason to return. The other is to put the comparison in the response the agent already holds. A research job across several sites becomes reading one field, and your API becomes the place the agent runs its comparison from. The first approach treats the agent like a human you're trying to keep in the store. The second accepts what it is: a caller that cares more about the round trip you saved than about the rival price you could have hidden.
This only pays off if the data is honest. Suppose an agent finds your marketplace_offers accurate on a title where you weren't the cheapest and said so. On the next title, where you might be, it will trust the field. A storefront that fudges the comparison gets caught by the first agent that double-checks, and after that the field is worthless. With something that can verify on the other end, honesty is less a virtue than a requirement for the feature to work at all.
How CDK Bot actually compares: a live snapshot
We pulled this snapshot from the live catalog, picking titles from across the whole range rather than its alphabetical front. In the CDK Bot (USD) column you see the exact USDC amount an agent pays at checkout. It's not an estimate, and we explain how we verified that further down. The G2A, Eneba and Kinguin columns are live competitor prices taken from each product's marketplace_offers array. Typical is their median, which is the same "vs the typical market price" yardstick behind the catalog-wide ~80% figure below.
| Title | CDK Bot (USD) | G2A | Eneba | Kinguin | Typical (median) | CDK Bot vs typical |
|---|---|---|---|---|---|---|
| Sniper Ghost Warrior 2 | $1.47 | $2.94 | $1.60 | $1.88 | $1.88 | +22% (cheaper) |
| Star Wars Jedi Knight II: Jedi Outcast | $5.89 | $9.44 | $6.64 | — | $8.04 | +27% (cheaper) |
| Dead Cells | $8.50 | — | $8.74 | $9.02 | $8.88 | +4% (cheaper) |
| Borderlands | $15.00 | — | $16.79 | $15.14 | $15.97 | +6% (cheaper) |
| Mass Effect Andromeda | $19.86 | $26.87 | — | $28.49 | $27.68 | +28% (cheaper) |
| Titanfall | $31.46 | $39.77 | — | — | $39.77 | +21% (cheaper) |
| Marvel's Spider-Man 2 | $45.61 | $61.61 | $47.87 | — | $54.74 | +17% (cheaper) |
| Tiny Tina's Wonderlands | $49.47 | $43.20 | $43.82 | — | $43.51 | −14% (pricier) |
Live snapshot with titles drawn from across the full catalog. Typical is the median of the listed rivals, i.e. what the market typically charges. In "CDK Bot vs typical", + means CDK Bot is cheaper and − means it's pricier. A dash (—) means that marketplace had no live offer when we captured the data. Prices refresh roughly hourly, so pulling them again will give different numbers.
Seven of these eight titles come in under the typical market price, most of them by double digits. The exception is Tiny Tina's Wonderlands, where CDK Bot is about 14% above. The full catalog looks much the same. CDK Bot is cheaper than the typical price on about four titles in five, and when it wins, the margin tends to be healthy rather than a rounding error.
Coverage: the whole catalog, not a sample
We didn't pick a flattering slice. The scan covered the entire catalog, all 42,512 products and every page. Of those, 27,011 carried live competitor offers on G2A, Eneba or Kinguin. So the figures below describe the catalog itself.
Across those 27,011 titles, the answer depends on what you compare CDK Bot's checkout price against:
- Against the typical market price (the median of the three rivals), cheaper on ~80%. If the question is whether we're cheaper than the market, this is the fairest measure, and it comes out at roughly four titles in five.
- Against G2A, cheaper on 90%. Against Eneba, 69%. Against Kinguin, 64%.
- Against the average rival price, cheaper on 84%.
- Against the single cheapest offer anywhere across all three, which is the strictest bar, 57%. That means beating the lowest price from every reseller on three marketplaces at the same time.
Read plainly: CDK Bot beats the price the market typically charges about four times in five, and undercuts G2A nine times in ten. The 57% is the harsh version. That single cheapest offer is often one discounter clearing stock, and CDK Bot still beats it more than half the time. The gap gets wider as prices rise. On titles over $40, it beats the typical price ~85% of the time.
We could claim to be "always the absolute cheapest", but an agent would catch that on its first comparison. What we can stand behind, and what you can verify, is cheaper than the market's typical price four times in five, shown to you in the same call.
The price you see is the price you pay
The CDK Bot column isn't an advertised figure that creeps up before checkout. It's the locked payment amount, and we checked that live twice. For any product, three values match: the price_usdc field, the x-payment-amount header on the HTTP 402 response, and payment.amount in the 402 body. #KILLALLZOMBIES shows 8.04 in all three places, and >observer_ shows 1.20. When an agent posts a purchase, the 402 it receives locks that price for 300 seconds through a quote_id. Even if wholesale prices move during those few seconds, the agent pays what it compared.
For a comparison feature this is important. On a keyshop listing, the headline price often isn't what you pay at checkout. Currency conversion, regional surcharges and per-key "service fees" get added at the last step, which is right where a human stops checking and where an agent has already committed. CDK Bot quotes the all-in USDC amount up front and locks it, so the agent never ends up weighing your locked price against a rival's pre-fee teaser.
How the comparison data fits into a purchase
There's no separate comparison API. The data sits in the same flow an agent already uses to buy. It finds a product, reads the price and the marketplace_offers from one response, makes a decision, and then buys or moves on:
- Find + compare.
GET /gamesor/games/matchreturns the product along with its CDK Bot price and the live G2A / Eneba / Kinguin offers. A single call gives the full market context. - Buy in one shot (fast path). Send
POST /purchasewith anX-PAYMENTheader carrying a base64-encoded EIP-3009transferWithAuthorization, signed for theaccepts[]the 402 advertises. A facilitator settles it on-chain gaslessly and returns the key in the same response. You need notx_hashand noquote_id, and it's one round trip. - Or, two-step (fallback): quote + lock.
POST /purchasewith thegame_idgets back HTTP 402 containing the payment amount, the USDC-on-Base details, theaccepts[]and aquote_idthat holds the price for 5 minutes. - Or, two-step (fallback): pay + receive. Send the USDC yourself and call
POST /purchaseagain with thetx_hashandquote_id. CDK Bot parses the ERC-20 Transfer log on Base (chain id8453, USDC contract0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913) and releases the key after it confirms.
Settlement happens in USDC on Base and is verified entirely onchain. Before releasing a key, CDK Bot checks the transfer's amount, recipient and sender, and it doesn't rely on anything the agent claims. In the two-step flow, the quote_id also acts as a purchase-session token that must accompany the tx_hash. That blocks front-running, since an attacker can read the tx_hash onchain but has no way to see the quote. A unique constraint on tx_hash stops one transaction from ever claiming two keys, and the sending wallet is bound to the order for key retrieval and refunds. You don't need auth or registration to browse, and that includes the price comparison.
Prefer a tool interface to raw HTTP? The same catalog and comparison data are available through an MCP server at https://mcp.cdk.bot/mcp with 8 tools: search_games, get_game_details, browse_filters, get_price_quote, confirm_purchase, check_order, request_refund, and submit_review. For a complete build in about 200 lines, see building a game-buying agent.
The transparency principle
Our bet is that in a market of agents, the repeat caller goes to whichever merchant shows the most truth that can be verified. Something that reasons doesn't reward the loudest pitch. It rewards the source whose claims keep holding up when checked. That's what ties together everything in this post: showing rivals' prices, quoting the all-in number, locking it onchain, and admitting where we aren't cheapest. Each one leaves the agent less to verify somewhere else, so its next purchase starts from your API instead of from a search.
You can browse the catalog and read live marketplace_offers data for any product at api.cdk.bot/docs. For programmatic discovery, other agents can use /.well-known/agent.json. If you're comparing a category we don't cover yet, or you want the raw comparison data for your own routing, email info@cdk.bot.
