Skip to main content
The Everhour API uses a small set of fixed string formats for all date and time values. None of these formats are ISO 8601 extended format, and Unix timestamps are not accepted or returned.
Do not use ISO 8601 extended format or Unix timestamps — the API will reject or misparse the value.

Accepted formats

FormatField typeExample
YYYY-MM-DDDate-only (date, from, to, expense date, assignment dates)2026-05-04
YYYY-MM-DD HH:MM:SSDatetime (createdAt, updatedAt, screenshot timestamps)2026-05-04 09:30:00
HH:MMTime of day (timecard startTime, endTime, clock-in)09:30

Request fields

Use YYYY-MM-DD for all date parameters such as date, from, and to. Use YYYY-MM-DD HH:MM:SS for datetime fields. Use HH:MM for time-of-day fields. Date range parameters are inclusive on both ends. A request with from=2026-05-01&to=2026-05-31 returns records for every day from May 1 through May 31 inclusive.

Response fields

Datetime fields such as createdAt and updatedAt are returned as YYYY-MM-DD HH:MM:SS with no timezone suffix. Treat all such values as UTC. Date-only fields are returned as YYYY-MM-DD.

Timezones

The user object includes a timezone field that contains the user’s UTC offset as a float representing hours — for example, -5, 5.5, or 0. Values are restricted to whole and half hours. This is not an IANA timezone name. No timezone conversion is applied to datetime values in API responses. All datetimes are UTC-naive; apply the user’s timezone offset locally if you need to display times in the user’s local time.

Time durations

The time field on time records and timer responses is an integer in seconds. To convert to hours, divide by 3600.
3600   → 1 h
5400   → 1 h 30 m
90     → 1 m 30 s

Money amounts

amount fields on expenses and invoices are integers in the smallest currency unit (cents for USD/EUR). For example, 1500 represents $15.00. quantity fields are floats.

Clearing a date field

Fields that accept the DateTimeResettable type treat an empty string "" as a signal to clear the stored value rather than a parse error. This is the only way to unset such a field via the API.

Code examples

The examples below build a request to GET /team/time with a date range, then convert the time integer in each record to hours.
curl -G "https://api.everhour.com/team/time" \
  -H "X-Api-Key: YOUR_API_KEY" \
  --data-urlencode "from=2026-05-01" \
  --data-urlencode "to=2026-05-31" \
| jq '[.[] | {id: .id, hours: (.time / 3600)}]'