SKAdNetwork

Ingesting SKAdNetwork 2.2–4 postbacks, conversion-value schemas and how SKAN installs show up next to deterministic attribution.

Updated 2026-09-02

Endpoint#

HTTP
POST https://app.whichclick.is/api/skan/postback?org=<organization id>
Content-Type: application/json

Point Apple's NSAdvertisingAttributionReportEndpoint (in your app's Info.plist) at your WhichClick domain, or have your ad network forward copies. Postback versions 2.2, 3.0 and 4.0 are accepted; the attribution-signature is verified when Apple's public key is configured for the app.

SKAN 4 postback
{ "version": "4.0", "ad-network-id": "example123.skadnetwork", "source-identifier": "1234", "app-id": 123456789, "transaction-id": "6aafb7a5-…", "redownload": false, "fidelity-type": 1, "did-win": true, "conversion-value": 42, "coarse-conversion-value": "high", "postback-sequence-index": 0, "attribution-signature": "MEUCIQ…" }

Conversion-value schema#

Each app has an optional skanSchema mapping the 6-bit fine value and coarse value back to events and revenue buckets:

skanSchema
{ "fine": { "bits": [ { "range": [0, 2], "event": "level_complete", "type": "count" }, { "range": [3, 5], "event": "purchase", "type": "revenue", "buckets": [0, 5, 20, 50, 100, 250, 500, 1000] } ] },
  "coarse": { "low": "session", "medium": "trial_start", "high": "purchase" } }

The SDK exposes updateConversionValue(fine:coarse:lock:) helpers that implement this schema client-side.

Reporting#

SKAN postbacks appear as installs with method SKAN and no device; they are reported at campaign / source-identifier level and are not double-counted against deterministic installs for the same campaign inside the SKAN window. Sequence index 1 and 2 postbacks update the same record.

Privacy#

No device identifiers are included in SKAN postbacks; WhichClick stores them as received plus the organization and app they resolve to.