Skip to main content

Base URL

Authentication

All API requests require authentication. Include your server key in the request headers.

Error Responses

  • 401 Unauthorized
    • "Unauthorized access." - Missing or invalid API key
  • 429 Too Many Requests
    • Message: "Rate limit exceeded. Please try again later."
    • Cause: You’ve exceeded the rate limit of 30 requests per second.

Rate Limit Details

  • Rate: 30 requests per second
  • Status code on limit exceeded: 429 (Too Many Requests)

Authentication

All API requests require authentication using an API key. You must include this key in the header of every request.

API Key Header

Include the following header in all API requests:
Replace YOUR_API_KEY with your actual API key. (Refer instructions below)

Obtaining Your API Key

You can find your API key on the Linkrunner settings page:
  1. Go to https://dashboard.linkrunner.io/settings?s=data-apis
  2. Locate your Server key on this page
  3. Use this key in the linkrunner-key header for all API requests
Keep your API key confidential. Do not share it or expose it in client-side code. Always make API requests from a secure server-side environment.

Endpoints

1. List Campaigns

Retrieve a paginated list of campaigns with optional filtering by status or specific link.

Request

Query Parameters

Channel Filter Behavior

Affiliate Channel Naming:
  • Affiliate names should use underscores instead of spaces
  • Example: If the affiliate is named “affiliate example”, use channel=AFFILIATE_EXAMPLE
  • Channel names are case-insensitive

Pagination

Pagination is automatically applied to all requests with the following defaults:
  • Default page: 1
  • Default limit: 100 campaigns per page
  • Maximum limit: 1000 campaigns per page

Example Requests

  1. Basic Request (returns first 100 campaigns):
  1. Filter Active Campaigns with Pagination:
  1. Get Campaign by Link:
  1. All Campaigns with Custom Limit:
  1. Filter by Channel (Google):
  1. Filter by Channel (Meta):
  1. Filter by Channel (TikTok):
  1. Combine Channel with Other Filters:

Response

Standard Response (no channel filter):

Error Responses

TypeScript Types

2. Get Attributed Users

Retrieve a paginated list of users attributed to a specific campaign with optional time range filtering.

Request

Query Parameters

Pagination

Pagination is automatically applied to all requests with the following defaults:
  • Default page: 1
  • Default limit: 50 users per page
  • Maximum limit: 1000 users per page

Time Format Details

  • ISO 8601 Format: Use YYYY-MM-DDThh:mm:ss.SSS format (e.g., 2025-06-23T10:29:26.074)
  • IANA Timezone: Standard timezone identifiers like America/New_York, Asia/Tokyo, Asia/Kolkata
  • Default Timezone: UTC is used when timezone parameter is not provided
  • Time Range: Both start and end timestamps are optional; you can filter by start time only, end time only, or both

Example Requests

  1. Basic Request (returns first 50 users):
  1. With Time Range and Timezone:
  1. With Pagination:
  1. With All Parameters:

Response

Error Responses

TypeScript Types

Campaign Domain and Store Listings

Domain Field

Each campaign response now includes a domain field that indicates which domain is being used for the campaign links:
  • Type: string | null
  • Description: The domain name used to generate campaign links
  • Behavior: If the campaign has a specific domain assigned, it will be shown. Otherwise, it falls back to the project’s primary domain.
  • Example: "yourdomain.com" or "promo.example.com"

Store Listings Array

Campaigns can now include multiple store listings in the response. Each store listing represents a different App Store or Play Store configuration. Store Listing Object Structure: Managing Store Listings:
  • Create and manage store listings in your Dashboard Settings
  • Each store listing has a unique store_listing_id that you use when creating campaigns
  • Store listings allow you to configure different App Store/Play Store parameters per campaign

3. Get Attribution Result

Retrieve attribution data for a specific user or device. This endpoint returns campaign and ad network information for attributed installs.

Request

Query Parameters

Note: At least one of device_identifier or user_id must be provided. If both are provided and they match different installs, the user_id based result will be returned as it’s more reliable.

Example Requests

  1. Get Attribution by Device Identifier:
  1. Get Attribution by User ID:
  1. Get Attribution with Both Identifiers:

Response

Success Response (200):
No Attribution Data (204): If no attribution data is found for the provided identifier, the API returns a 204 No Content status with an empty response body.

Response Properties

Error Responses

TypeScript Types

Notes

  • All timestamps are in ISO 8601 format.
  • The device_data object contains detailed information about the user’s device.
  • The active field in the campaign data indicates whether the campaign is currently active.
  • The attributed_users field in the campaign data shows the number of users attributed to that campaign.
  • User data provided in this documentation is randomized for privacy reasons. Actual API responses will contain real user data.
  • The TypeScript types provided are based on the example responses
  • The domain field shows which domain is being used for campaign link generation
  • The store_listings array contains store listing configurations associated with the campaign
  • Store listings can be created and managed in the Dashboard Settings
  • The get-attribution-result endpoint returns a 204 status code with no body when no attribution data is found
For any help please reach out to support@linkrunner.io