# Kixo LLM Integration Context
Kixo is an AI-first B2B platform for product analytics, dashboards, audience engagement, campaigns, and chat-first work. Customer companies integrate Kixo into their own web, iOS, and Android products. Their team members use the Kixo dashboard. Their audience members do not log in to Kixo.
## Public SDKs
Use exactly one SDK for the target platform.
### Web
Install with the CDN script embed or npm `@kixo.io/web`:
```html
```
To configure options in code, load without the URL params and call `Kixo.init()` — the global `Kixo` is available once the module has loaded:
```html
```
### iOS
Use Swift Package Manager:
```text
https://github.com/kixoio/kixo-ios-sdk
```
Then:
```swift
import Kixo
Kixo.configure(
projectId: "YOUR_PROJECT_ID",
apiKey: "YOUR_API_KEY"
)
```
### Android
Add the Maven repository:
```kotlin
maven {
url = uri("https://raw.githubusercontent.com/kixoio/kixo-android-sdk/main/repo")
}
```
Add the dependency:
```kotlin
implementation("io.kixo:kixo-android-sdk:0.1.17")
```
Configure once:
```kotlin
import io.kixo.sdk.Kixo
Kixo.configure(this, "YOUR_PROJECT_ID", "YOUR_API_KEY")
```
## Event design
Do not duplicate Kixo's auto-tracked page, screen, session, click, tap, error, crash, or push lifecycle events. Add custom events only for product-specific actions.
Use one event per user action. Put context in properties. Use snake_case, object_verb, past tense, and the same names across Web, iOS, and Android.
Good:
```js
Kixo.track('post_opened', {
source: 'search',
post_id: 'post_123',
});
```
Avoid:
```text
post_opened_from_search
post_opened_from_feed
```
Prefer canonical standard events or typed helpers where available:
- signup
- activation
- purchase
- subscribe_start
- subscribe_renewed
- trial_start
- cancel
- upgrade
- downgrade
- share
- invite
Use `amount` and `currency` for money in SDK helpers. `amount_cents` is accepted when the source system stores minor units.
## Identity and segmentation
Call `identify` only when a stable product user ID is known.
Use reserved profile traits when available:
- `$email`
- `$name`
- `$plan`
- `$country`
- `$created`
Use boolean user properties for durable segmentation tags:
```js
Kixo.setUserProperty('subscribe', true);
Kixo.setUserProperty('vip', true);
```
Call `reset` on logout.
## Data collection and scope
The SDK API key is a client-side ingestion credential, not a dashboard secret. It can send SDK data for the project, but it must not be confused with dashboard tokens or admin credentials.
Replay is enabled from Kixo project settings. Mouse-move heatmaps are disabled by default. The SDK collects the trackers enabled by the customer and the events and properties their application sends. Use only APIs listed in the current platform SDK reference; do not invent policy controls.
Project collection settings can override local SDK defaults. Do not expose or document internal Kixo dev-routing flags.
## Deep Links
Deep Links use the exact branded host shown in Kixo Project Settings. Never
replace it with the base Kixo domain or a wildcard.
Android:
- Save the release package name and every SHA-256 signing fingerprint in Kixo.
- Add an `android:autoVerify="true"` HTTPS intent filter for
`YOUR_EXACT_KIXO_HOST` with `android:pathPrefix="/link/"`.
- Forward warm `Activity.onNewIntent` URLs to
`Kixo.handleDeepLink(url, source = "applink")`.
- Test both a cold open and a warm open. `pm get-app-links` must report the
exact host as verified.
iOS:
- Save the bundle ID and Apple team ID in Kixo.
- Add `applinks:YOUR_EXACT_KIXO_HOST` to the app target's Associated Domains
entitlement.
- SwiftUI apps should attach `.onKixoDeepLink` to the root view.
- UIKit scene apps should forward cold `connectionOptions` with
`Kixo.handleSceneConnection` and warm `NSUserActivity` with
`Kixo.handleUserActivity`.
- Test both a cold open and a warm open from a real tappable link.
Keep navigation in the host app. Route only known in-app paths; do not turn a
resolved destination into an unrestricted URL opener. Full guide:
https://docs.kixo.io/deep-links
Web:
- Read landing context with `Kixo.getLinkData()` and allowlist any custom
parameters before routing.
- Use `Kixo.showSmartBanner({ linkId, linkUrl })` for an explicit mobile-web
“Open in app” prompt.
- Use `await Kixo.createQrHandoff({ linkId, params })` for a desktop QR. Kixo
resolves the saved app and website destinations for that link. Render the
returned `url` unchanged; never encode a user ID or device ID into a QR.
## Verification
Trigger one auto event and one custom event, check `diagnostics()` where available, and confirm events in the Kixo dashboard or chat.
Canonical docs:
- https://docs.kixo.io/quickstart
- https://docs.kixo.io/ai-agents
- https://docs.kixo.io/deep-links
- https://docs.kixo.io/tracking-in-context
- https://docs.kixo.io/sdk/events
- https://docs.kixo.io/sdk/web
- https://docs.kixo.io/sdk/ios
- https://docs.kixo.io/sdk/android