Telemetry
We count devices so we can bill for the ones past the free tier. We do not collect any personally identifiable information (PII).
We count devices, not people
Once a day, a device sends one event.
We also receive a count of inference calls. That number never touches your bill, because inference is unlimited.
The device id is a random v4 UUID the SDK writes on first run and keeps on the device. Nothing derives that id: not the hardware, not the network, not your account, and not anything a model read. Delete the app and the next install counts as a new device.
Every field we receive
The request body has a fixed structure, shown here in full. No field contains anything the model read or wrote.
| Field | What it holds | Example |
|---|---|---|
platform | Which kind of host ran the model | ios, android, web, server |
app.id | The app the SDK runs in: the bundle id on Apple, the package name on Android, the site's domain in a browser, the process name on a server | com.acme.notes |
sdk.name | Which SDK reported | clear |
sdk.version | The version of that SDK | 3.1.0 |
sentAt | When the batch left the device, in UTC | 2026-09-09T08:30:23.412Z |
deviceId | The random UUID from first run | 8f14e45f-ceea-467a-9d31-1c2a0b2f8e77 |
callCount | How many inferences ran since the last event | 42 |
timestamp | When the event happened, in UTC | 2026-09-09T08:30:23.401Z |
key | A publishable key, only if you have an account with us | dal_kR2x9vT4... |
context | In a browser only: browser and OS names, a coarse OS version, desktop or mobile, and the page language | Chrome 141, macOS, desktop, en-US |
Only the browser SDK adds context, and every value it includes is already available to the website with each request. On Apple, Android, and servers, the report ends at the row above.
What never leaves the device
- Everything you put into a model: Text, audio, images, and video are processed on the device, and none of it is uploaded.
- Everything a model produces: Transcripts, labels, scores, boxes, and positions in your text stay on the device too.
- None of this is included in our usage report.
When a device reports
On a phone or a desktop app, once every 24 hours. The first inference after that window opens carries the event.
In a browser, once per session, where a session ends after 30 minutes of no activity. Closing the tab flushes anything still pending, with navigator.sendBeacon.
On a server, the same daily event, and any later call counts are coalesced into one send per hour.
None of this blocks inference. The send is fire-and-forget on its own task, so model calls never wait on the network, and a report that fails never breaks a model call.
Where it goes
The server that receives the event and the object storage that keeps it both run in Nuremberg, Germany. Desert Ant Labs B.V. is registered in Amsterdam, and the GDPR is the law we build under.
The request carries no cookies, and the event we store has no IP address and no location field.
Offline and air-gapped
Some products can never reach us: an air-gapped install, a secure facility, a device with the radio off for good. We license those without telemetry. Let us know what you're building and we can discuss license costs.
Last updated 2026-09-09.