Graceful degradation

The public SDK surface is fail-silent by design. Your integration should keep the core app path moving when a sponsored slot cannot be created, when a decision does not fill, or when delivery falls back between modes.

Basic fallback pattern

fallback.ts

typescript

FALLBACK
const job = await client.createJob({ job_type: "chat" });if (!job) {  // keep the app path moving without assuming a sponsored slot exists  return { decision: null };}const decision = await client.getDecision(job.slot_ids[0]);if (!decision || decision.fill !== true) {  return { decision: null };}

Create-job failure

createJob() may resolve to null. Treat that as a failed handoff and continue without a sponsored placement.

Delivery fallback

The SDK supports explicit polling, websocket, and callback delivery. The SDK-side auto path falls back when the preferred delivery channel is unavailable.

No-fill behavior

A no-fill should leave your primary GenAI response untouched. The widget renders nothing for pending or no-fill decisions, and your app should treat that as a normal outcome.

Choose hosted defaults or package control

Back to API docsContact the team

These pages document the package layer for teams that choose wavebird to control ad requests, decisions, rendering helpers, consent, and beacons directly. Use the API docs for hosted defaults, and use contact only when you want rollout review, enterprise coordination, or help with non-standard integration constraints. Beacon billing rules live in SDK Concepts.