Date and time handling in the Data Export API
The date and time model
Three rules describe how the API handles dates and times:
- Every request to
/jobsand/printer-statesmust include atimezoneparameter that contains a valid IANA timezone identifier, for exampleAmerica/DenverorEurope/Bucharest. - Any
startDateTimeorendDateTimevalue supplied in the request is interpreted as a local time in the supplied timezone. The values do not include a UTC offset. - Every date and time value in the response is formatted as a local time in the same
timezone, using the pattern
YYYY-MM-DDTHH:MM:SS.sss.
The timezone parameter governs the meaning of the request and the formatting of the response.
Two requests for the same underlying data, submitted with different timezones, produce
responses with different timestamp strings even though they describe the same events.
Date and time format
The API uses one format for all date and time values, in both requests and responses:
YYYY-MM-DDTHH:MM:SS.sss
For example, 2026-03-15T14:30:00.000 is 2:30:00 PM on March 15, 2026, interpreted in the timezone supplied with the request.
Important: The format does not include a UTC offset (such as -06:00) or a Z suffix. Do not append one. Both requests and responses use local time only, with
the timezone carried separately as a request parameter.
In requests, the milliseconds portion (.sss) is optional. In responses, it is always present.
Default time range
You can omit startDateTime, endDateTime, or both. The two defaults are applied independently:
- If you omit
startDateTime, the API uses 24 hours before the current time as the start of the range. - If you omit
endDateTime, the API uses the current time as the end of the range.
The defaults combine in the way you would expect:
- If you omit both values, the API returns data for the previous 24 hours.
- If you supply
startDateTimeas one hour ago and omitendDateTime, the API returns data for the previous hour. - If you supply
endDateTimeand omitstartDateTime, the API returns data for the range starting 24 hours before the request and ending at theendDateTime.
Default values are calculated in the timezone supplied with the request.
Data retention: the previous seven days
The Data Export API serves real-time operational data. Job records and printer state history are available for the previous seven days only. A request for data older than seven days returns an error.
Plan your integration so that scheduled extracts run frequently enough to capture all data before it ages out:
- For nightly extracts, allow a margin of at least one or two days. If a scheduled run fails, you have time to investigate and re-run before the data is no longer available.
- For backfills or one-time extracts, do not request data more than seven days old.
Rules for the requested range
startDateTimemust be earlier thanendDateTime. A request that violates this rule fails withERR_INVALID_DATE_RANGE.- Both values must use the format described in Date and time format. A request with a malformed value fails with
ERR_INVALID_DATE_FORMAT. - The duration between
startDateTimeandendDateTimemust not exceed the maximum allowed range. A request that exceeds the maximum fails withERR_DATE_RANGE_EXCEEDED.
Supplying the timezone
The timezone parameter accepts IANA timezone identifiers, such as America/Denver, America/New_York, Europe/Bucharest, Asia/Tokyo, or UTC. The interactive documentation page lists every value that the API accepts.
An invalid or unrecognized identifier fails with ERR_INVALID_TIMEZONE. Three-letter abbreviations such as MST or EST are not IANA identifiers and are not accepted; use the corresponding region-based
identifier (for example, America/Denver or America/New_York) instead.
Daylight saving time and ambiguous times
Because requests and responses are expressed as local times, daylight saving time transitions create two situations to be aware of:
- Skipped local times in the spring transition
- When clocks move forward, one hour of local time does not exist. For example, in
America/Denveron the day of the spring transition,02:30:00is not a valid local time. Avoid using times in the skipped hour asstartDateTimeorendDateTime. - Repeated local times in the fall transition
- When clocks move back, one hour of local time occurs twice. A value such as
01:30:00on the day of the fall transition is ambiguous. Choose times outside the repeated hour to avoid uncertainty about which instance you are requesting.
If your integration runs unattended and might submit a request whose start or end time falls inside a transition, schedule the request to run a few hours away from the transition or use times that are clearly outside it.
Recommendations for storing and comparing response timestamps
Response timestamps are local times without an offset. To avoid ambiguity in downstream systems, consider one of the following approaches:
- Store the response timestamp together with the timezone you supplied in the request. The pair, taken together, identifies a unique instant in time.
- In your integration, convert each response timestamp to UTC before storing it, using the timezone you supplied in the request. Storing UTC values simplifies comparisons across data extracted with different timezones.
- Always submit requests with the same timezone, for example
UTC, so that all stored timestamps are directly comparable.
Examples
The following examples illustrate how the timezone, start time, and end time work together.
- Default window in Mountain Time
- A request submitted at 9:00 AM on March 15, 2026, in
America/Denver, with no start or end time supplied, returns data from2026-03-14T09:00:00through2026-03-15T09:00:00, both interpreted in Mountain Time. - Specific window in Eastern European Time
- A request that supplies
timezone=Europe/Bucharest,startDateTime=2026-03-15T08:00:00, andendDateTime=2026-03-15T16:00:00returns data for the eight-hour business day in Bucharest local time. Response timestamps are also formatted in Bucharest local time. - The same window viewed in two timezones
- To retrieve the same underlying data twice, formatted for two audiences, submit two
requests with different
timezonevalues and adjuststartDateTimeandendDateTimeso that they describe the same instants in each timezone. The response payloads describe the same events but use different timestamp strings.