Skip to content

Debug API

POST /v1/debug/attribution

Test attribution matching without recording anything. Pass the same fingerprint data the SDK would send, and Trace returns which click (if any) would match — without creating an install record.

This is useful for:

  • Verifying your short links are set up correctly
  • Debugging why an attribution didn’t match
  • Testing the attribution flow in CI/CD
{
"apiKey": "tr_live_xxxxxxxxxxxx",
"fingerprint": {
"ipAddress": "203.0.113.42",
"userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 8)",
"platform": "ANDROID",
"osVersion": "14",
"deviceModel": "Pixel 8",
"screenWidth": 1080,
"screenHeight": 2400,
"screenDensity": 2.75,
"locale": "en_US",
"timezone": "America/New_York",
"appVersion": "1.0.0",
"sdkVersion": "1.0.0"
},
"installReferrer": "utm_source=google&trace_click_id=abc123",
"clickId": null
}
FieldTypeRequiredDescription
apiKeystringyesYour app’s API key
fingerprintobjectyesDevice fingerprint (same shape the SDK sends)
installReferrerstringnoAndroid install referrer string
clickIdstringnoExplicit click ID from a deep link
FieldTypeRequiredDescription
ipAddressstringyesClient IP address
userAgentstringyesBrowser or app User-Agent string
platformstringyesANDROID or IOS (case-sensitive)
osVersionstringnoOS version string (e.g. 14, 17.0)
deviceModelstringnoDevice model (e.g. Pixel 8, iPhone15,2)
screenWidthintnoScreen width in pixels
screenHeightintnoScreen height in pixels
screenDensityfloatnoScreen density / DPI
localestringnoDevice locale (e.g. en_US)
timezonestringnoIANA timezone (e.g. America/New_York)
appVersionstringnoApp version string
sdkVersionstringnoSDK version string
{
"attributed": true,
"method": "INSTALL_REFERRER",
"installId": null,
"clickId": "abc123",
"campaignId": "summer_sale",
"deepLinkPayload": {
"deepLinkPath": "/product/123",
"deepLinkParams": {"color": "blue"},
"isDeferred": true
},
"metadata": {}
}

The response shape is identical to a real attribution response, except installId is always null (since no install is recorded).

The method field tells you how the match was made:

MethodDescription
INSTALL_REFERRERMatched via the Android install referrer string containing a trace_click_id
CLICK_IDMatched via an explicit click ID passed by the SDK
FINGERPRINTProbabilistic match based on device signals (screen, OS, locale, timezone)
ORGANICNo match found — the install would be recorded as organic
Terminal window
# Minimal — required fields only
trace debug attribution \
--ip-address 203.0.113.42 \
--user-agent "Mozilla/5.0 (Linux; Android 14; Pixel 8)" \
--platform ANDROID
# Full fingerprint for accurate scoring
trace debug attribution \
--ip-address 203.0.113.42 \
--user-agent "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)" \
--platform IOS \
--device-model "iPhone15,2" \
--os-version "17.0" \
--screen-width 1179 \
--screen-height 2556 \
--screen-density 3.0 \
--locale en-US \
--timezone America/New_York
# Match against a specific click
trace debug attribution \
--ip-address 203.0.113.42 \
--user-agent "Mozilla/5.0 (Linux; Android 14)" \
--platform ANDROID \
--click-id abc123

The attribution command always outputs JSON since the scoring data is structured.


POST /v1/debug/reset

Clear all sandbox attribution data for your app. Useful for resetting state between test runs. Optionally scope the reset to a specific IP address.

{
"ipAddress": "203.0.113.42"
}
FieldTypeRequiredDescription
ipAddressstringnoOnly reset data associated with this IP. Omit to reset all sandbox data.
{
"reset": true
}
Terminal window
# Reset all sandbox data
trace debug reset
# Reset data for a specific IP only
trace debug reset --ip-address 203.0.113.42