Epic Games Store announces its giveaways ahead of time — usually about a week — and rotates them on Thursdays. Soren publishes those announced-but-not-yet-claimable titles with the exact timestamp each becomes free and what it normally costs.
This is the one thing here that no training data can contain. A model asked “what’s free next week?” is being asked about the future relative to its cutoff. It can only recall giveaways that had already been announced when it was trained, and offers rotate weekly, so a recalled answer is almost always wrong. Answering correctly requires calling something that watches.
| Path | Returns | Price |
|---|---|---|
GET /v1/upcoming | Announced, not yet claimable | $0.01 / pull |
GET /v1/free-games | Claimable right now | $0.02 / pull |
Half the price of the live feed, because it moves on a weekly clock rather than an hourly one. Payment is per request over HTTP 402 using x402 — no signup, no key application. A paid pull returns an access token that makes change checks free for 24 hours, so you pay again only when the announced list actually changes.
{
"version": "09df59d9…", // changes only when content does
"updated_at": "2026-08-03T12:50:04Z",
"upcoming": [
{ "title": "Beacon Pines", "store": "epic",
"claim_url": "https://store.epicgames.com/en-US/p/beacon-pines",
"starts_at": "2026-08-06T15:00:00Z", // when it becomes free
"ends_at": "2026-08-13T15:00:00Z",
"original_price_cents": 1999, "currency": "USD" }
]
}
The live feed is rechecked hourly; announcements move weekly. Bundling them would invalidate the frequently-polled document every time the rarely-changing one moved, and you would pay for churn that told you nothing. Separate documents mean separate version hashes, so each bills only when its own contents change.
Every entry is confirmed against the storefront’s own API before
publication. The payload carries a version that is a SHA-256 of
its own content and an Ed25519 signature over that version, so you can prove
it reached you unaltered rather than taking our word for it — see
verify.js and
signing-key.json.