Docs

API Reference

Documentation

API Reference

The SDK contract for initializing quickly, rendering correctly, and sending proof back.

initSpryUi

Entry point for fetching config, evaluating eligibility, rendering messages, and sending events.

Snippetts
import { initSpryUi } from "https://spryui.com/sdk/v1/index.mjs";

const sdk = initSpryUi({
  publicKey: "pk_...",
  host: window.location.host,
  apiBaseUrl: "https://spryui.com/api/sdk/v1",
  debug: false,
  onReady: (messages) => {
    console.log("eligible messages:", messages.length);
  },
  onError: (error) => {
    console.error("spryui error", error);
  },
});

Options

Required: publicKey. Commonly provided: host, env, debug, onReady, onError.

Snippetts
type SpryUiSdkOptions = {
  publicKey: string; // required
  env?: "DEVELOPMENT" | "STAGING" | "PRODUCTION";
  host?: string;
  mountId?: string;
  defer?: boolean; // default true
  apiBaseUrl?: string;
  token?: string;
  userId?: string;
  sessionKey?: string;
  schemaVersion?: number; // default 1
  privacyMode?: "anonymous" | "persistent"; // default "anonymous"
  consentRequired?: boolean; // default false
  hasConsent?: boolean;
  optOut?: boolean;
  consentStorageKey?: string;
  optOutStorageKey?: string;
  visitorSeenStorageKey?: string;
  targetingContext?: {
    path?: string;
    device?: "mobile" | "tablet" | "desktop";
    referrer?: string | null;
    utmSource?: string | null;
    utmMedium?: string | null;
    utmCampaign?: string | null;
    country?: string | null;
    isFirstVisit?: boolean;
    isReturningVisitor?: boolean;
  };
  bannerPlacement?: "fixed" | "relative"; // default "fixed"
  debug?: boolean; // default false
  onReady?: (messages) => void;
  onError?: (error) => void;
};

Instance Methods

Use refresh() after host-page state changes, and destroy() for teardown during SPA unmount/navigation.

Snippetts
type SpryUiSdkInstance = {
  refresh: () => Promise<void>;
  destroy: () => void;
  setConsent: (value: boolean, persist?: boolean) => void;
  setOptOut: (value: boolean, persist?: boolean) => void;
};

Message Payload Contract

Dashboard and SDK config endpoints provide message objects with content, targeting, schedule, and frequency fields.

Snippetts
type SpryUiSdkMessage = {
  messId?: string; // preferred id in SDK payloads
  id?: string;     // legacy fallback id
  type: "BANNER" | "TOAST" | "MODAL";
  position:
    | "TOP_FIXED" | "BOTTOM_FIXED"
    | "TOP_LEFT"  | "TOP_RIGHT"
    | "BOTTOM_LEFT" | "BOTTOM_RIGHT"
    | "TOP_RELATIVE" | "BOTTOM_RELATIVE";
  priority: number;
  content: Record<string, unknown>;
  targeting?: {
    selector?: string;
    trigger?: {
      type?: "IMMEDIATE" | "DELAY" | "SCROLL" | "CLICK" | "EXIT_INTENT";
      delayMs?: number;
      scrollPercent?: number;
      clickSelector?: string;
    };
    paths?: string[];
  };
  frequency?: {
    perSession?: number;
    total?: number;
    cooldownMinutes?: number;
    cooldownHours?: number;
  };
};

Event Payload Contract

SDK ingestion batches event payloads with message/session context and normalized page metadata.

Snippetts
type SpryUiSdkEventPayload = {
  eventType: "IMPRESSION" | "CLICK" | "DISMISS" | "COMPLETE" | "DEBUG";
  messageId?: string;
  userKey?: string;
  sessionKey?: string;
  schemaVersion?: number;
  context?: Record<string, unknown>;
};