AppsFlyer (iOS)

Datafly Signal sends in-app events from your iOS app to AppsFlyer’s server-to-server in-app events API, with the AppsFlyer ID, IDFA, IDFV, ATT status, event time and AppsFlyer predefined event names.

Prerequisites

Find your app ID and dev key

In AppsFlyer, the app ID is the App Store ID with the id prefix (for example id123456789). Without the prefix AppsFlyer answers 200 OK but does not record the event. The dev key is under App settings.

Pass the AppsFlyer ID from the app

Read the AppsFlyer ID from the AppsFlyer SDK and pass it to Signal with setCollectedId("appsflyer_id", ...). AppsFlyer requires it on every event.

Configure in Signal

Configuration Fields

FieldRequiredDescription
app_idYesThe App Store app ID with the id prefix, exactly as in the AppsFlyer dashboard, for example id123456789. Without the id prefix AppsFlyer answers 200 OK but does not record the event.
dev_keyYesYour AppsFlyer dev key, found in the AppsFlyer dashboard under App Settings. Sent as the ‘authentication’ request header for server-to-server event calls.
api_tokenNoOptional AppsFlyer V2 API token. Not currently used by the S2S in-app event delivery (which authenticates via the dev key); reserved for future Pull/Reporting API support.
apple_app_idNoOptional numeric Apple App ID from App Store Connect. Not consumed by the in-app event delivery endpoint; informational for SKAdNetwork setup.
bundle_idNoThe iOS bundle identifier, sent as bundleIdentifier on every event. AppsFlyer recommends always setting it: many ad networks need it for campaign optimisation.

Management UI Setup

  1. Go to Integrations > Add Integration > AppsFlyer (iOS).
  2. Choose a preset: Default (default), Retail (ecommerce), Travel (travel), Media (media), Insurance (insurance).
  3. Fill in the fields above and click Save.

Request format

A purchase:

POST https://api2.appsflyer.com/inappevent/id123456789
{"appsflyer_id":"1234567890123-1234567","att":3,"bundleIdentifier":"com.example.shop","consent_data":{"manual":{"ad_personalization_enabled":true,"ad_user_data_enabled":true,"gdpr_applies":true}},"customer_user_id":"crm-user-9","email_hashed":"86e0b9e56c17cc4d12387e1949b85053fbe73bc3ce5a1188713a9d300cc6133d","eventCurrency":"GBP","eventName":"af_purchase","eventTime":"2025-09-22 00:13:20.123","eventValue":"{\"af_content_id\":[\"SKU_1\",\"SKU_2\"],\"af_currency\":\"GBP\",\"af_order_id\":\"ORD-1001\",\"af_price\":[120,19.99],\"af_quantity\":[2,1],\"af_revenue\":259.99}","idfa":"29DDE430-CE81-4F00-A50C-689595AAD142","idfv":"59E27F41-A86B-4560-B585-63161F871C4B","ip":"203.0.113.9","os":"17.5.1","phone_number_e164_hashed":"9e1919ad78a34fd67a84bfbcf2fea14074065517bea32e92924771c3f92e5462"}

eventValue is a JSON-encoded string, as AppsFlyer requires; an event with no values sends "".

Event Mapping

Signal eventVendor eventPresets
sign_upaf_complete_registrationDefault, Retail, Travel, Media, Insurance
loginaf_loginDefault, Retail, Travel, Media, Insurance
view_itemaf_content_viewDefault, Retail, Travel, Insurance
searchaf_searchDefault, Retail, Travel, Media
add_to_cartaf_add_to_cartDefault, Retail
begin_checkoutaf_initiated_checkoutDefault, Retail, Travel, Insurance
purchaseaf_purchaseDefault, Retail, Insurance
generate_leadgenerate_leadDefault, Insurance
trial_startedaf_start_trialDefault, Media
subscription_startedaf_subscribeDefault, Media
view_item_listaf_list_viewRetail
add_to_wishlistaf_add_to_wishlistRetail
add_payment_infoaf_add_payment_infoRetail
purchaseaf_travel_bookingTravel
booking_completedaf_travel_bookingTravel
content_viewedaf_content_viewMedia
quote_completedquote_completedInsurance

Identity

appsflyer_id is required; iOS events without it (and all web and Android events) are not sent. Signal also sends idfa and idfv (upper-cased), customer_user_id (your user ID), the IP address, and the email and phone as SHA-256 hashes (email_hashed, phone_number_e164_hashed, phone in E.164 first). No plaintext personal data is sent.

AppsFlyer’s consent_data.manual object carries gdpr_applies (EEA and UK visitors, from geo), ad_user_data_enabled and ad_personalization_enabled (from marketing consent). Assign a consent category to the integration in Signal to gate delivery altogether.

Troubleshooting

ProblemSolution
Events accepted but not in AppsFlyerCheck the app ID carries the id prefix.
No events arriveCheck the app passes appsflyer_id with setCollectedId.
AppsFlyer API 3Signal uses the api2 host with the dev key. API 3 (api3 host, S2S token) is planned.

Blueprint

The AppsFlyer (iOS) blueprint version is 0.7.0. It was last reviewed against the vendor’s documentation on 2026-09-23.

See also