SDKs
One SDK per platform, all speaking the same small REST contract. Pick yours:
| SDK | Platform | Guide |
|---|---|---|
| Swift | iOS 15+ apps | iOS SDK |
| Kotlin | Android apps | Android SDK |
| React Native | iOS + Android from one codebase | React Native SDK |
| Flutter | iOS + Android from one codebase | Flutter SDK |
| Web | Browser — landing pages & SaaS frontends | Web SDK |
| Node | Server-side — SaaS backends & Stripe pairing | Node SDK |
What every SDK does
The surface is identical everywhere, so switching platforms is a rename:
configure— set your SDK key + API base URL once at startup.attribute(url)— parse aclaim_token(orct) query param from an incoming link and claim the click.applyCode(code)— manual referral-code attribution ("LUMI") — works with zero deep-link setup.identify(userId)— bind your user id to the attribution. Use the same id your billing layer sees (RevenueCatapp_user_id, Stripemetadata.customer_user_id).attributedAffiliateId()— the persisted affiliate id from the install response, for passing into RevenueCat / Adapty subscriber attributes.
Every SDK persists a stable generated device id, and every network failure is
silent-safe — calls return false/null and never crash the host app.
The underlying REST contract is two endpoints: see
POST /sdk/install and POST /sdk/identify.