SDK data collection and privacy

Version 1.0 · Effective from 14 October 2026

This page is for app developers who use Voidhash ("Customer", "you"). It explains what the Voidhash SDKs collect from the people who use your app or website ("End Users"), what they store on the End User's device, what Voidhash adds on its servers, and how you can control it. It also tells you how to answer Apple's App Store privacy questions and Google Play's Data safety form, and gives you a paragraph you can adapt for your own privacy policy.

The page describes the current versions of the iOS (Swift), Android (Kotlin), React Native and web (JavaScript) SDKs. A Czech version of this page is also available; both versions have the same content and numbering.

This page is information, not legal advice. You know what your app does and which other SDKs it contains, so you are responsible for your own disclosures and consents.

1. Who is responsible for the data

1.1 You are the controller. You decide whether to use Voidhash in your app, what you send to it and why. The obligations of a controller under the GDPR and similar laws (informing End Users, having a legal basis, obtaining consents where required, answering requests) are yours.

1.2 Voidhash is your processor. Voidhash s.r.o., IČO 23738944, Chudenická 1059/30, 102 00 Praha 10, Czech Republic ("Voidhash", "we") processes End User data only on your behalf and on your instructions, under the Data Processing Addendum at voidhash.com/legal/dpa ("DPA"). Our subprocessors are listed at voidhash.com/legal/subprocessors.

1.3 Integrations you set up with your own credentials (Apple App Store Server API, Google Play Developer API and Pub/Sub, your Stripe account, APNs, Firebase Cloud Messaging, your webhook endpoints) are disclosures you instruct us to make. Those recipients are not our subprocessors; your relationship with them is governed by your own agreements.

1.4 We do not sell End User data, do not use it for advertising, and do not combine it with data from other customers to build profiles of End Users. As documented in the DPA, we may create anonymised, aggregated statistics that identify neither you nor any End User.

2. What the SDKs collect

2.1 The tables below list every field the client SDKs send. "Automatic" means the SDK sends it without you writing code for it once the SDK is configured. "Only if you provide it" means the SDK sends it only when your code (or a paywall you configured) passes it. "Server-derived" means the SDK does not send it; Voidhash records it when a request arrives. The React Native SDK runs on the iOS and Android SDK cores, so it collects the same fields as the native SDK of the platform it runs on.

2.2 Server libraries (Node, Go, PHP, Rust and others) and the REST API send only what your backend passes to them.

2.3 Identifiers

FieldiOSAndroidRNWebSourcePurpose
Anonymous ID (vh:anon: followed by a random UUID), created on first launch for each app install or browser profile✓✓✓✓AutomaticRecognise the same install across launches; attach purchases, access and events to it before sign-in
Your user ID (the "distinct ID" you pass to identify or the distinctId option)✓✓✓✓Only if you provide itLink the install to your account system so purchases and access follow the user across devices
Previous anonymous ID, sent once when you identify a user✓✓✓✓Automatic after identifyMerge the anonymous history into the identified person
Session ID (random UUID; a new one after 30 minutes without events)✓✓✓Only if you pass itAutomatic (mobile)Group events into sessions for analytics
Event ID (random UUID per event)✓✓✓✓AutomaticDeduplicate events that are retried
Account token: a UUID derived from the distinct ID (UUIDv5), given to the store as Apple appAccountToken or Google Play obfuscatedAccountId✓✓✓–Automatic for purchases the SDK startsAttribute a store purchase to the right person, including when the store reports it later

The SDKs do not read the IDFA, IDFV, Google Advertising ID, Android ID or any hardware identifier (section 4).

2.4 Device and app context (mobile SDKs)

Sent automatically with every event and, as request headers, with every API request.

FieldExamplePurpose
App name, version, build and bundle ID / package nameMyApp, 2.3.0, 412, com.example.appProduct analytics by release; detecting installs and updates; matching the app configuration
Platform and OS versionios, 18.1Compatibility, analytics
Device brand and modelApple / iPhone15,2; samsung / SM-S911BCompatibility, analytics
Locale and preferred localescs-CZ, cs-CZ,en-USLocalising paywalls and prices; analytics
Time zoneEurope/PragueAnalytics in local time
SDK name and versionios, 0.xSupport and compatibility
Environment and build flagsproduction, debug build, observer mode, app in backgroundSeparating test data from live data; SDK behaviour

2.5 Page context (web SDK)

Sent automatically with every event the web SDK sends.

FieldPurpose
Page titleAnalytics
URL origin and path of the current page (no query string or fragment)Analytics
Referrer origin and path (no query string or fragment)Analytics (traffic sources)
Screen size and viewport sizeAnalytics, layout
Browser language and preferred languages, time zoneLocalisation, analytics
Browser user agent string and navigator.platform (sent as request headers)Compatibility, analytics
SDK name and version, production environmentSupport

The web SDK sets no cookies. It does not capture page views or other events automatically; it sends only the events your code tracks (including page() calls).

2.6 Events

EventiOSAndroidRNWebSourceWhat it records
$app_installed, $app_updated✓✓✓–Automatic, can be turned off (section 5)First launch of an install; launch of a new app version
$app_opened, $app_backgrounded, $app_became_active✓✓✓–Automatic, can be turned offApp launches and foreground/background changes
$sign_out✓✓✓–Automatic when you call reset() / signOut()The identity was cleared
$screen with screen name, path, title, previous screen and time spent on it, integration source✓✓✓–Automatic, can be turned off or filteredWhich screens are used, in what order
$screen_params (route parameters, at most 20)✓✓✓–Only if you turn on includeParamsScreen context. Off by default because parameters often contain IDs or tokens
Paywall and flow events and screens, with placement, paywall ID, release and screen index✓✓✓–When a paywall you designed is shown, according to its designPaywall performance, experiments
Your custom events and their properties (capture, track, page)✓✓✓✓Only if you provide itWhatever you decide; you define the content
Revenue events (purchase, renewal, refund, cancellation)––––Created by Voidhash from store data (section 2.8)Revenue analytics

2.7 Data you or your paywalls provide

DataHow it reaches VoidhashNotes
Email address and nameidentify(…, email:, name:), setPersonAttributesOptional. Voidhash works without them; see section 5.5
Person attributes ("traits")setPersonAttributes, identify traits, or a paywall allowed to set attributesFree-form. Do not send special categories of data, payment card numbers or government IDs
Answers End Users enter in a paywall or flow (for example a survey or a form)Only if your flow design captures them and you granted the flow the attributes capability, or the flow sends them as event propertiesYou design what is asked
Push notification token, platform, provider and bundle IDOnly if your app registers the device for push notifications through VoidhashUsed to send the notifications you create
Permission results (notifications, App Tracking Transparency)A flow may ask the operating system for these only if you granted the notifications or tracking capabilityThe answer is passed back to the flow. The SDK never reads the IDFA

2.8 Purchases

DataSourcePurpose
App Store signed transactions (JWS), transaction and original transaction IDs, product ID, purchase date, quantityiOS and RN SDKs (automatic, for transactions StoreKit reports to the app), and Apple's servers through your App Store Server API credentialsValidate purchases, grant and revoke access, restore purchases
Google Play purchase tokens, order IDs, product ID, purchase date, quantityAndroid and RN SDKs (automatic) and Google Play through your credentialsSame as above
Prices, currency, storefront country, offers, tax and store commission, renewal and expiry dates, subscription status, refunds and revocationsApple, Google Play and Stripe, through the credentials you configureEntitlements, subscription status, revenue reporting
Stripe customer and payment dataYour Stripe account, through the credentials you configureWeb purchases. Card numbers never reach Voidhash

Purchase data is linked to the person and kept as long as you keep the project, because it is needed to account for subscriptions that are still active (see section 6).

2.9 Server-derived data

When a request from an SDK reaches Voidhash, the following is recorded with each analytics event:

DataHowPurpose
IP address (full)From the connection, as reported by our edge network (Cloudflare)Deriving approximate location; security, fraud and abuse prevention; identity resolution (see below)
User agentFrom the request headerCompatibility, analytics
Approximate location: country, region, city, time zoneDerived from the IP address by Cloudflare. Not GPS and not the device's location servicesAnalytics, localisation, paywall targeting
Time receivedServer clockOrdering and auditing of events

The full IP address is received with every request from the SDKs and the API and is stored with events. It is a deliberate part of the Service and is used to:

  • (a) derive the approximate location (country, region, city, time zone) shown in the table above;
  • (b) protect the Service, you and your End Users against security threats, fraud (for example receipt or entitlement abuse) and other abuse;
  • (c) where offered, recognise the same End User across your own apps and websites (identity resolution), for example to recognise that a person who bought on your website is the same person who later opens your app. This works only within your own projects; Voidhash never links End Users across different customers.

If your app or website uses Voidhash, describe these uses, including (c), in your own privacy notice (see the template in section 10).

3. What is stored on the End User's device

3.1 The SDKs keep a small amount of state on the device so that purchases are not lost when the app is killed or offline, access can be checked without a network round trip, and events are delivered later. All of it is stored inside your app's own sandbox (mobile) or your website's origin (web). No other app or website can read it, and none of it is shared with other apps.

3.2 Keys are prefixed with a namespace, written below as <ns>, of the form vh:1:<hash>:, where <hash> is derived from your publishable key and the API address. Files use the same hash.

3.3 Placing information on a device, or reading it, can require the End User's consent under the ePrivacy Directive (Art. 5(3)) and national laws implementing it, such as § 89(3) of Czech Act No. 127/2005 Coll., on electronic communications. Consent is not required for storage that is strictly necessary to provide a service the End User has explicitly requested. The "Category" column is our suggestion to help your assessment:

  • Necessary (purchases): needed to deliver purchases, restores and access the End User paid for, or to show a paywall the End User opened.
  • Analytics: needed only for usage analytics (section 5.1). Depending on your jurisdiction and assessment, this may require consent.

3.4 iOS (and React Native on iOS)

Mechanism: UserDefaults (the app's standard defaults) for key-value entries; files in the app's Application Support and Caches directories. The SDK does not use the Keychain, so its data is removed when the app is deleted.

Key or fileMechanismPurposeLifetimeCategory
<ns>distinctIdUserDefaultsCurrent anonymous ID or your user IDUntil reset(), sign-in as another user, or app deletionNecessary (purchases); also used for analytics
<ns>person:<id>, <ns>person-none:<id>UserDefaultsCached person: access (entitlements), subscriptions, purchase history, email and name if setRefreshed in use; treated as expired after 2 days; removed by reset()Necessary (purchases)
<ns>processed-transaction:…, <ns>transaction-identity:…, <ns>restored-transaction-identity:…UserDefaultsWhich store transactions were already reported and for whom30 minutes (processing state), 30 days (restored identity)Necessary (purchases)
Application Support/voidhash/<hash>/transaction-outbox.ndjson, accepted-receipts.ndjsonFileStore transactions waiting to be delivered; receipts already acceptedUntil delivered; small bounded historyNecessary (purchases)
Application Support/voidhash/<hash>/person-writes.ndjsonFileidentify calls and person attributes waiting to be deliveredUntil deliveredNecessary when used for sign-in; analytics for attributes
<ns>schema:currentUserDefaultsYour project's product and paywall configurationUntil replaced by a newer versionNecessary (purchases)
<ns>paywall:…, <ns>paywall:placements, Caches/… flow packagesUserDefaults; Caches directoryPaywalls already resolved for this person; recently used placements; downloaded paywall designs7 days (resolved paywalls); up to 20 placements; cache may be cleared by the systemNecessary when the End User opens a paywall
<ns>flow-state:<id>:…UserDefaultsProgress and answers inside a multi-step flow, so it can resume90 days; removed by reset()Necessary for the flow the End User started
<ns>flags:<id>:…UserDefaultsFeature flag and experiment assignmentsRefreshed after 5 minutes; removed by reset()Functional; experiments may be analytics
Application Support/voidhash/<hash>/analytics-queue.ndjsonFileEvents waiting to be sent (at most 1,000)Until sentAnalytics
<ns>voidhash:analytics:sessionUserDefaultsCurrent session ID and time of last eventReplaced after 30 minutes of inactivityAnalytics
<ns>voidhash:analytics:last-seen-app-releaseUserDefaultsApp version and build seen last, to detect installs and updatesUntil app deletionAnalytics
<ns>cache-keys, <ns>migrated-from:voidhashUserDefaultsIndex of the entries above; one-time migration markerUntil app deletionTechnical, follows the entries above

3.5 Android (and React Native on Android)

Mechanism: a private SharedPreferences file named com.voidhash.sdk.cache for key-value entries; files in the app's private files and cache directories. The SDK does not use DataStore or external storage.

Key or fileMechanismPurposeLifetimeCategory
<ns>distinctIdSharedPreferencesAs on iOSAs on iOSNecessary (purchases); also analytics
<ns>person:<id>, <ns>processed-transaction:…, <ns>transaction-identity:…, <ns>restored-transaction-identity:…, <ns>schema:current, <ns>paywall:…, <ns>flow-state:…, <ns>flags:…SharedPreferencesAs on iOSAs on iOSAs on iOS
files/voidhash/vh-1-<hash>-transactions.ndjson, …-accepted-receipts.ndjsonFileStore purchases waiting to be delivered; receipts already acceptedUntil delivered; small bounded historyNecessary (purchases)
files/voidhash/vh-1-<hash>-person-writes.ndjsonFileidentify calls and attributes waiting to be deliveredUntil deliveredAs on iOS
files/voidhash/vh-1-<hash>-analytics.ndjsonFileEvents waiting to be sentUntil sentAnalytics
cache/voidhash-paywall-packages/FileDownloaded paywall designsCache; may be cleared by the systemNecessary when the End User opens a paywall
<ns>voidhash:analytics:sessionSharedPreferencesSession ID30 minutes of inactivityAnalytics
<ns>voidhash:analytics:last-seen-app-releaseSharedPreferencesLast app version, build and install time seen (the install time stays on the device), to detect installs, updates and restores from backupUntil app data is clearedAnalytics

If your app uses Android Auto Backup, these entries can be included in the user's backup. The SDK detects a restore onto a new install and starts a new session.

3.6 Web

Mechanism: localStorage of your website's origin, with an in-memory fallback when storage is unavailable. The web SDK sets no cookies and does not use IndexedDB or sessionStorage. To coordinate open tabs, it uses the browser's Web Locks API, which stores nothing.

KeyPurposeLifetimeCategory
<ns>:identity:distinct-idAnonymous ID or your user IDUntil reset() or the visitor clears site dataAnalytics; necessary only if you use it for purchases or access
<ns>:identity:traits:<id>Traits you passed to identify, including email or name if you included themUntil reset() or clearing site dataAs above
<ns>:feature-flags:<id>:…Feature flag and experiment assignmentsRefreshed after the configured time (default 5 minutes)Functional; experiments may be analytics
<ns>:analytics:queue:<tab>, <ns>:analytics:owner:<tab>Events waiting to be sent; which tab owns the queueUntil sent; owner entry while the tab is openAnalytics
<ns>:__keys__Index of the entries aboveUntil clearing site dataTechnical

If you need consent for analytics on your website, do not initialise the web SDK until the visitor has consented (section 5.2).

4. What the SDKs do not collect

4.1 The SDKs do not read or send:

  • advertising identifiers (Apple IDFA, Google Advertising ID), the Apple IDFV, the Android ID, or hardware identifiers such as IMEI, serial number or MAC address;
  • precise location (GPS or the device's location services); location is approximate and comes only from the IP address (section 2.9);
  • contacts, photos, files, calendars, messages, health or fitness data, or browsing history outside your own website;
  • crash logs or performance diagnostics. SDK diagnostics are delivered only to your app through the onDiagnostic and onWarning callbacks and are not sent to Voidhash;
  • payment card numbers. Card payments are handled by Apple, Google or Stripe.

4.2 The SDKs do not track End Users across apps or websites owned by other companies. A paywall can show Apple's App Tracking Transparency prompt only if you allow it (section 5.7); the SDK does not read the IDFA even when the End User allows tracking. Identity resolution based on the IP address (section 2.9) links activity only within your own apps and websites.

4.3 The SDKs request only the INTERNET and ACCESS_NETWORK_STATE permissions on Android. A paywall can ask for notification permission only if you grant it that capability.

5.1 Consent: our position. Voidhash distinguishes three kinds of processing:

  • Purchases. Validating receipts and transactions, restoring purchases and granting access (entitlements), together with the identifiers and on-device storage they need (marked "Necessary (purchases)" in section 3), are part of the service the End User asked for when buying in your app. They are strictly necessary and run without consent.
  • Revenue analytics. Revenue, MRR, subscription and refund reports are calculated on Voidhash's servers from the purchase transactions already processed for validation. They need no additional on-device storage or event collection, so they keep working whether or not an End User has consented to analytics. As the controller, you need your own legal basis for them, typically your legitimate interest in understanding your business or your legal obligations in accounting.
  • Usage analytics. Automatic events (such as app opens and screen views), your custom events, paywall impressions and interactions, and person traits, together with the storage marked "Analytics" in section 3. Depending on the jurisdiction and how you use them, they may require the End User's consent under ePrivacy rules (in the Czech Republic, § 89(3) of Act No. 127/2005 Coll., on electronic communications). Deciding whether consent is needed, obtaining it and passing the result to the SDK is your responsibility.

If usage analytics is off for some End Users, metrics that rely on impressions, such as paywall conversion rates, are calculated only from End Users for whom usage analytics is on and may be incomplete. Revenue totals are not affected.

5.2 Start the SDK only after consent. Today the SDKs offer an all-or-nothing switch. On iOS, Android and React Native, configure the client with enabled: false until you have the End User's consent (or another legal basis). A disabled client makes no network requests and reads and writes nothing on the device. To enable it later, configure it again with enabled: true (on React Native, create a new client). On the web, call initialize() only after consent; nothing is stored before it is called.

Important: A disabled client also disables purchases, restores and access checks through Voidhash. To keep purchases running for End Users who decline usage analytics, leave the SDK enabled, turn off automatic events (section 5.3) and do not send custom events or traits for them. The anonymous ID, session ID and analytics queue are still used in that case.

5.3 Turn off automatic events.

SDKLifecycle events ($app_*, $sign_out)Screen events ($screen)
iOSVoidhashOptions(automaticLifecycleEvents: false)screenTracking: ScreenTrackingOptions(automatic: false); screens you report yourself are still captured
AndroidVoidhashOptions(automaticLifecycleEvents = false)screenTracking = ScreenTrackingOptions(automatic = false)
React NativeNo option to turn them offscreenTracking: { enabled: false } turns off all screen events
WebNone are captured automaticallyNone are captured automatically

On the web, analytics: { enabled: false } stops the background sending of the analytics queue. Events your code passes to track() are still queued on the device and can still be sent. If you do not want events, do not call track() or page().

5.4 Limit what screens reveal. Leave includeParams off (the default) and use mapScreen to rename or drop screens whose names or paths contain personal data. Return null (nil in Swift) to skip a screen.

5.5 Minimise identity data. Use a random or internal user ID as the distinct ID, not an email address or phone number. Pass email and name only if you need them in Voidhash. Do not put special categories of data (health, religion, sexual orientation and similar), payment card numbers, government IDs or passwords into attributes, traits or event properties.

5.6 Sign-out. reset() (also signOut()) clears the stored identity, cached person, flags, paywall assignments and flow progress, and starts a new anonymous ID and session. It keeps the project configuration and the install marker, and lets queued events of the previous identity be delivered. It does not delete data already held by Voidhash; use erasure (section 6) for that. The SDKs have no single call that removes all of their data from the device; deleting the app or clearing its data (or, on the web, clearing site data) does.

5.7 Paywall capabilities. By default a paywall may only open links. It can ask for notification or tracking permission, or set person attributes, only if you add notifications, tracking or attributes to flowCapabilities.

5.8 Server-side. In Studio you can view, and delete, each person and their events. Retention of analytics data follows your plan (section 6).

6. Retention and erasure

6.1 Retention. How long End User data is kept depends on your plan's retention period ("Retention Period"): Free 3 years, Grow 5 years, Enterprise as agreed in the Order Form.

  • Event-level analytics data (events, sessions, screen views, custom events and their properties, including IP address and location) is kept for at least the Retention Period, counted from when each event occurred. After that, Voidhash may delete it or replace it with aggregated statistics that no longer identify End Users. We are not obliged to keep it longer.
  • Aggregated reports (revenue, MRR, conversion, retention and cohort charts) remain available for the life of your account.
  • Purchases, transactions, subscriptions and entitlements are kept for the life of your account, because access decisions and revenue history depend on them, unless you erase the End User (section 6.2) or close your account.
  • Persons with no activity for longer than the Retention Period may be deleted.
  • Before we first delete data of a project under this section, we notify you at least 30 days in advance, so that you can export it. If you move to a plan with a shorter Retention Period, the new period applies, with the same notice.
  • You can erase End Users at any time (section 6.2). Enterprise customers may agree a shorter Retention Period.
  • When your account ends, the retrieval and deletion rules for the end of the contract in the Terms and the DPA apply instead.

6.2 Erasure of an End User. When an End User asks you to delete their data, erase them in Studio (People → the person → Delete person data) or call POST /api/v1/persons/erasures from your backend with a secret key. The erasure covers the person and every profile merged into them. It deletes their name, email, traits, all distinct IDs, events (including IP address, user agent and location), devices registered for push notifications, cohort memberships, unfinished checkouts, feature flag targeting that names them, and their identifiers in webhook delivery history, stored store payloads and push notification content. A second pass a day later removes events that arrived late from offline devices. Voidhash then sends the person.deleted webhook. See the documentation article "Delete a person's data".

6.3 What is kept. Purchases, subscriptions, granted access and revenue events are kept, attached to an anonymous person ID and without personal properties, so that active subscriptions keep working and your revenue reports do not change. Store transaction IDs are kept because they identify the purchase, not the person.

6.4 On the device. Data the SDK stores locally is deleted when the End User deletes the app or clears its data (mobile), or clears site data (web). Erasure in Voidhash does not reach the device; if the app continues to send events under the same distinct ID, they create a new, empty person.

6.5 Technical logs that can contain IP addresses and identifiers are kept for 30 days.

7. App Store privacy details (Apple)

7.1 In App Store Connect, under App Privacy, declare the data below for Voidhash in addition to your own and other SDKs' data. Apple asks about the data your app collects, including through third-party SDKs.

Apple data typeDeclare whenLinked to the userUsed for trackingPurposes to select
Purchases → Purchase HistoryAlways, when you use purchases or entitlementsYesNoApp Functionality, Analytics
Identifiers → User IDWhen you call identify or set distinctId with your own user IDYesNoApp Functionality, Analytics
Identifiers → Device IDAlways (the anonymous install ID)YesNoApp Functionality, Analytics
Usage Data → Product InteractionUnless you have turned off all automatic events and send no eventsYesNoAnalytics (add App Functionality if you use events for paywall targeting or experiments)
Location → Coarse LocationAlways: Voidhash derives country, region and city from the IP addressYesNoAnalytics, App Functionality
Contact Info → Email Address / NameOnly if you pass them to identify or as attributesYesNoApp Functionality (and the purposes you use them for)
Other types (for example Other User Content, Other Data Types)If attributes, event properties or paywall answers you send contain such dataYesDepends on your useYour purposes
Identifiers → Device ID (push token)If you register push tokens through Voidhash; covered if you declare Device ID aboveYesNoApp Functionality
DiagnosticsNot collected by Voidhash–––

7.2 Tracking. Voidhash does not use data for tracking as Apple defines it. Answer "No" for Voidhash unless you yourself combine Voidhash data with third-party data for targeted advertising or share it with data brokers, for example by forwarding webhooks to an advertising network.

7.3 Product Personalization. Whether to also select the Product Personalization purpose, for example because you target paywalls, offers or experiments based on person data, is your decision.

7.4 Privacy manifest. The iOS SDK ships a privacy manifest (PrivacyInfo.xcprivacy) that Xcode merges into your app's privacy report. It declares no tracking and gives the reasons for the required-reason APIs the SDK uses: UserDefaults (reason CA92.1, the SDK's own state) and system boot time (reason 35F9.1, measuring elapsed time for retries and timeouts). The React Native SDK includes the same manifest through its iOS core. Base your App Privacy answers on the table above, including Coarse Location.

8. Google Play Data safety

8.1 In Play Console, under App content → Data safety, include the following for Voidhash.

Google Play category → typeDeclare whenCollected / sharedProcessed ephemerallyRequired or optionalPurposes
Financial info → Purchase historyAlways, when you use purchases or entitlementsCollectedNoRequiredApp functionality, Analytics
Device or other IDsAlways (the anonymous install ID; also push tokens if you register them)CollectedNoRequiredApp functionality, Analytics
Personal info → User IDsWhen you call identify with your own user IDCollectedNoRequired if your app identifies usersApp functionality, Analytics
App activity → App interactionsUnless you have turned off all automatic events and send no eventsCollectedNoYour choice: "optional" only if users can turn it off in your appAnalytics
Location → Approximate locationAlways: derived from the IP addressCollectedNoRequiredAnalytics, App functionality
Personal info → Email address / NameOnly if you pass them to VoidhashCollectedNoAs in your appApp functionality, Account management if applicable
App activity → Other user-generated content / Other actionsIf paywall answers or event properties you send contain such dataCollectedNoAs in your appYour purposes
App info and performance (crash logs, diagnostics)Not collected by Voidhash––––

8.2 Sharing. Data sent to Voidhash as your service provider is "collected", not "shared". If you forward Voidhash data to third parties through webhooks or integrations that are not your service providers, evaluate whether to declare it as "shared".

8.3 Security practices.

  • Is all of the user data collected by your app encrypted in transit? Yes for Voidhash: the SDKs communicate with Voidhash only over HTTPS (TLS).
  • Do you provide a way for users to request that their data be deleted? Yes, provided you offer End Users a way to ask you (Google requires an in-app path and a web link for apps with accounts). You can fulfil the request through Voidhash erasure (section 6.2).

9. Using an app that uses Voidhash?

9.1 This section is for End Users. If an app or website you use relies on Voidhash, Voidhash helps the developer process your purchases and subscriptions, give you access to what you paid for, show you purchase screens and measure how the app is used.

9.2 The developer of the app is responsible for your data. It decides what is collected and why, and Voidhash processes the data only on the developer's behalf and instructions. Depending on how the developer has set up the app, this can include an app-specific identifier, your email or name if the developer provides it, information about your device and app (model, system version, language, time zone, app version), your IP address and the approximate location derived from it, how you use the app and its purchase screens, your purchases and subscriptions, and a push notification token. Your IP address is also used to protect the service against fraud and abuse and, where offered, to recognise that you are the same person across the developer's own apps and websites. Voidhash does not read advertising identifiers or your precise location and does not sell your data.

9.3 To access, correct or delete your data, or to object, contact the app developer. You will find its contact details in the app's privacy policy or its App Store or Google Play listing. The developer can delete your data in Voidhash. Deleting the app removes the data the SDK stored on your device.

9.4 If you cannot reach the developer, write to legal@voidhash.com and tell us which app it concerns. We will pass your request to the developer and let you know. Voidhash's own processing is described in our Privacy Policy at voidhash.com/legal/privacy.

10. Template for your privacy policy

10.1 You may copy and adapt the paragraph below. Remove what does not apply (for example email, push notifications or analytics), add your legal bases and retention, and make sure it matches your app. It does not replace your own privacy policy.

English template

Purchases, subscriptions and analytics (Voidhash). We use Voidhash, a service of Voidhash s.r.o. (Czech Republic), to process in-app purchases and subscriptions, give you access to paid features, show purchase screens and analyse how our app is used. For this, our app sends Voidhash an identifier created for your installation of the app [and our user ID for your account] [and your email address and name], information about your device and app (device model, operating system version, language, time zone, app version), your purchases and subscriptions, and how you use the app [and a push notification token]. Voidhash also receives your IP address and uses it to derive your approximate location (country, region, city), to prevent fraud and abuse [and to recognise that you are the same person across our apps and websites]. Voidhash processes this data as our processor, only on our instructions, and does not use it for its own purposes or for advertising. The data may be processed in the United States by Voidhash's subprocessors on the basis of the EU–US Data Privacy Framework or standard contractual clauses. We process this data [to perform our contract with you (purchases and access) and on the basis of our legitimate interest in improving our app / your consent (analytics)]. We keep it [for as long as you use our app and up to [X] years afterwards]. To exercise your rights, contact us at [contact].

Czech template (Šablona v češtině)

Nákupy, předplatné a analytika (Voidhash). Pro zpracování nákupů a předplatného v aplikaci, zpřístupnění placených funkcí, zobrazení nákupních obrazovek a analýzu používání aplikace využíváme službu Voidhash společnosti Voidhash s.r.o. (Česká republika). Naše aplikace za tímto účelem předává službě Voidhash identifikátor vytvořený pro vaši instalaci aplikace [a naše ID vašeho účtu] [a vaši e-mailovou adresu a jméno], údaje o zařízení a aplikaci (model zařízení, verze operačního systému, jazyk, časové pásmo, verze aplikace), údaje o vašich nákupech a předplatném a o tom, jak aplikaci používáte [, a token pro zasílání oznámení]. Voidhash dále získává vaši IP adresu a používá ji k určení vaší přibližné polohy (stát, region, město), k prevenci podvodů a zneužití [a k rozpoznání, že naše aplikace a weby používáte vy jako tatáž osoba]. Voidhash tyto údaje zpracovává jako náš zpracovatel, pouze podle našich pokynů, a nepoužívá je pro vlastní účely ani k reklamě. Údaje mohou být zpracovávány v USA subdodavateli společnosti Voidhash na základě rámce EU–USA pro ochranu osobních údajů nebo standardních smluvních doložek. Údaje zpracováváme [pro plnění smlouvy s vámi (nákupy a přístup k obsahu) a na základě našeho oprávněného zájmu na zlepšování aplikace / vašeho souhlasu (analytika)]. Uchováváme je [po dobu používání aplikace a nejvýše [X] let poté]. Svá práva můžete uplatnit na [kontakt].

11. Changes and contact

11.1 We update this page when the SDKs start or stop collecting data or change what they store. The version and effective date are shown at the top. Material changes are announced in the SDK release notes and by email to account owners.

11.2 Questions about this page: legal@voidhash.com. We have not appointed a data protection officer. For any data protection matter, contact us at legal@voidhash.com.