POST requests to https://api.linkrunner.io with a JSON body and Content-Type: application/json.
Authentication
Send your project token in the body of every request astoken. That is the only credential these endpoints need.
Common fields
These fields appear on most requests. Send them on every call once your install is registered.| Field | Type | Description |
|---|---|---|
token | string | Required. Your project token. |
platform | string | Use "ANDROID" or "IOS". |
install_instance_id | string | The UUID you generate once and reuse. See Install instance ID. |
Rules
- Rate limit: 25 requests per second per token. Over the limit returns
429. - Response envelope: most endpoints return
{ "msg": string, "status": number, "data": object }.initis the exception (see below). - Call from the device so Linkrunner sees the device IP.
This reference uses Android examples. On iOS, send
"platform": "IOS" and a different device_data shape (IDFA, IDFV, and adservices_attribution_token instead of GAID and the install referrer). The init, trigger, capture-event, and capture-payment responses may also include SKAdNetwork values (fine_conversion_value, coarse_conversion_value, lock_postback). See iOS device data.init
| Field | Type | Description |
|---|---|---|
token | string | Required. |
install_instance_id | string | The persisted UUID. Send it so events tie to this install. |
device_data | object | Device signals. See Collecting device data. |
platform | string | "ANDROID". |
app_version | string | Your app’s version name. |
package_version | string | A version string for your integration. |
link | string | Optional. The deeplink the app was opened with, if any. |
debug | boolean | Optional. |
202. Attribution runs in the background, so the response only acknowledges receipt.
To read the attribution result, poll
attribution-data with the same install_instance_id.attribution-data
| Field | Type | Description |
|---|---|---|
token | string | Required. |
install_instance_id | string | The install to look up. |
device_data | object | Optional. Include install_ref so the Meta referrer can be resolved. |
platform | string | "ANDROID". |
campaign_data is null and attribution_source is "ORGANIC".
trigger (signup)
| Field | Type | Description |
|---|---|---|
token | string | Required. |
user_data | object | The user, see below. |
data | object | Pass-through bag. Include device_data inside it. |
install_instance_id | string | The persisted UUID. |
platform | string | "ANDROID". |
customer_created_at | string | Optional. ISO date the user account was created. |
is_first_time_customer | boolean | Optional. |
user_data fields (only id is needed):
| Field | Type | Description |
|---|---|---|
id | string | Your user ID. |
name, email, phone | string | User details. |
mixpanel_distinct_id, amplitude_device_id, posthog_distinct_id, braze_device_id | string | Analytics IDs for those integrations. |
ga_app_instance_id, ga_session_id | string | Google Analytics IDs. |
set-user-data
signup.
| Field | Type | Description |
|---|---|---|
token | string | Required. |
user_data | object | Same shape as signup. |
install_instance_id | string | The persisted UUID. |
platform | string | "ANDROID". |
capture-event
signup first.
| Field | Type | Description |
|---|---|---|
token | string | Required. |
event_name | string | Required. |
event_data | object | Optional. Custom attributes. Add amount as a number to share revenue with ad networks. |
install_instance_id | string | The persisted UUID. |
user_id | string | Optional. |
platform | string | "ANDROID". |
capture-payment
signup.
| Field | Type | Description |
|---|---|---|
token | string | Required. |
amount | number | Payment amount. Must be zero or greater. |
user_id | string | The paying user. |
payment_id | string | Optional. Used to deduplicate. Sending the same payment_id twice is ignored. |
type | string | Optional. Defaults to DEFAULT. |
status | string | Optional. Defaults to PAYMENT_COMPLETED. |
event_data | object | Optional. Ecommerce attributes. |
install_instance_id | string | The persisted UUID. |
platform | string | "ANDROID". |
type values: FIRST_PAYMENT, SECOND_PAYMENT, ONE_TIME, RECURRING, WALLET_TOPUP, FUNDS_WITHDRAWAL, SUBSCRIPTION_CREATED, SUBSCRIPTION_RENEWED, SUBSCRIPTION_CANCELLED, SUBSCRIPTION_REFUNDED, SUBSCRIPTION_BILLING_ISSUE, DEFAULT.
status values: PAYMENT_INITIATED, PAYMENT_COMPLETED, PAYMENT_FAILED, PAYMENT_CANCELLED.
remove-captured-payment
payment_id or user_id.
| Field | Type | Description |
|---|---|---|
token | string | Required. |
payment_id | string | The payment to remove. |
user_id | string | Remove payments for this user. |
install_instance_id | string | The persisted UUID. |
platform | string | "ANDROID". |
update-push-token
| Field | Type | Description |
|---|---|---|
token | string | Required. |
push_token | string | The FCM token. |
install_instance_id | string | The persisted UUID. |
platform | string | "ANDROID". |
integrations
| Field | Type | Description |
|---|---|---|
token | string | Required. |
integration_info | object | For example { "clevertap_id": "..." }. |
install_instance_id | string | The persisted UUID. |
platform | string | "ANDROID". |
handle-deeplink
| Field | Type | Description |
|---|---|---|
token | string | Required. |
deeplink_url | string | The deeplink the app opened with. |
device_data | object | Device signals. |
meta_install_referrer | object | Optional. The Meta referrer object if available. |
install_instance_id | string | The persisted UUID. |
platform | string | "ANDROID". |
Errors
| Code | Meaning |
|---|---|
400 | Missing required field or invalid token. |
401 | Invalid token (on attribution-data). |
429 | Rate limit exceeded (25 req/s per token). |
500 | Server error. Retry with backoff. |