From 48e13544711f45acaf6cc864a5c72f9f1e284175 Mon Sep 17 00:00:00 2001 From: Saksham Sharma Date: Thu, 22 Oct 2026 14:29:29 +0530 Subject: [PATCH 1/2] docs(webhooks): document device_data.platform (LIN-3990) Co-Authored-By: Claude Opus 5.5 --- features/webhooks.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/features/webhooks.mdx b/features/webhooks.mdx index c5722cd1..ae680c76 100644 --- a/features/webhooks.mdx +++ b/features/webhooks.mdx @@ -222,6 +222,7 @@ For supported non-Meta and non-Google ad networks, `campaign_details` contains: | Field | Type | Description | |-------|------|-------------| +| `platform` | `"IOS"` \| `"ANDROID"` \| `null` | Operating system of the install. React Native, Flutter, Expo, and Capacitor apps report the underlying OS | | `ip_address` | `string` \| `null` | IP address the install request came from, as seen by Linkrunner's servers | | `user_agent` | `string` \| `null` | `User-Agent` header of the install request. This is usually your app's HTTP client, such as `okhttp/4.12.0`, not a browser | | `manufacturer` | `string` \| `null` | Device manufacturer, such as `samsung` | @@ -299,6 +300,7 @@ Example: "gaid": "bk9384xs-p449-96ds-r132", "idfa": null, "device_data": { + "platform": "ANDROID", "ip_address": "203.0.113.24", "user_agent": "okhttp/4.12.0", "manufacturer": "samsung", @@ -339,6 +341,7 @@ Sent only when **Send webhooks for organic users** is enabled: "gaid": "bk9384xs-p449-96ds-r132", "idfa": null, "device_data": { + "platform": "ANDROID", "ip_address": "198.51.100.7", "user_agent": "okhttp/4.12.0", "manufacturer": "Xiaomi", @@ -390,6 +393,7 @@ Sent only when **Send webhooks for organic users** is enabled: "custom_param_name": "custom_value" }, "device_data": { + "platform": "ANDROID", "ip_address": "203.0.113.58", "user_agent": "Dart/3.4 (dart:io)", "manufacturer": "Google", From 2606f51365a4b5bd855f6057b06cbb248e7b4d73 Mon Sep 17 00:00:00 2001 From: Saksham Sharma Date: Thu, 22 Oct 2026 16:15:18 +0530 Subject: [PATCH 2/2] docs(webhooks): device_data.platform is always set (LIN-3990) Co-Authored-By: Claude Opus 5.5 --- features/webhooks.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/webhooks.mdx b/features/webhooks.mdx index ae680c76..57c074c9 100644 --- a/features/webhooks.mdx +++ b/features/webhooks.mdx @@ -222,7 +222,7 @@ For supported non-Meta and non-Google ad networks, `campaign_details` contains: | Field | Type | Description | |-------|------|-------------| -| `platform` | `"IOS"` \| `"ANDROID"` \| `null` | Operating system of the install. React Native, Flutter, Expo, and Capacitor apps report the underlying OS | +| `platform` | `"IOS"` \| `"ANDROID"` | Operating system of the install. React Native, Flutter, Expo, and Capacitor apps report the underlying OS | | `ip_address` | `string` \| `null` | IP address the install request came from, as seen by Linkrunner's servers | | `user_agent` | `string` \| `null` | `User-Agent` header of the install request. This is usually your app's HTTP client, such as `okhttp/4.12.0`, not a browser | | `manufacturer` | `string` \| `null` | Device manufacturer, such as `samsung` | @@ -242,7 +242,7 @@ For supported non-Meta and non-Google ad networks, `campaign_details` contains: | `city` | `string` \| `null` | City name | - Both objects always contain every key. A key is `null` when Linkrunner did not receive that value or could not resolve the IP address. The values match the device and location columns in the user files from [Data Export](/features/data-export). + Both objects always contain every key. Apart from `device_data.platform`, which is always set, a key is `null` when Linkrunner did not receive that value or could not resolve the IP address. The values match the device and location columns in the user files from [Data Export](/features/data-export). ### Additional Data