Use the Android SDK when you can. It handles data collection, retries, and edge cases for you. Reach for SDK-less integration only when a policy, build constraint, or custom runtime stops you from adding the SDK.
How it works
Register the install
Call
init with your token, the install instance ID, and device data. Linkrunner starts attribution in the background.Read attribution
Poll
attribution-data with the same install instance ID until campaign data appears.Identify the user
Call
signup when the user signs up or logs in. Events and payments are only stored for users who have been through signup.Key concepts
Project token
Every request is authenticated with your project token in the JSON body. That is the only credential these endpoints need. Find your token on the dashboard.Install instance ID
install_instance_id is a UUID your app generates once, stores, and sends on every request. It ties an install to the events, signups, and payments that follow.
Generate it a single time and persist it (SharedPreferences on Android, UserDefaults on iOS). If you create a new one per call, every request looks like a different device and attribution falls apart.
Two things that break attribution
Get these right before anything else. Both fail silently.| Rule | Why it matters |
|---|---|
| Call the API from the device, not your backend. | Linkrunner matches installs using the IP of the client that calls the API. If you proxy these calls through your server, every install shares one IP and matching fails. |
Treat init as asynchronous. | The init response never contains campaign data. Attribution runs in the background, so you read the result by polling attribution-data. |
Integrate on Android
Full client (recommended)
One Kotlin client that collects every signal and calls every endpoint. Closest to the real SDK.
Minimal example
The smallest path that still attributes: install, signup, one event, one payment.
Integrate on iOS
Full client (recommended)
One Swift client that collects every signal, applies SKAdNetwork values, and calls every endpoint.
Minimal example
The smallest path that still attributes: install, signup, one event, one payment.
Reference
API reference
Every endpoint, with request and response bodies.