Developers

SDKs that send nothing before you say start

Consent-first SDKs for Android, iOS, Web, React Native and Flutter, with signed requests, a persisted queue and the same behaviour on every platform. Plus APIs for everything the dashboard does.

Pick your platform

Default endpoint: https://sdk.appvero.ai

Android SDK

Kotlin

  • Kotlin, usable from Java
  • minSdk 21
  • Works in apps on Kotlin 1.9 or newer
  • One runtime dependency (Play Install Referrer)
  1. 1 Add the dependency
  2. 2 Start the SDK early, with listeners set first
  3. 3 Track events and purchases
1 · app/build.gradle.ktsKotlin
dependencies {
    implementation("io.appvero:appvero-android:0.1.0")
    // Optional: lets the SDK read the Google Advertising ID and App Set ID.
    implementation("com.google.android.gms:play-services-ads-identifier:18.3.0")
    implementation("com.google.android.gms:play-services-appset:16.1.0")
}
2 · App.ktKotlin
class App : Application() {
    override fun onCreate() {
        super.onCreate()
        AppVero.setAttributionListener { attribution ->
            Log.i("App", "attribution ${attribution.status} ${attribution.mediaSource} ${attribution.campaign}")
        }
        AppVero.setDeepLinkListener { deepLink ->
            if (deepLink?.value == "product/123") openProduct(deepLink.params["product_id"])
        }
        AppVero.start(
            this,
            AppVeroConfig(
                appId = "app_7f3k9q2m",
                sdkSecretId = "ss_4hd82kq0",
                sdkSecret = BuildConfig.APPVERO_SDK_SECRET,
            ),
        )
    }
}
3 · EventsKotlin
AppVero.trackEvent("av_add_to_cart", mapOf("sku" to "A1", "qty" to 2))
AppVero.trackEvent("av_subscribe", mapOf("plan" to "monthly"), revenue = 9.99, currency = "USD")
Same behaviour everywhere

One contract, five SDKs

Every SDK — and every wrapper — follows the same protocol, so your app behaves the same on Android, iOS and cross-platform frameworks.

CallBehaviour
Before start()Nothing is sent. Calls made earlier are buffered and replayed after start.
stop()Stops sending for this process; the persisted queue and install ID are kept and resume on the next start.
setEnabled(false)Opt-out: stops sending, wipes the persisted queue, survives restarts. The install ID is kept.
Install IDAvailable even before start (null only before the very first start).
Attribution callbackFires when the install response arrives, and again on every later start with the persisted attribution.
Deferred deep linkDelivered at most once per install — or null after the timeout (default 5 s).
resolveLink(url)Resolves AppVero links (and unwraps email click-tracking links); non-AppVero URLs return their own parameters.
ErrorsStructured: the server’s error code (e.g. sig_invalid) and HTTP status, not only a message.
  • Persisted queue

    Up to 1,000 requests survive app kills. The install request is never dropped and always goes first.

  • Retries with backoff

    1 s, 2 s, 4 s … up to 10 minutes with jitter; 429s honour Retry-After.

  • Signed requests

    HMAC-SHA256 over method, path, timestamp and body hash, with clock-skew correction.

  • Batched & compressed

    Events in batches of up to 100; bodies of 1 KB or more are gzip-compressed.

API overview

Everything the dashboard does, over HTTPS

JSON in and out at https://api.appvero.ai. Errors use one shape: {"error": {"code": "…", "message": "…"}}.

  • adminEverything
  • readGET only — for BI and reporting
  • s2sOnly the S2S events API
Partner integration guide
AuthenticationShell
curl https://api.appvero.ai/v1/apps \
  -H "Authorization: Bearer avk_<id>_<secret>"
ResourcePathsWhat it does
Apps & SDK secrets/v1/apps, /v1/apps/{app_id}/sdk-secretsCreate apps, attribution windows, fraud settings; rotate SDK secrets.
Domains/v1/domainsVendor subdomains, custom domains (CNAME verification), email click domains, aliases.
Links/v1/apps/{app_id}/links, /links/bulk, /links/import, /templatesShort links, up to 1,000 per bulk request, imports, templates, QR as PNG/SVG.
Partners/v1/apps/{app_id}/partnersPostback templates, event mapping, revenue inclusion.
Webhooks/v1/apps/{app_id}/webhooksReal-time signed callbacks; test deliveries; delivery log.
Exports/v1/apps/{app_id}/exportsS3, GCS, BigQuery, Snowflake destinations; runs and SLA.
SKAN & web/skan-schema, /web-configConversion-value schema (versioned) and smart-banner config.
Reports/v1/apps/{app_id}/reports/…Aggregate, cohort, owned channels, SKAN, fraud, web-to-app, DDL — JSON, CSV, Parquet.
Raw pull/v1/apps/{app_id}/raw/{table}Up to 7 days of installs, events, clicks or SKAN postbacks.
S2S events/v1/s2s/eventsServer-side events with an s2s-scoped key.
Aggregate report as ParquetShell
curl "https://api.appvero.ai/v1/apps/app_7f3k9q2m/reports/aggregate?\
from=2026-10-01&to=2026-10-07&group_by=media_source,campaign&\
metrics=installs,non_organic_installs,revenue,validated_revenue&format=parquet" \
  -H "Authorization: Bearer avk_<id>_<secret>" -o installs.parquet

Need an SDK walkthrough?

We’ll pair with your engineers on the first integration — Android, iOS, web or cross-platform — and verify signed traffic end to end.