Skip to main content
All endpoints are 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 as token. 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.

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 }. init is 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

Registers an install or app open and starts attribution. Call once on app start. Returns 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

Returns the attribution result for an install. Safe to poll. The result is cached for 24 hours.
For an organic install, campaign_data is null and attribution_source is "ORGANIC". gaid and idfa are the advertising IDs the install was recorded with. If none was stored, they come from the device_data in the request. Each one is null when it is not available, for example on the other platform, when the user has not allowed tracking, or when the IDFA is all zeros.

trigger (signup)

Identifies the user and ties the install to your user ID. Call when the user signs up or logs in. user_data fields (only id is needed):

set-user-data

Sends user details and the IDs your product analytics tools use for this user. You can call it right after your first init call, before the user logs in: user_data.id is optional here. Not a replacement for signup, which still requires id. When user_data carries a tool’s ID (mixpanel_distinct_id, amplitude_device_id, posthog_distinct_id, moengage_user_id, braze_device_id, ga_app_instance_id with ga_session_id, or netcore_device_guid) and that integration is configured in Linkrunner, Linkrunner sends this install’s attribution to that tool for this user, the same attribution it sends after signup. This applies to installs attributed to a campaign. If the install is not attributed yet, Linkrunner sends it once attribution completes.

capture-event

Tracks a custom event. Events are stored for all users, including organic ones. Identify the user with user_id or install_instance_id.

capture-payment

Tracks revenue. Like events, the user must be attributed via signup. 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

Removes a captured payment, for a refund. Provide payment_id or user_id.

update-push-token

Stores the device push token, used for uninstall tracking.

integrations

Sends third-party IDs, such as a CleverTap ID.
Reports a deeplink open for remarketing and reattribution. Call when your app opens from a deeplink.

Errors

Need help? Contact support@linkrunner.io