Testing your integration
Onboarding gives you a sandbox test key and a live key. Use the sandbox path first so you can validate the full request, decision, widget, and beacon flow without touching live SSP traffic.
Test keys
- Sandbox keys use the prefix
sk_test_.... - They always return a mock ad creative.
- They do not send live SSP traffic.
- They do not generate billable revenue.
Use sandbox keys for local development, CI/CD pipelines, integration tests, and demo environments.
Switching to live
When your wrapper is ready and wavebird has enabled your pilot partner path, replace the sandbox key with your live secret key sk_live_.... A live key by itself does not prove SSP attach or revenue readiness; live SSP traffic and payout handling require operator-approved partner configuration.
Observability during integration
The SDK is fail-silent by design and does not spam your console automatically. During integration, attach an onError handler and opt into logLevel or a custom logger so transport, fallback, and contract issues are visible in your own telemetry.
observability.ts
typescript
new CslClient({
baseUrl: "https://api.wavebird.ai",
getApiKey: () => "sk_test_...",
options: {
logLevel: "debug",
onError: (error) => {
console.error(error.code, error.message, error.cause);
},
logger: {
debug: (message, meta) => console.debug(message, meta),
info: (message, meta) => console.info(message, meta),
warn: (message, meta) => console.warn(message, meta),
error: (message, meta) => console.error(message, meta),
},
},
});Abort and offline behavior
The widget flushes visible_ended when the page becomes hidden, the tab unloads, or the browser goes offline. If you wire browser-side beacon delivery through the SDK client, beacon requests use unload-safe keepalive delivery where the platform allows it.
Human verification and IVT signals
The browser SDK can attach device- and interaction-level verification signals to createJob(), including a stable fingerprint_hint, viewport/screen data, navigator.webdriver, and trusted pointer/keyboard/touch counts. For abuse-sensitive wrappers, enable humanVerification.mode = "interaction_required" so browser-side createJob() calls wait for a recent trusted user interaction before requesting ad inventory.
Verification
wavebird uses its own beacon-based proof system for impression tracking. Third-party verification (MOAT, IAS, DoubleVerify, OM SDK) is not yet supported. If you need third-party verification for compliance or campaign requirements, contact support@wavebird.ai before launch.
Related docs: Troubleshooting and Quickstart.
API first, Script Tag second, SDK third
These pages are the advanced package layer for teams that intentionally choose @csl/wrapper-sdk. Primary onboarding still lives in the API docs, and browser-first installs should start with the Script Tag. Use contact only when you want rollout review, enterprise coordination, or help with non-standard integration constraints. Beacon billing rules live in SDK Concepts.