CDK Bot ships its competitors' prices inside its own API response. Every product returned by GET /games carries a marketplace_offers array with the current G2A, Eneba and Kinguin price in USD, so an agent can compare the whole market in a single call instead of scraping three keyshops. The honest headline, from scanning the entire catalog: it undercuts the typical market price (the median of G2A, Eneba and Kinguin) on about four titles in five, and beats G2A specifically on nine in ten. It is not always the single lowest price on the whole grey market — it wins that strictest bar 57% of the time — and we'd rather hand you the numbers to check that than ask you to take our word for it.
This post explains the reasoning behind that seemingly-backwards design choice, then shows a live snapshot of how CDK Bot's checkout price compares to the cheapest live rival. If you've read why agents won't buy pizza first, this is the same thesis applied to one concrete surface: the price comparison an agent runs before it spends.
Why an agent-native merchant surfaces its rivals' prices
The incentive is the exact opposite of a human storefront, and that's the whole point. A human shop hides competitor prices because a person who sees a cheaper option next door might walk out the door. An agent is not a person who can be nudged — it is a procurement function with a budget and a price-check step baked into its loop. It will check G2A, Eneba and Kinguin whether you show them or not.
So you have two options. You can make the agent leave your API, scrape three keyshops, normalize the currencies, and come back — adding latency, failure modes, and a reason to never return if its own scrape is good enough. Or you can put the comparison in the response it already has, turn a multi-site research task into one field read, and become the place the agent runs its comparison from. The first option treats the agent like a human you're trying to retain. The second treats it like what it is: a caller that values the round trip you saved more than the rival price you hid.
There's a second-order effect that only works if you're honest. An agent that finds your marketplace_offers data accurate — that you weren't cheapest on a title and you said so — will trust the field on the next title, where you might be. A storefront that fudges the comparison gets caught by the first agent that double-checks, and then the field is worthless. Transparency isn't a virtue here; it's the only version of this feature that survives contact with a reasoner that can verify.
How CDK Bot actually compares — a live snapshot
Here is a snapshot pulled from the live catalog, with titles spread across the whole catalog rather than its alphabetical front. The CDK Bot (USD) column is the exact USDC amount an agent pays at checkout — not an estimate (more on how that's verified below). G2A, Eneba and Kinguin are the live competitor prices from each product's marketplace_offers array; Typical is the median of those — the same "vs the typical market price" yardstick as 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, titles spread across the full catalog. Typical is the median of the listed rivals — the price the market typically charges. "CDK Bot vs typical": + means it is cheaper than that, − means pricier. A dash (—) means that marketplace had no live offer at capture time. Prices refresh roughly hourly, so a re-pull will differ.
Across these eight, CDK Bot undercuts the typical market price on seven — usually by double digits — with one (Tiny Tina's Wonderlands) where it sits about 14% above. That mirrors the whole catalog: cheaper than the typical price about four titles in five, and when it wins it tends to win by a healthy margin, not a rounding error.
Coverage: the whole catalog, not a sample
These numbers aren't a flattering slice. We scanned the entire catalog — all 42,512 products, every page — and 27,011 carried live competitor offers across G2A, Eneba or Kinguin. This is the catalog, not a sample.
How CDK Bot's checkout price stacks up across those 27,011 titles depends on which yardstick you hold it to:
- vs the typical market price — the median of the three rivals: cheaper on ~80%. The fairest read of "are we cheaper than the market," and the answer is about four titles in five.
- vs G2A: cheaper on 90%. vs Eneba: 69%. vs Kinguin: 64%.
- vs the average rival price: cheaper on 84%.
- vs the single cheapest offer anywhere across all three — the strictest bar: 57%. Beating the lowest of every reseller on three marketplaces at once.
The honest read: against the price the market typically charges, CDK Bot is cheaper about four times in five, and it undercuts G2A nine times in ten. The 57% is the brutal version — that single cheapest offer is often a lone discounter's clearance, and even so it beats that more than half the time. The gap widens with price: on titles over $40, it beats the typical price ~85% of the time. "Always the absolute cheapest" would be a lie an agent catches on the first comparison — but "cheaper than the market's typical price four times in five, shown to you in the same call" is the real, verifiable claim.
The price you see is the price you pay
The CDK Bot column above isn't an advertised number that drifts before checkout — it's the locked payment amount. We verified this live twice. The price_usdc field for a product, the x-payment-amount header on its HTTP 402 response, and the payment.amount in the 402 body are the same value: #KILLALLZOMBIES reads 8.04 in all three, >observer_ reads 1.20. When an agent posts a purchase, the 402 it gets back locks that price for 300 seconds via a quote_id, so the comparison it ran is the price it pays, even if wholesale moves during those few seconds.
That matters for a comparison feature specifically. A keyshop listing's headline price often isn't the checkout price — currency conversion, regional surcharges, and per-key "service fees" get added at the last step, which is exactly where a human stops checking and an agent has already committed. CDK Bot quotes the all-in USDC number up front and binds it, so the agent isn't comparing your locked price against a rival's pre-fee teaser.
How the comparison data fits into a purchase
The comparison lives in the same flow an agent already uses to buy — it's not a separate API. The agent finds a product, reads its price and its marketplace_offers in one response, decides, and either buys or moves on:
- Find + compare.
GET /gamesor/games/matchreturns the product with its CDK Bot price and the live G2A / Eneba / Kinguin offers attached. One call, full market context. - Buy in one shot (fast path).
POST /purchasewith anX-PAYMENTheader — a base64-encoded EIP-3009transferWithAuthorizationsigned for theaccepts[]the 402 advertises. A facilitator settles it on-chain gaslessly and the key comes back in the same response — notx_hash, noquote_id, one round trip. - Or, two-step (fallback): quote + lock.
POST /purchasewith thegame_idreturns HTTP 402 with the payment amount, the USDC-on-Base details, theaccepts[], and aquote_idthat locks the price for 5 minutes. - Or, two-step (fallback): pay + receive. Send the USDC yourself, then
POST /purchaseagain with thetx_hashandquote_id. CDK Bot parses the ERC-20 Transfer log on Base (chain id8453, USDC contract0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913) and releases the key once it confirms.
Settlement is USDC on Base, verified fully onchain — CDK Bot checks the transfer's amount, recipient and sender before releasing the key, with no trust in the agent's say-so. In the two-step flow the quote_id doubles as a purchase-session token required alongside tx_hash, which blocks front-running: an attacker can read the tx_hash onchain but not the quote. A unique constraint on tx_hash means one transaction can never claim two keys, and the sending wallet is bound to the order for key retrieval and refunds. Browsing — including the price comparison — needs no auth and no registration.
If you'd rather call this over a tool interface than raw HTTP, the same catalog and comparison data are exposed via 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. The full build, end to end in about 200 lines, is walked through in building a game-buying agent.
The transparency principle
The bet underneath all of this: in an agent market, the merchant that shows the most verifiable truth wins the repeat caller. A reasoner doesn't reward the loudest pitch — it rewards the source whose claims keep checking out. Surfacing rivals' prices, quoting the all-in number, locking it onchain, and admitting when we're not cheapest are all the same move: give the agent less to verify elsewhere, and the next purchase starts from your API instead of a search.
Browse the catalog and read the live marketplace_offers data on any product at api.cdk.bot/docs. Other agents can discover us programmatically at /.well-known/agent.json. Comparing against a category we don't cover yet, or want the raw comparison data for your own routing? info@cdk.bot.
