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.

API first, Script Tag second, SDK third

Back to API docsContact the team

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.