Start building
Testing & sandbox
Move from a signed session to a verified, duplicate-safe reward journey.
Start the local stack
From the repository root, install dependencies and run npm run dev:all. This starts local Postgres, migrations, seeded accounts, API, worker, callback echo and HTTPS web at https://127.0.0.1:3013. Use the seeded sign-in screen and integration setup to obtain public configuration. It does not deploy or call a live ad network.
npm ci
npm run dev:allProve identity and consent
Open with a fresh backend assertion and verify ready then authenticated. Refuse personalization and analytics and confirm the experience remains usable. Reject expired assertions, wrong placement, wrong origin and reused assertion nonce. Close before user switch and verify the new user cannot see the previous attempt or balance.
Test callback transport
Run the publisher callback tester. Test a valid signature, one-byte body mutation, wrong key, expired timestamp, same nonce with changed bytes, duplicate transaction under a fresh nonce, timeout, 429 and 5xx. Inspect persisted attempts and acknowledgement independently. Synthetic tester events never create ledger, user-credit or payout records.
Verify fulfillment and reversal
For a real sandbox attempt, inspect offer acceptance, authenticated conversion, risk decision, immutable ledger posting, delivery receipt and your committed user balance. Repeat the same event and confirm no second credit. Submit a linked reversal and reconcile both systems without editing history. The advertiser mapping tester alone cannot prove this loop.
Test the experience on target devices
Check loading, no eligible offers, offline recovery, expired session, rejected events and long milestone text. Test close, back, external offer links, host resume, text scaling and reduced motion. Run the SDK's source checks, then build and test on each supported OS. Protocol tests do not establish device compatibility.