> ## Documentation Index
> Fetch the complete documentation index at: https://docs.clickterm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Changelog and updates for the ClickTerm API and SDKs.

This page tracks changelogs for all releases of the ClickTerm SDKs and API.

<Update label="SDK v2.3.0" description="June 2026" tags={["Web SDK"]}>
  ### What's changed

  * **Structured template placeholders** — `templatePlaceholders` now uses named fields (`fullName`, `email`, `company`, `jobTitle`, `date`, `phoneNumber`, `registrationNumber`, `vatNumber`, `address`) plus a `customPlaceholders` map instead of flat `custom1` to `custom10` fields.
</Update>

<Update label="SDK v2.2.0" description="June 2026" tags={["Android SDK"]}>
  ### What's changed

  * **Structured template placeholders** — `templatePlaceholders` now uses named fields (`fullName`, `email`, `company`, `jobTitle`, `date`, `phoneNumber`, `registrationNumber`, `vatNumber`, `address`) plus a `customPlaceholders` map instead of flat `custom1` to `custom10` fields.
</Update>

<Update label="SDK v0.3.0" description="June 2026" tags={["React Native SDK"]}>
  ### What's changed

  * **Structured template placeholders** — `templatePlaceholders` now uses named fields (`fullName`, `email`, `company`, `jobTitle`, `date`, `phoneNumber`, `registrationNumber`, `vatNumber`, `address`) plus a `customPlaceholders` map instead of flat `custom1` to `custom10` fields.
</Update>

<Update label="SDK v0.2.1" description="June 2026" tags={["React Native SDK"]}>
  ### What's changed

  * **Android dependency bump** — Updated the bundled Android SDK to `2.1.1` (from `2.1.0`). No changes to the JavaScript/TypeScript API or the iOS framework.
</Update>

<Update label="SDK v0.2.0" description="June 2026" tags={["React Native SDK"]}>
  ### What's changed

  * **iOS framework now fetched at install time** — The native `ClicktermSDK.xcframework` is no longer bundled in the npm package. It's downloaded automatically from the ClickTerm CDN during `pod install`, with a best-effort prefetch right after `npm install`. You still don't run a manual fetch step.
  * **More resilient installs** — `npm install` no longer fails on Android-only projects, Windows hosts, restricted CI, or when the CDN is unreachable. The iOS prefetch is best-effort; the authoritative fetch happens at `pod install` time and stops with an actionable message if it can't download.

  ### Security

  * The iOS framework is downloaded over **HTTPS**. An optional checksum can be enforced with the `CLICKTERM_IOS_SDK_SHA256` environment variable.
</Update>

<Update label="SDK v0.1.0" description="May 2026" tags={["React Native SDK"]}>
  ### What's new

  * **Initial release** — `@clickterm/react-native-sdk` is now available on npm. An [Expo Module](https://docs.expo.dev/modules/overview/) that wraps the native iOS and Android Clickterm SDKs so React Native apps (Expo or bare) can present clickwrap dialogs without writing custom native bridges.
  * **Promise-based TypeScript API** — `initialize(appId)`, `show(request)`, and `showAcceptedContent(request)`.
  * **Typed errors** — All errors are thrown as `Error` instances whose `.code` property is one of the documented `ClicktermErrorCode` values (`ERR_CLICKTERM_NOT_INITIALIZED`, `ERR_CLICKTERM_NETWORK`, `ERR_CLICKTERM_USER_CANCELLED`, and others).
  * **Expo config plugin** — A no-op `app.plugin.js` ships in the package so consumers can list `"@clickterm/react-native-sdk"` in their `app.json` `plugins` array. Future native-config tweaks can be added without an API break.
  * **Requirements** — React Native `0.75+` or Expo SDK `52+`, iOS `15.0+`, Android `minSdk 24`.

  See the [React Native SDK quickstart](/dev/quickstart-react-native) and [SDK reference](/dev/sdk/react-native/clickterm-client) to get started.
</Update>

<Update label="SDK v2.2.1" description="April 2026" tags={["Web SDK"]}>
  ### What's changed

  * **Published to npm** — The Web SDK is now available on npm as [`@clickterm/widget`](https://www.npmjs.com/package/@clickterm/widget), shipping ESM and CJS builds with bundled TypeScript types. The CDN script tag remains fully supported — see [Installation](/dev/sdk/web/installation).
  * **Additional request metadata** — The Web SDK now includes extra SDK metadata in outgoing requests to help with troubleshooting, analytics, and support. This does not affect functionality.
</Update>

<Update label="SDK v2.2.0" description="April 2026" tags={["Web SDK"]}>
  ### What's new

  * **Inline clickwrap mode** — New `ClicktermDom.renderInline()` method embeds a consent checkbox directly in your page, giving you full control over placement and submission timing. Ideal for registration forms, checkouts, and multi-consent flows
  * **`ClicktermDom.finalizeAll()`** — Finalize multiple inline clickwraps at once with a single call
  * **Inline styling API** — Customize checkbox color, size, border radius, and text font via the `style` option (code-based, independent of dashboard customization)
  * **Multiple clickwraps per page** — Render independent inline consent checkboxes in separate containers on the same page

  ### Migration from v2.1

  **Web SDK**: Update your script tag:

  ```html theme={null}
  <!-- Before -->
  <script src="https://cdn.clickterm.com/sdk/clickterm-widget-2.1.0.min.js"></script>
  <!-- After -->
  <script src="https://cdn.clickterm.com/sdk/clickterm-widget-2.2.0.min.js"></script>
  ```

  No breaking changes. All existing `ClicktermDialog` code continues to work. The new `ClicktermDom` class is additive.

  See [Displaying an inline clickwrap](/dev/guides/displaying-inline-clickwrap) and the [ClicktermDom API reference](/dev/sdk/web/clickterm-dom) to get started.
</Update>

<Update label="SDK v2.1.1" description="April 2026" tags={["Android SDK"]}>
  ### What's changed

  * **Additional request metadata** — The Android SDK now includes extra SDK metadata in outgoing requests to help with troubleshooting, analytics, and support. This does not affect functionality.
</Update>

<Update label="SDK v2.1.0" description="March 2026" tags={["Web SDK", "Android SDK"]}>
  ### What's new

  * **Shadow DOM encapsulation** (Web) — Dialog now renders inside a closed Shadow DOM, preventing host page CSS from leaking into the clickwrap dialog
  * **Server-driven text customizations** — Dialog text (button labels, prompts) can now be overridden per language via backend customization settings
  * **Callback interface renames** (Android) — `*Callback` interfaces renamed to `*Listener`, `onFailure` renamed to `onError`
  * **`shutdown()` method** (Android) — New `ClicktermClient.shutdown()` to clean up SDK state
  * **Dialog refactoring** (Android) — Extracted `DialogCustomization`, `DialogSession`, and `DialogTextResolver` classes for better maintainability

  ### Migration from v2.0

  **Web SDK**: Update your script tag:

  ```html theme={null}
  <!-- Before -->
  <script src="https://cdn.clickterm.com/sdk/clickterm-widget-2.0.0.min.js"></script>
  <!-- After -->
  <script src="https://cdn.clickterm.com/sdk/clickterm-widget-2.1.0.min.js"></script>
  ```

  **Android SDK**: Update your Gradle dependency:

  ```groovy theme={null}
  // Before
  implementation 'com.clickterm:android-sdk:2.0.0'
  // After
  implementation 'com.clickterm:android-sdk:2.1.0'
  ```

  <Warning>
    **Android breaking changes:** If you use callback interfaces directly, update `*Callback` to `*Listener` and `onFailure` to `onError`.
  </Warning>
</Update>

<Update label="SDK v2.0.0" description="February 2026" tags={["Web SDK", "Android SDK"]}>
  ### What's new

  * **Remote customization settings** — Dialog appearance (theme colors, button styles, border radius) is now configurable from the [ClickTerm Dashboard](/product/templates/widget-customization) per template
  * **Custom branding** — Support for custom logos replacing the default ClickTerm branding in the dialog
  * **Server-driven agreement mode** — Scroll vs. checkbox mode is now controlled via backend customization settings instead of client-side configuration
  * **Resolved language from server** — The SDK now uses the server-resolved language for dialog translations, ensuring consistency with template content

  ### Migration from v1.2

  <Warning>
    **Breaking change:** The client-side `mode` option for scroll/checkbox is deprecated. Agreement mode is now managed from the dashboard.
  </Warning>

  **Web SDK**: Update your script tag:

  ```html theme={null}
  <!-- Before -->
  <script src="https://cdn.clickterm.com/sdk/clickterm-widget-1.2.0.min.js"></script>
  <!-- After -->
  <script src="https://cdn.clickterm.com/sdk/clickterm-widget-2.0.0.min.js"></script>
  ```

  **Android SDK**: Update your Gradle dependency:

  ```groovy theme={null}
  // Before
  implementation 'com.clickterm:android-sdk:1.2.0'
  // After
  implementation 'com.clickterm:android-sdk:2.0.0'
  ```
</Update>

<Update label="API v1.0" description="January 2026" tags={["API"]}>
  ### Endpoints

  * `POST /clickwrap/verify` — Signature verification
  * `GET /clickwrap-events/{id}/details` — Event details
  * `GET /clickwrap-events/{id}/certificate` — Certificate of Acceptance download (PDF)
  * `GET /clickwrap-events/{id}/agreement` — Clickwrap Agreement download (PDF)
  * `GET /clickwraps/{endUserId}/status` — Consent status check
  * `GET /clickwrap-templates` — Template discovery with tag filtering
</Update>

<Update label="SDK v1.2.0" description="January 2026" tags={["Web SDK", "Android SDK"]}>
  ### What's new

  * **Multi-language support** — Dialog UI strings (buttons, prompts, labels) are now translatable. Translations are loaded remotely at initialization with fallback to English
  * Supported languages at launch: English, German, French, Spanish, Chinese, Hindi, Russian
  * Language can be specified per request via the `language` parameter
  * Language fallback chain: requested language → app locale → device locale → English
</Update>

<Update label="SDK v1.1.1" description="January 2026" tags={["Web SDK", "Android SDK"]}>
  ### What's fixed

  * **Modal responsiveness** — Improved dialog sizing on different screen sizes
  * **Version display** — Dialog subtitle now shows the template version number (format: `Published on: {date} | Version: {major}.{minor}`)
  * **Null safety** (Android) — Fixed potential crash when content parameter is null in subtitle builder
</Update>

<Update label="SDK v1.1.0" description="December 2025" tags={["Web SDK", "Android SDK"]}>
  ### What's new

  * **Clickwrap dialog redesign** — Full consent dialog UI with open/close animations, scroll tracking, and HTML content rendering
  * **Two agreement modes** — `scroll` (accept enabled after scrolling to bottom) and `checkbox` (consent checkbox must be checked), configurable via `ClicktermDialogConfig`
  * **`showAcceptedContent()`** — New method for reviewing previously accepted content in a read-only dialog
  * Promise-based API (Web) and listener callbacks (Android)
</Update>

<Update label="SDK v1.0.1" description="October 2025" tags={["Web SDK", "Android SDK"]}>
  ### What's changed

  * **API endpoint versioned** — Paths updated from `/public-client/clickwrap` to `/public-client/v1/clickwrap`
  * **Field renames per glossary** — `endUser` → `endUserId`, `templateId` → `clickwrapTemplateId`, `templateParams` → `templatePlaceholders`
  * **Minor version tracking** — Added `clickwrapTemplateVersionMinor` field to event and template responses
  * **Improved error handling** (Android) — Structured error messages parsed from API response body
</Update>
