Privacy policy

What TaleArt collects, why, for how long, who is responsible, and how to ask for your data to be corrected or deleted. Version of 31 October 2026.

The owner wrote this text personally, from what the code does. It is not legal advice, and the owner may have it reviewed by a lawyer later. Where something is not automated, this page says so and says what the owner does by hand on request.

1. Who is responsible

The controller of the data described here is Ido Lempert, an individual developer in Israel ("the owner", "we"), for the documentation site and for the TaleArt workspaces and accounts the owner runs. Contact: GitHub issues (see Your rights for how to ask privately).

There are three situations, and the roles differ:

  1. You read the documentation (section 3). The owner is the controller.
  2. You have an account in a workspace the owner runs (section 4). The owner is the controller of your account data. TaleArt is self-hosted: if you have an account in a workspace run by someone else, that operator is the controller and the owner has no access to the data.
  3. You see a TaleArt zone on someone's site or in someone's app (section 5). The site or app owner (the "customer") is the controller of its end-users' data. When the customer uses an API run by the owner, the owner is only a processor: the owner handles that data on the customer's behalf and for the purpose of delivering the zone, and not for the owner's own purposes. When the customer runs the API itself, the owner never receives that data.

2. In short

  • No advertising, no tracking pixels, no analytics trackers on the documentation site, no profiling.
  • No sale of personal data, and no sharing with data brokers or advertisers.
  • The SDKs send a random visitor id and anonymous counts. Viewer properties, tags and the seen-and-frequency state stay on the device. The optional external user ID is used only to match a list and is not stored.
  • The API stores no IP address, no user agent and no access log.

3. The documentation site

The documentation site is static pages hosted on GitHub Pages at taleart.lempert.site. The site's own code sets no cookie, loads no analytics, advertising or social-media script, and loads no web font or other resource from another company's server. Its two settings stay in your browser's local storage (see Cookies and local storage): your light or dark theme choice, and, if you change it, the API address typed on the API reference page. The API reference calls only the address you typed there, and only when you press "Execute".

GitHub, which hosts the pages, receives your IP address and the request details when you load a page, and keeps its own logs under its privacy statement. The owner does not see those logs. The same applies to GitHub issues you open: they are public, and GitHub processes your GitHub account data.

4. Accounts in a workspace (dashboard and API)

The dashboard and the Management API store the following about the people who use them:

Account data the dashboard and the Management API store
DataWhyNotes
Name, e-mail address, role (admin or content manager), time createdTo run your account and show who did what in a projectStored as typed. An invitation is needed to register; there is no open sign-up.
Passkey: credential id, public key, counter, transports, times created and last usedTo sign you inOnly the public key is stored. The private key stays on your device or in your password manager.
Username and password hash (when the password method is on)To sign you in The password itself is never stored. The hash is salted scrypt. Passwords found in a list of common passwords are refused.
Provider identity: provider (Google, Apple or another OpenID Connect provider), the provider's subject id, the e-mail the provider gave, times created and last usedTo sign you in with an external provider, when an admin turned one on The provider receives a sign-in request and tells us who you are; see its own policy. The e-mail is shown and is not used to sign in.
Session: a hash of a random token, time created, expiryTo keep you signed inThe token itself is only in your cookie. A session lasts 7 days.
Short-lived sign-in challenges (passkey or provider steps)To finish a sign-in safelyValid 5 minutes (passkey) or 10 minutes (provider) and used once.
Invitations and password reset links: hash of the token, who made it, times, when and by whom usedTo let you join or recover accessInvitations last 7 days and reset links 24 hours. Each works once.
API tokens you create: a hash of the token, name, projects, timesFor scripts and the command-line toolThe token is shown to you once.
Project membership, and the projects, zones, tales, fonts, media, theme and targeting settings you createTo provide the service you use This is your content. Tale media is served from public addresses so viewers can see it. Uploads are images up to 10 MB and video up to 100 MB each.
User lists you upload: the external user IDs, stored only as a keyed hash (HMAC-SHA-256) with a secret of the projectTo show tale groups to the viewers on a listThe original IDs are not kept, and the hashes go with the list when you delete it.

The API writes errors to its standard output as structured lines (the error name, message and stack). It keeps no per-request access log and no audit log of its own. A host that runs an API (for example a reverse proxy or a hosting provider) may keep its own logs, which the operator controls.

Legal bases. For account data: it is necessary to give you the service you asked for (the contract in the Terms) and to keep it secure, which is also a legitimate interest of the owner and of the operator. For the Israeli Protection of Privacy Law, 5741-1981: you give the data to us knowingly and for these purposes when you accept an invitation and sign in, and we use it only for them. Where the law requires your consent for something, we ask for it first.

5. What the SDKs and the Delivery API process (end-users)

This section is for the customers who use the SDKs and for the end-users who see a zone. The customer decides to use TaleArt and is the controller (section 1); a customer must cover these points in its own privacy notice and ask for consent where the law or the platform requires it (for example before storing a visitor id or sending analytics). See the Analytics reference and the Web guide for the details.

What the SDKs and the Delivery API process
DataWhere it goesWhy and notes
Zone keySent to the Delivery API in the Authorization header (never in a URL)Says which zone to deliver. It is a credential for reading the zone, not a personal identifier.
Visitor id: a random UUID the SDK makes once per browser or app install Kept on the device. Sent in the X-TaleArt-Visitor header (in the body of a beacon) with analytics events and answers, and when reading a zone. Limits requests per visitor and counts each visitor once. It contains no personal data and is tied to no account, but it is a stable identifier of a browser or an install, so the customer should treat it like other local identifiers.
Analytics events: type (impression, open, view, click), tale group id, tale id (views and clicks), timeSent to the Delivery API, which stores them with a hash of the project id and visitor id Gives the customer counts in the dashboard. The stored hash is SHA-256 of the project id and the visitor id, so a visitor cannot be linked across projects. No IP address, user agent, external user ID, tags or viewer properties are stored with an event. Can be turned off with analytics: false in the SDK.
Answers to a poll, quiz, rating or reaction: the chosen value, tale, element, time and the visitor idSent to the Delivery API and stored in the project's database Gives the customer its results and lets each visitor answer once. The visitor id is stored as received here, not hashed. The data is the customer's.
External user ID (optional, set by the customer's code) Sent only as a request header (X-TaleArt-External-User-Id) when reading a zone; held in memory in the page or app, not in storage or a cookie The API hashes it as soon as it reads it, checks it against the project's user lists, and does not log or store it. It is not sent with analytics events and is never combined with the visitor id. The customer must use an opaque ID, not an e-mail address or phone number.
Viewer properties, targeting tags, locale, themeStay on the device. Never sent to the server The API sends every group with its audience rule, and the SDK evaluates the rule in the page or app.
Seen tale groups, frequency-cap views, the answers givenStay on the device, in local storage or native preferencesUsed to show a group once or a limited number of times, and to show an answer already given.
IP addressSeen by the API for each request; used in memory only Used to rate limit abuse (a request without a visitor id is limited by its address; every request also counts against an address allowance). Never written to the database or to a log by the API. A host in front of the API may log it.

The customer's tale content (text, images, video, links) is shown to every viewer who has the zone key. It should not contain personal data.

6. Cookies and local storage

Cookies. The documentation site, the dashboard's pages and the Delivery API (which serves the SDKs) set no cookie. Only the Management API sets these three, all HttpOnly, all strictly for signing in, and no consent is needed for them under most laws because they are strictly necessary:

Cookies the Management API sets
NamePurposeDuration
taleart_sessionKeeps you signed in. SameSite=Strict, and Secure when the workspace is served over HTTPS.Up to 7 days, or until you sign out
taleart_challengeLinks a passkey sign-in or sign-up step to your browser. SameSite=Strict.5 minutes
taleart_oauthLinks a Google, Apple or other provider sign-in to your browser. SameSite=Lax.10 minutes

Local storage and similar. These stay on your device. The owner never receives them, except the visitor id as described above.

Local storage keys by place
KeyWherePurposeDuration
taleart-docs-themeThis documentation siteYour light or dark theme choiceUntil you clear site data
taleart-docs:api-reference:api-urlThis documentation siteThe API address you typed on the API reference page (kept only when it is not the default)Until you clear site data
taleart.selectedProjectIdThe dashboardThe project you picked in the top barUntil you clear site data
taleart.visitorWeb SDK, on the customer's siteThe random visitor idUntil cleared by the visitor (Safari may clear it after 7 days without a visit)
taleart.seenWeb SDK, on the customer's siteThe ids of the tale groups viewed (up to 500)Until cleared
taleart.viewsWeb SDK, on the customer's siteTimes of recent views for the frequency cap (up to 50 per group, 500 groups)Until cleared
taleart.responsesWeb SDK, on the customer's siteThe answers the visitor gave, so they are shown again (up to 200)Until cleared
taleart-banner-dismissed:<group ids>Web SDK, on the customer's site (session storage)Remembers that a sticky banner was closedThe browser session
taleart.visitor, taleart.seen, taleart.views, taleart.responsesAndroid SDK (the taleart-sdk SharedPreferences) and iOS SDK (the taleart-sdk NSUserDefaults suite)The same four uses as aboveUntil the app's data is cleared or the app is removed; a device backup may restore them

If the storage is missing or blocked, the SDK still works: the visitor id then lasts only for the page load, and the seen and frequency state is not kept.

7. Sharing, sale and advertising

The owner does not sell personal data, does not use it for advertising or marketing, and does not build profiles. He shares data only with:

  • GitHub (hosting of the documentation pages, the source code, the issues and the build and release automation);
  • npm and Maven Central, where the SDK packages are published (they see the usual package download data; the owner receives no personal data from them);
  • sign-in providers (Google, Apple or another provider), only if an admin turned one on and you choose it;
  • the hosting provider of a workspace the owner runs, which stores the database and the uploaded media for the owner;
  • authorities, when the law requires it, or to protect the owner's legal rights.

8. International transfers

The owner is in Israel. GitHub, npm and some providers process data in the United States and elsewhere. A workspace stores its data wherever its operator hosts it. When data of people in the European Economic Area is moved out of it, the owner relies on the transfer tools that apply to the provider (such as an adequacy decision or standard contractual clauses in the provider's own terms). Israel has an adequacy decision from the European Commission.

9. How long data is kept, and what can be deleted

Retention and deletion by kind of data
DataKeptDeletion
Analytics events400 days, then deleted by a job that runs once a dayAutomatic
SessionsStop working after 7 days or when you sign out Sign-out deletes the session. Expired rows are cleared the next time the same user signs in, and all of a user's sessions end when a password reset link is used.
Sign-in challengesMinutesUsed once; expired ones are cleared by later sign-ins
Passkeys, the password, linked provider identitiesUntil you remove them Self-service in your account's sign-in methods (the dashboard stops you removing your last method)
API tokens, zone keys, site keysUntil revokedSelf-service, in the dashboard or the API
Tales, tale groups, user lists, fontsUntil you delete them Self-service. Deleting a tale deletes its answers. Deleting a user list deletes its hashes.
Account (name, e-mail, role, membership), projects, uploaded media files, answers of a deleted zone, used invitations and reset linksUntil the owner or operator deletes themNot automated. There is no self-service account deletion, project deletion or data export in the dashboard today. On request, the owner (or the operator) deletes or exports the data by hand in the database and the media storage.
Data on your device (local storage, preferences)Until clearedYou clear the site's data or the app's data. The SDKs have no remote way to do that.

Backups made by an operator are the operator's own and may keep deleted data until they expire.

10. Security

These measures exist in the code. No system is perfectly secure, and the owner cannot promise it.

  • Passwords are hashed with scrypt and a random salt, never stored in clear. Session, invitation and reset tokens are random and only their SHA-256 hash is stored.
  • The session cookie is HttpOnly and SameSite=Strict, and Secure when the workspace is served over HTTPS (HTTPS is the operator's responsibility).
  • Passkeys keep their private key on your device; the server holds only the public key.
  • Sign-in attempts with a password are throttled. The Delivery API is rate limited per visitor and per address.
  • Secrets of external sign-in providers are stored encrypted with AES-256-GCM.
  • Users reach only the projects they belong to; user list IDs are kept only as keyed hashes; analytics visitor ids are stored only as hashes that differ per project.

If a breach of personal data in a workspace the owner runs puts people at risk, the owner will notify them and the authorities as the law requires.

11. Children

TaleArt is not meant for children. The dashboard is for adults who run campaigns, and the owner does not knowingly collect data from children. A customer whose site or app is directed at children is responsible for meeting the rules that apply to them, including whether to use the SDK's visitor id and analytics at all.

12. Your rights and how to use them

Depending on where you live, you may have the right to ask whether we hold data about you and to get a copy; to correct it; to have it deleted; to restrict or object to its use; to take it with you (portability); and to withdraw a consent you gave. Under the Israeli Protection of Privacy Law you may inspect information held about you and ask for it to be corrected or deleted. You may also complain to your data protection authority (in Israel, the Privacy Protection Authority).

To use a right:

  • Open an issue at GitHub issues with the title "Privacy request" and no personal details, asking for a private way to talk. The owner will answer there and agree with you how to confirm that you are who you say you are, before the owner gives out or deletes anything.
  • The owner aims to answer within 30 days. Deletion and export are done by hand (see section 9).
  • If you are an end-user of a site or app that uses TaleArt, ask that site or app first; it is the controller. The owner can then help it, as its processor. Because the visitor id is random and tied to no name, the owner can find a visitor's records only if you give the visitor id from your device (the value of taleart.visitor). Clearing your browser's or app's data gives you a new id.

13. Changes

The owner may update this policy when the software or the law changes. The date at the top shows the current version, and the repository's history on GitHub keeps earlier ones. A change that matters to account holders will be announced on this site or the dashboard sign-in page before it applies.

Read also the Terms of service and the Accessibility statement.