Reference
List Habits
GET
Read your habits, including private habits, schedules, and check-in state for a calendar day. Results reflect server-synced data.
accessKeyheader
AuthorizationBearer <Sundial access key>day*stringGregorian calendar date, YYYY-MM-DD, between 1900 and 2100.
Match
^\d{4}-\d{2}-\d{2}$timeZone*stringIANA time zone used to interpret today, such as America/Los_Angeles.
Length
length <= 100limit*integerRange
1 <= value <= 100Default
50cursor?stringFormat
uuidConfirmed result.
application/json- response
asOf*stringMatch
^(?:(?:\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))$Format
date-timehabits*array<>nextCursor*|Format
uuidonBreak*booleancurl -X GET 'https://api.sundialhabits.com/api/v1/habits?day=2026-10-20&timeZone=America%2FLos_Angeles&limit=50' \ -H 'Authorization: Bearer <ACCESS_KEY>'Example Response
{ "asOf": "2019-08-24T14:15:22Z", "habits": [ { "id": "00000000-0000-4000-8000-000000000002", "title": "string", "archived": true, "position": 0, "schedule": [ { "from": "string", "rule": { "kind": "daily" } } ], "reminder": { "hour": 0, "minute": 0 }, "visibility": "friends", "revision": "1", "due": true, "checkIn": { "habitID": "00000000-0000-4000-8000-000000000002", "day": "2026-10-20", "completed": true, "timeZone": "America/Los_Angeles", "revision": "1" } } ], "nextCursor": "00000000-0000-4000-8000-000000000002", "onBreak": true}Get Habit Progress GET
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.
Set Habit Completion POST
Check or uncheck your habit for an explicit date. May publish a shared check-in and trigger friend notifications under your existing sharing settings. Reuse requestID only for identical retries. Read the latest habit and check-in revisions before changing state.