Docs
Integrate the Gully Offerwall
Sign in to the dashboard with Gully ID (open to everyone), create a placement or a campaign, then wire it up here.
Embed on a site or web game
Paste the snippet from your placement. It adds an iframe served from offers.gullychain.xyz that only your listed origins may frame.
<div id="gully-offerwall"></div>
<script src="https://offers.gullychain.xyz/widget/offerwall.js"
data-placement="pk_…" data-target="#gully-offerwall" async></script>
Options: data-mode="modal" with GullyOfferwall.open() from a button, and data-theme='{"cyan":"#ff7a00","night":"#000"}' to override the GullyChain kit colors (night, ink, cyan, blue, green, white, muted, font).
Web and PC placements pay glUSD to the player's Gully account. iOS and Android placements never show crypto actions or crypto rewards: players earn your points instead.
Report game events from your server
Advertisers whose offer is a game milestone send a signed postback from the game server (or Nakama) when the player reaches it. The client never reports progress.
POST https://offers.gullychain.xyz/v1/postback
X-Gully-Key: pbk_… (campaign postback key)
X-Gully-Timestamp: 1793000000 (unix seconds, ±300 s)
X-Gully-Nonce: 16-64 chars [A-Za-z0-9_-], never reused
X-Gully-Signature: hex HMAC-SHA256(secret, timestamp + "." + nonce + "." + rawBody)
{ "clickId": "clk_…", "event": "level_reached", "value": 5 }
clickId arrives on your launch URL as ?gully_click=; games that use Gully ID can send userId (the Gully ID sub) instead. Replays return 409, wrong signatures 401, business rejections 200 with { ok: false, reason }.
Unity (Gully Game SDK)
var wall = new GullyOfferwallClient("pk_…");
var feed = await wall.GetOffersAsync(gullyIdAccessToken);
var start = await wall.StartAsync(feed.offers[0].id, gullyIdAccessToken);
// in-game progress is reported by your game server's postback, never by the client
wall.OpenWidget(); // or render feed.offers in your own UI
The module ships in the Gully Game SDK (Runtime/Offerwall) with a sample and a Nakama postback hook.
Grant points with reward callbacks
For points rewards (mobile placements, or players without a Gully account) we POST to your placement's callback URL, signed the same way with your placement secret sk_…:
{ "completionId": "cmp_…", "userId": "…", "points": 100, "currency": "gems", "campaignId": "camp_…" }
Grant once per completionId and answer 2xx. We retry with backoff for up to 8 attempts. You also receive the reward value and your share in glUSD on Gully Chain.