pixellint

AppsFlyer impression links need an app ID and media source.

The single-platform impression endpoint places the app ID in its path and the media source in pid. The pack checks published attribution parameters, length limits and view-through lookback forms.

A complete server-to-server capture can compare its user-agent header with the link value. Account ownership and attribution history require additional context.

Apply the contracts within their published source scope.

A complete server-to-server capture can compare its user-agent header with the link value. Account ownership and attribution history require additional context.

What this pack matches

Hosts
impression.appsflyer.com
Vendor docs
support.appsflyer.com/hc/en-us/articles/210084473-Measure-view-through-engagements

Rules

Codes are stable. A finding in CI, MCP, or the playground lands on the same id.

Field Required What it checks Rule ids Source
app_id required The published single-platform impression URL carries app-id. Android package name versus iOS store ownership needs account/platform context. vendor.appsflyer-impression.param.app_id.missing
vendor.appsflyer-impression.param.app_id.empty
docs
pid required Required media-source identifier. The published link table limits its decoded value to150 characters. Reserved partner agreement requires account context. Maximum decoded characters: 150. Fix: Set pid to the media source name from the OneLink. vendor.appsflyer-impression.param.pid.missing
vendor.appsflyer-impression.param.pid.empty
vendor.appsflyer-impression.param.pid.invalid
docs
c optional Optional campaign name. AppsFlyer replaces names longer than100 characters with c_name_exceeded_max_length; the limit is a warning because this is accepted input with altered reporting. Maximum decoded characters: 100. vendor.appsflyer-impression.param.c.empty
vendor.appsflyer-impression.param.c.invalid
docs
af_viewthrough_lookback optional View-through ID matching uses 1 to 24 hours. OneLink also documents the equivalent 1d form. vendor.appsflyer-impression.param.af_viewthrough_lookback.empty
vendor.appsflyer-impression.param.af_viewthrough_lookback.invalid
docs
af_prt optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 50. vendor.appsflyer-impression.param.af_prt.invalid docs
af_siteid optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 24. vendor.appsflyer-impression.param.af_siteid.invalid docs
af_c_id optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 24. vendor.appsflyer-impression.param.af_c_id.invalid docs
af_adset optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 100. vendor.appsflyer-impression.param.af_adset.invalid docs
af_adset_id optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 24. vendor.appsflyer-impression.param.af_adset_id.invalid docs
af_ad optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 100. vendor.appsflyer-impression.param.af_ad.invalid docs
af_ad_id optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 24. vendor.appsflyer-impression.param.af_ad_id.invalid docs
af_ad_type optional Published naming conventions and24-character maximum. The raw-data dictionary also uses footer, so unlisted conventions are warnings. Maximum decoded characters: 24. vendor.appsflyer-impression.param.af_ad_type.empty
vendor.appsflyer-impression.param.af_ad_type.invalid
docs
af_channel optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 20. vendor.appsflyer-impression.param.af_channel.invalid docs
af_engagement_destination optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 50. vendor.appsflyer-impression.param.af_engagement_destination.invalid docs
af_keywords optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 100. vendor.appsflyer-impression.param.af_keywords.invalid docs
af_cost_model optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 20. vendor.appsflyer-impression.param.af_cost_model.invalid docs
af_partner_account_id optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 100. vendor.appsflyer-impression.param.af_partner_account_id.invalid docs
af_og_title optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 40. vendor.appsflyer-impression.param.af_og_title.invalid docs
af_og_description optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 300. vendor.appsflyer-impression.param.af_og_description.invalid docs
advertising_id optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 40. vendor.appsflyer-impression.param.advertising_id.invalid docs
android_id optional The published attribution link parameter table specifies this decoded character limit. Maximum decoded characters: 20. vendor.appsflyer-impression.param.android_id.invalid docs
idfa optional The link specification requires an uppercase IDFA and a40-character maximum. Device ownership and platform selection require context. Maximum decoded characters: 40. vendor.appsflyer-impression.param.idfa.empty
vendor.appsflyer-impression.param.idfa.invalid
docs
af_sub1 optional Optional subscriber parameter with the published100-character limit. Maximum decoded characters: 100. vendor.appsflyer-impression.param.af_sub1.invalid docs
af_sub2 optional Optional subscriber parameter with the published100-character limit. Maximum decoded characters: 100. vendor.appsflyer-impression.param.af_sub2.invalid docs
af_sub3 optional Optional subscriber parameter with the published100-character limit. Maximum decoded characters: 100. vendor.appsflyer-impression.param.af_sub3.invalid docs
af_sub4 optional Optional subscriber parameter with the published100-character limit. Maximum decoded characters: 100. vendor.appsflyer-impression.param.af_sub4.invalid docs
af_sub5 optional Optional subscriber parameter with the published100-character limit. Maximum decoded characters: 100. vendor.appsflyer-impression.param.af_sub5.invalid docs
af_mp optional Optional published attribution field. No closed value catalog or additional length is invented. docs
clickid optional Optional published attribution field. No closed value catalog or additional length is invented. docs
af_sub_siteid optional Optional published attribution field. No closed value catalog or additional length is invented. docs
af_ua optional Optional published attribution field. No closed value catalog or additional length is invented. docs
af_os_version optional Optional published attribution field. No closed value catalog or additional length is invented. docs
af_model optional Optional published attribution field. No closed value catalog or additional length is invented. docs
deep_link_value optional Optional published attribution field. No closed value catalog or additional length is invented. docs
imei optional Optional published attribution field. No closed value catalog or additional length is invented. docs
oaid optional Optional published attribution field. No closed value catalog or additional length is invented. docs
fire_advertising_id optional Optional published attribution field. No closed value catalog or additional length is invented. docs
af_android_store_csl optional Optional published attribution field. No closed value catalog or additional length is invented. docs
af_ios_store_cpp optional Optional published attribution field. No closed value catalog or additional length is invented. docs
af_ref optional Optional published attribution field. No closed value catalog or additional length is invented. docs
deep_link_sub1 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
deep_link_sub2 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
deep_link_sub3 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
deep_link_sub4 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
deep_link_sub5 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
deep_link_sub6 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
deep_link_sub7 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
deep_link_sub8 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
deep_link_sub9 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
deep_link_sub10 optional Optional app-defined deep-link metadata. The app selects the business semantics. docs
af_force_deeplink optional The documented URL flag uses literal true/false. Retargeting and redirect behavior depend on engagement context. vendor.appsflyer-impression.param.af_force_deeplink.empty
vendor.appsflyer-impression.param.af_force_deeplink.invalid
docs
is_incentivized optional The documented URL flag uses literal true/false. Retargeting and redirect behavior depend on engagement context. vendor.appsflyer-impression.param.is_incentivized.empty
vendor.appsflyer-impression.param.is_incentivized.invalid
docs
af_param_forwarding optional The documented URL flag uses literal true/false. Retargeting and redirect behavior depend on engagement context. vendor.appsflyer-impression.param.af_param_forwarding.empty
vendor.appsflyer-impression.param.af_param_forwarding.invalid
docs
af_base_params_forward optional The documented URL flag uses literal true/false. Retargeting and redirect behavior depend on engagement context. vendor.appsflyer-impression.param.af_base_params_forward.empty
vendor.appsflyer-impression.param.af_base_params_forward.invalid
docs
redirect optional The documented URL flag uses literal true/false. Retargeting and redirect behavior depend on engagement context. vendor.appsflyer-impression.param.redirect.empty
vendor.appsflyer-impression.param.redirect.invalid
docs
is_retargeting optional The documented URL flag uses literal true/false. Retargeting and redirect behavior depend on engagement context. vendor.appsflyer-impression.param.is_retargeting.empty
vendor.appsflyer-impression.param.is_retargeting.invalid
docs
af_cost_currency optional Optional current ISO4217 currency. USD is the vendor default, so cost values do not require an explicit currency. vendor.appsflyer-impression.param.af_cost_currency.empty
vendor.appsflyer-impression.param.af_cost_currency.invalid
docs
af_cost_value optional Only numerical digits and an optional decimal point are allowed; at most four fractional digits. vendor.appsflyer-impression.param.af_cost_value.empty
vendor.appsflyer-impression.param.af_cost_value.invalid
docs
af_media_type optional The published placement category is app or web. vendor.appsflyer-impression.param.af_media_type.empty
vendor.appsflyer-impression.param.af_media_type.invalid
docs
af_ad_format optional Published naming conventions are checked as a reporting advisory, without claiming this is a closed ingestion enum. vendor.appsflyer-impression.param.af_ad_format.empty
vendor.appsflyer-impression.param.af_ad_format.invalid
docs
af_click_lookback optional Published click window syntax. The vendor explicitly ignores this setting for impression URLs. vendor.appsflyer-impression.param.af_click_lookback.empty
vendor.appsflyer-impression.param.af_click_lookback.invalid
docs
af_reengagement_window optional The full parameter table permits1..90days,1..36hours or lifetime. Another OneLink page says hours up to23; preserve the broader documented branch and report the conflict. vendor.appsflyer-impression.param.af_reengagement_window.empty
vendor.appsflyer-impression.param.af_reengagement_window.invalid
docs
af_ip optional Optional device IP for S2S impressions. C2S applicability, X-Forwarded-For fallback and matching header require HTTP context. vendor.appsflyer-impression.param.af_ip.empty
vendor.appsflyer-impression.param.af_ip.invalid
docs
af_video_total_length optional Published numeric viewability field, in seconds or percentage. No source-unspecified duration equality or business floor is inferred. vendor.appsflyer-impression.param.af_video_total_length.empty
vendor.appsflyer-impression.param.af_video_total_length.invalid
docs
af_video_played_length optional Published numeric viewability field, in seconds or percentage. No source-unspecified duration equality or business floor is inferred. vendor.appsflyer-impression.param.af_video_played_length.empty
vendor.appsflyer-impression.param.af_video_played_length.invalid
docs
af_playable_played_length optional Published numeric viewability field, in seconds or percentage. No source-unspecified duration equality or business floor is inferred. vendor.appsflyer-impression.param.af_playable_played_length.empty
vendor.appsflyer-impression.param.af_playable_played_length.invalid
docs
af_ad_time_viewed optional Published numeric viewability field, in seconds or percentage. No source-unspecified duration equality or business floor is inferred. vendor.appsflyer-impression.param.af_ad_time_viewed.empty
vendor.appsflyer-impression.param.af_ad_time_viewed.invalid
docs
af_ad_displayed_percent optional Published numeric viewability field, in seconds or percentage. No source-unspecified duration equality or business floor is inferred. vendor.appsflyer-impression.param.af_ad_displayed_percent.empty
vendor.appsflyer-impression.param.af_ad_displayed_percent.invalid
docs
af_audio_total_length optional Published numeric viewability field, in seconds or percentage. No source-unspecified duration equality or business floor is inferred. vendor.appsflyer-impression.param.af_audio_total_length.empty
vendor.appsflyer-impression.param.af_audio_total_length.invalid
docs
af_audio_played_length optional Published numeric viewability field, in seconds or percentage. No source-unspecified duration equality or business floor is inferred. vendor.appsflyer-impression.param.af_audio_played_length.empty
vendor.appsflyer-impression.param.af_audio_played_length.invalid
docs
af_r optional Redirect targets must be full publicly accessible HTTPS URLs. Fragment identifiers are unsupported; public reachability and account allowlisting require external context. vendor.appsflyer-impression.param.af_r.empty
vendor.appsflyer-impression.param.af_r.invalid
docs
af_web_dp optional Redirect targets must be full publicly accessible HTTPS URLs. Fragment identifiers are unsupported; public reachability and account allowlisting require external context. vendor.appsflyer-impression.param.af_web_dp.empty
vendor.appsflyer-impression.param.af_web_dp.invalid
docs
af_android_url optional Redirect targets must be full publicly accessible HTTPS URLs. Fragment identifiers are unsupported; public reachability and account allowlisting require external context. vendor.appsflyer-impression.param.af_android_url.empty
vendor.appsflyer-impression.param.af_android_url.invalid
docs
af_ios_url optional Redirect targets must be full publicly accessible HTTPS URLs. Fragment identifiers are unsupported; public reachability and account allowlisting require external context. vendor.appsflyer-impression.param.af_ios_url.empty
vendor.appsflyer-impression.param.af_ios_url.invalid
docs
af_og_image optional Optional Open Graph preview image URL. vendor.appsflyer-impression.param.af_og_image.empty
vendor.appsflyer-impression.param.af_og_image.invalid
docs
af_dp optional A valid URI scheme is recommended. The application determines its default activity/base path, so custom schemes remain supported. vendor.appsflyer-impression.param.af_dp.empty
vendor.appsflyer-impression.param.af_dp.invalid
docs
idfv optional The link specification requires uppercase IDFV; no undocumented length bound is added. vendor.appsflyer-impression.param.idfv.empty
vendor.appsflyer-impression.param.idfv.invalid
docs
sha1_advertising_id optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.sha1_advertising_id.empty
vendor.appsflyer-impression.param.sha1_advertising_id.invalid
docs
sha1_android_id optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.sha1_android_id.empty
vendor.appsflyer-impression.param.sha1_android_id.invalid
docs
sha1_imei optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.sha1_imei.empty
vendor.appsflyer-impression.param.sha1_imei.invalid
docs
sha1_oaid optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.sha1_oaid.empty
vendor.appsflyer-impression.param.sha1_oaid.invalid
docs
sha1_idfa optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.sha1_idfa.empty
vendor.appsflyer-impression.param.sha1_idfa.invalid
docs
sha1_idfv optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.sha1_idfv.empty
vendor.appsflyer-impression.param.sha1_idfv.invalid
docs
sha1_mac optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.sha1_mac.empty
vendor.appsflyer-impression.param.sha1_mac.invalid
docs
md5_advertising_id optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.md5_advertising_id.empty
vendor.appsflyer-impression.param.md5_advertising_id.invalid
docs
md5_android_id optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.md5_android_id.empty
vendor.appsflyer-impression.param.md5_android_id.invalid
docs
md5_imei optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.md5_imei.empty
vendor.appsflyer-impression.param.md5_imei.invalid
docs
md5_oaid optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.md5_oaid.empty
vendor.appsflyer-impression.param.md5_oaid.invalid
docs
md5_idfa optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.md5_idfa.empty
vendor.appsflyer-impression.param.md5_idfa.invalid
docs
md5_idfv optional Published hashed identifier. The digest must contain the exact hexadecimal width of its named algorithm. Original source normalization and network support are external. vendor.appsflyer-impression.param.md5_idfv.empty
vendor.appsflyer-impression.param.md5_idfv.invalid
docs
sha1_el optional Published SHA1 email identifier for desktop-to-mobile attribution. vendor.appsflyer-impression.param.sha1_el.empty
vendor.appsflyer-impression.param.sha1_el.invalid
docs
mac optional Published device MAC field. Source gives no normalization spelling, so no guessed separator format is enforced. docs
af_os deprecated Deprecated but still supported, so presence is an advisory rather than a rejection. vendor.appsflyer-impression.param.af_os.deprecated docs
af_ios_fallback deprecated Deprecated but still supported, so presence is an advisory rather than a rejection. vendor.appsflyer-impression.param.af_ios_fallback.deprecated docs
https_required required AppsFlyer accepts only HTTPS incoming engagement traffic. vendor.appsflyer-impression.https_required docs
url_length required The complete attribution URL must not exceed2000 characters. vendor.appsflyer-impression.url_length docs
pid_legal_characters required These PID characters prevent attribution and deep linking. vendor.appsflyer-impression.pid_legal_characters docs
campaign_edge_whitespace recommended Campaign names should not begin or end with whitespace because reporting may disagree. vendor.appsflyer-impression.campaign_edge_whitespace docs
partner_site_id recommended Ad-network links should carry the publisher site ID. Custom owned-media impression examples omit it. vendor.appsflyer-impression.partner_site_id docs
method required Complete HTTP capture contract. Native JSON type: string. vendor.appsflyer-impression.http.method.missing
vendor.appsflyer-impression.http.method.empty
vendor.appsflyer-impression.http.method.invalid
docs
query.af_ua optional Complete HTTP capture contract. Native JSON type: string. vendor.appsflyer-impression.http.query.af_ua.invalid docs
headers.user-agent optional Complete HTTP capture contract. Native JSON type: string. vendor.appsflyer-impression.http.headers.user-agent.invalid docs
http.user_agent_header required S2S af_ua is sent both as URL parameter and HTTP User-Agent header. Complete HTTP capture contract. vendor.appsflyer-impression.http.user_agent_header docs
http.user_agent_agreement required AppsFlyer requires identical user-agent values in the S2S URL and header. Complete HTTP capture contract. vendor.appsflyer-impression.http.user_agent_agreement docs

Validate a payload

pixellint validate url "$ARTIFACT" --rulepack vendor/appsflyer-impression

Or paste it into the playground. Same engine, in the browser, nothing sent anywhere.

cargo install pixellint · npm install pixellint