Sundial Habits
Reference

Get Habit Progress

GET
/api/v1/progress

Read one habit’s current and best streak, with its unit, as of a calendar day. Accounts for schedule changes and breaks. Results reflect server-synced data.

Authorization

accessKey
headerAuthorizationBearer <Sundial access key>

Query Parameters

habitID*string
Formatuuid
day*string

Gregorian calendar date, YYYY-MM-DD, between 1900 and 2100.

Match^\d{4}-\d{2}-\d{2}$
timeZone*string

IANA time zone used to interpret today, such as America/Los_Angeles.

Lengthlength <= 100

Response Body

Confirmed result.

application/json
  1. response
asOf*string
Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Formatdate-time
habitID*string
Formatuuid
day*string
Match^\d{4}-\d{2}-\d{2}$
current*
best*
completedDays*integer
Range0 <= value <= 9007199254740991
Example Request
curl -X GET 'https://api.sundialhabits.com/api/v1/progress?habitID=00000000-0000-4000-8000-000000000002&day=2026-10-20&timeZone=America%2FLos_Angeles' \  -H 'Authorization: Bearer <ACCESS_KEY>'
Example Response
{  "asOf": "2019-08-24T14:15:22Z",  "habitID": "00000000-0000-4000-8000-000000000002",  "day": "string",  "current": {    "count": 0,    "unit": "days"  },  "best": {    "count": 0,    "unit": "days"  },  "completedDays": 0}