Search Icon

Understanding Varo Timestamps

Varo captures important timestamps throughout the report creation and emailing process. This page is intended to help you understand where to find timestamp information and the point in time it is generated.

"timestamps" Object

The "timestamps" key object in the Varo-generated JSON file contains the following keys (and their data types):

creationTimestamp - isTrueTime (boolean) - isAutomaticTime (boolean) - utcTimestamp (integer, miliseconds since epoch) emailSentTimestamp - isTrueTime (boolean) - isAutomaticTime (boolean) - utcTimestamp (integer, miliseconds since epoch)

These two objects contain information about the report creation time and the first email sent time, respectively.

Although there are other keys in the JSON object, the data in the timestamps object should be considered canonical. The other data is vestigal and was left to not introduce breaking changes - more on it below.

Understanding isTrueTime and isAutomaticTime

Varo tries to provide as much information about the context of a timestamp as possible. It provides two signals as to the truthiness of a time: isTrueTime and isAutomaticTime.

In brief, if isTrueTime is true for a timestamp, then the timestamp can be trusted. If isTrueTime is false, more work will need to be done to infer whether the timestamp can be trusted or not.

isTrueTime

Varo makes use of the TrueTime library (https://github.com/instacart/truetime-android) which uses the NTP protocol to sync the library time with NTP servers. Varo uses “time.google.com” servers, specifically. It is initialized at application start, runs updates following NTP on the io threadpool and disposes its resources as the application closes. There are no cached values between run times.

isAutomaticTime

The isAutomaticTime value is the same as the AUTO_TIME value provided by the Android OS: https://developer.android.com/reference/android/provider/Settings.Global#AUTO_TIME

If isAutomaticTime is true and there is a GPS location, it can be assumed that the time has been synced at least to the level of precision provided by GNSS.

Timestamps Prior to v1.18

Prior to Varo v1.18 (released 2025/02/03), the Varo-generated JSON file did not include the "timestamps" object above. Instead, it contained only the following time-related keys in the top-level "appInfo" key object:

isAutomaticTime (boolean) isTrueTime (boolean) emailSentTimestamp (integer, miliseconds since epoch) timestamp (integer, miliseconds sinch epoch)

The timestamp key is the time of report creation. The emailSentTimestamp is the time of first email sending.

isTrueTime is captured at the same time as the timestamp value. However, isAutomaticTime is only captured at email send time. This means that it is possible for a user to have automatic time turned off at time of report creation (implying that the timestamp value is incorrect) and then turns on automatic time before sending the email. Effectively, these times should only be trusted if isTrueTime is true.

Timestamps on Varo Reports Created Prior to v1.18

It is possible for there to be Varo reports created prior to a user updating Varo to v1.18 wherein the shortcomings of the timestamps for that report are the same as detailed above. When a user sends a Varo report created prior to v1.18 from a v1.18+ Varo, the timestamp information will be a bit more nuanced.

In these cases, the timestamps object will be missing the keys for the values it does not have. Specifically, the timestamps object may look like:

creationTimestamp - isTrueTime - utcTimestamp emailSentTimestamp - isAutomaticTime true - utcTimestamp