Good morning!
Simple JSON API for habit tracking ยท โ Not signed in
Your data lives in the cloud
To access your habits via the API, first create an account by adding your email. Your data syncs across all your devices and is accessible here.
The API uses cookie-based sessions. If you're logged in to Checked.day, you can click here to see your data directly in your browser.
For programmatic access, use the endpoints below. All responses are JSON.
Returns all your entries and settings in a single request.
curl https://checked.day/api.php
Response structure:
{
"entries": [
{
"date": "2026-01-06",
"habits": {
"dishes": "21:15",
"bedtime": "22:30"
}
}
],
"settings": {
"name": "Gabriel",
"theme": "ghibli",
"dayStartHour": 6,
"habits": [...],
"points": 150,
"gems": 5
}
}
Mark a habit as complete for a specific date. The time field records when you completed it (HH:MM format).
curl -X POST https://checked.day/api.php \
-H "Content-Type: application/json" \
-H "X-Requested-With: XMLHttpRequest" \
-d '{"date":"2026-01-06","habitId":"dishes","time":"21:15"}'
To uncheck a habit, set time to null.
Update your name, theme, or habit configuration. Only include fields you want to change.
curl -X POST https://checked.day/api.php \
-H "Content-Type: application/json" \
-H "X-Requested-With: XMLHttpRequest" \
-d '{"settings":{"name":"Gabriel","theme":"terminal"}}'
Remove all habit data for a specific date.
curl -X DELETE "https://checked.day/api.php?date=2026-01-06" \ -H "X-Requested-With: XMLHttpRequest"
The API uses cookie-based sessions. In a browser, you're already authenticated after logging in.
For curl or scripts, you can persist cookies across requests:
curl -c cookies.txt -b cookies.txt https://checked.day/api.php
State-changing requests (POST, DELETE) require the header X-Requested-With: XMLHttpRequest for CSRF protection.
For read-only access from other apps (iOS Shortcuts, Scriptable, widgets), you can generate a personal API token. This creates a unique URL that returns your data without authentication.
curl -X POST https://checked.day/api.php?action=generate-api-token \ -H "X-Requested-With: XMLHttpRequest" \ -b cookies.txt
Returns your token and ready-to-use URL: https://checked.day/api.php?token=YOUR_TOKEN
curl https://checked.day/api.php?token=YOUR_TOKEN
Token access is read-only (GET requests only). POST/DELETE operations require full authentication.
If your token is compromised, revoke it and generate a new one:
curl -X POST https://checked.day/api.php?action=revoke-api-token \ -H "X-Requested-With: XMLHttpRequest" \ -b cookies.txt
Times logged before 6 AM count as the previous day. This allows late-night habit logging (like doing dishes at 1 AM) to apply to "yesterday" rather than starting a new day.
Each habit in your settings has this shape:
{
"id": "dishes",
"name": "Dishes",
"icon": "๐ฝ๏ธ",
"target": "21:00",
"schedule": ["sun","mon","tue","wed","thu","fri","sat"]
}
id is URL-safe, name is display text (max 30 chars), target is optional (HH:MM), and schedule controls which days the habit appears.