@gravity-ai/api / @gravity-ai/react) and the Gravity pixel (gr-pix.js). Entries are publisher-facing — they describe behavior and integration changes, not internal refactors. Latest first.
Upgrading is always a drop-in replacement —
npm install @gravity-ai/api@latest and redeploy. We don’t ship breaking changes to the SDK surface on minor/patch bumps.Capture leads inline. Advertisers can now run lead-form ad units — the user fills in a short form (email, phone, a question or two) right in your chat UI instead of clicking through. Display modes (Related docs: Lead-form ads · Show ads
GravityAd renders it automatically whenever the served ad carries a leadForm envelope; the engine stores the lead and fires a conversion so attribution and CPA billing just work.Two things to add to your render call so lead forms work: sessionId (must match the ad request) and apiKey. The same GravityAd keeps rendering normal click-through ads when there’s no form, so this is a one-time, backwards-compatible change.inline, modal-center, modal-bottom-right), identity pre-fill, and full styling hooks are covered in the new Lead-form ads guide. The lower-level GravityLeadFormAd component is also exported for direct use.Pixel and SDK now auto-wire end to end. If both are loaded on the page, the SDK pulls four values off
Caller-supplied values always win, so existing code that explicitly passes Related docs: Pixel · Request ads · Experiments
window.gravityPixel automatically on every gravityContext() call — no glue code.| Pixel method | Flows into | Why you care |
|---|---|---|
getVisitorId() | user.gruid | Stable first-party visitor ID — used for attribution and higher-value auctions |
getSessionId() | Top-level sessionId | You can drop your own sessionId parameter; the pixel’s 30-min rolling session ID is used unless you pass one explicitly |
getClickId() | user.grclid | Inbound Gravity click ID when a user arrives from a Gravity ad — surfaces in engine_events.request_context.user.grclid for attribution reporting |
getGraid() | user.graid | Inbound ad identifier, same attribution path |
sessionId keeps working unchanged.What to do: upgrade to 1.1.7, confirm the pixel is installed (install guide), optionally drop your own sessionId plumbing. If you’re not running experiments yet, this is a good checkpoint to start — see Experiments.PII auto-hashing for attribution. The SDK now hashes emails/phone numbers client-side (SHA-256, normalized) before they reach the wire, and the pixel’s
gruid is surfaced safely through the SDK so dashboards can attribute conversions without publishers having to think about privacy plumbing.No integration changes required — this shipped as internal hardening. Advertiser-side match rates go up, you don’t have to do anything.Ad composition experimentation framework. The SDK and engine now support A/B testing different ad compositions (which props the server sends, which layout the client renders) on a per-request basis, controlled from the Gravity dashboard.If you want to run UI variants without shipping code — try different CTA copy, card vs. pill layouts, inline vs. below-response placements — this is the unlock. Start at Experiments.
Bucket of bug fixes and polish:
- Fixed hardcoded
status: 200ingravityAdssuccess path - Fixed
setAdhover cleanup and prop-spread order ingravityContext - Fixed Windows URL injection and a timeout
0falsy-check bug - Swallowed
execFileerrors inopenUrlto avoid crashing host apps - Deprecated the legacy
Client+AdParamsAPI in favor ofGravity+gravityContext
1.1.0+ you’ve got these already. If you’re still on 1.0.x, upgrade when convenient — none of these are security-critical but the DX is materially better.Pre-
1.1.x history is available as version tarballs on npm: @gravity-ai/api versions · @gravity-ai/react versions. The short version: 0.0.x → 0.1.x → 1.0.0 covered the initial public API, ad card + impression logic, the publisher playground, and the first round of @gravity-ai/react templates. If you’re still pinned anywhere in this range, upgrade straight to latest — the API surface is stable across the 1.x line.How versions ship
@gravity-ai/apiand@gravity-ai/reactare versioned independently. Most publishers only need@gravity-ai/api;@gravity-ai/reactis a thin wrapper with pre-built components.lateston npm always reflects the newest stable release. We do not ship breaking changes to published APIs on1.xminor/patch bumps.- The pixel (
gr-pix.js) is served fromhttps://code.trygravity.ai/gr-pix.jsand updates in place — you don’t pin a version, you always get the current build. Changes are backwards-compatible.
Questions or issues?
- Integration help — see Integration guide or email support@trygravity.ai.
- Experiment setup — see Experiments.
- Going live checklist — see Going live.

