Build integrations with your task management workflows
The FreeTodoList API follows REST principles and uses JSON as its data exchange format.
https://freetodolist.com/api/v1
All API requests require authentication using a Bearer token.
API requests must include your API token in the Authorization header as a Bearer token.
You can generate or regenerate your API token in your profile settings.
Note: Shared lists are the only resources that can be accessed without authentication, using their share token in the URL.
To ensure service stability, API requests are limited to 60 requests per minute per user. If you exceed this limit, requests will return a 429 status code until the limit resets.
Every API response includes headers that provide information about your current rate limit status:
Header | Description |
---|---|
X-RateLimit-Limit | The maximum number of requests allowed per minute |
X-RateLimit-Remaining | The number of requests remaining in the current rate limit window |
X-RateLimit-Reset | The Unix timestamp (in seconds) when the rate limit will reset |
When you exceed the rate limit, the API will respond with:
{
"error": "Rate limit exceeded. Try again in 45 seconds."
}
Tip: Your application should monitor these headers and adjust its request rate accordingly to avoid hitting the limit. Consider implementing backoff strategies when approaching the limit.
/api/v1/lists/:uid
Returns a specific list with its items. Archived items are excluded by default.
{
"list": {
"uid": "abc123",
"name": "Weekly Tasks",
"description": "Things to do this week",
"created_at": "2025-04-05T12:34:56Z",
"updated_at": "2025-04-07T09:12:34Z",
"url": "https://freetodolist.com/lists/abc123",
"shareable": true,
"shareable_url": "https://freetodolist.com/shared/def456",
"rss_feed_url": "https://freetodolist.com/lists/abc123/feed.rss",
"ical_feed_url": "https://freetodolist.com/lists/abc123/calendar.ics",
"stats": {
"total_items": 12,
"completed_items": 5,
"uncompleted_items": 7,
"archived_items": 3,
"overdue_items": 2
}
},
"items": [
{
"body": "Complete project proposal",
"complete": false,
"position": 1,
"created_at": "2025-04-05T13:14:15Z",
"updated_at": "2025-04-05T13:14:15Z",
"due_at": "2025-04-10T17:00:00Z",
"completed_at": null,
"archived": false
},
// Additional items...
]
}
Parameter | Type | Description |
---|---|---|
include_archived | boolean | Include archived items in the response |
only_completed | boolean | Only include completed items |
only_uncompleted | boolean | Only include uncompleted items |
sort | string |
Sort items by:
position_desc - Position (descending)
date_asc - Due date (ascending)
|
/api/v1/lists
Returns all lists belonging to the authenticated user. Archived lists are excluded by default.
{
"lists": [
{
"uid": "abc123",
"name": "Weekly Tasks",
"description": "Things to do this week",
"created_at": "2025-04-05T12:34:56Z",
"updated_at": "2025-04-07T09:12:34Z",
"url": "https://freetodolist.com/lists/abc123",
"shareable": true,
"shareable_url": "https://freetodolist.com/shared/def456",
"rss_feed_url": "https://freetodolist.com/lists/abc123/feed.rss",
"ical_feed_url": "https://freetodolist.com/lists/abc123/calendar.ics",
"items_count": 12,
"completed_items_count": 5,
"uncompleted_items_count": 7,
"overdue_items_count": 2,
"archived": false
},
// Additional lists...
]
}
Parameter | Type | Description |
---|---|---|
include_archived | boolean | Include archived lists |
sort | string |
Sort lists by:
name_asc - Name (ascending)
created_at_desc - Creation date (descending)
updated_at_asc - Last update (ascending)
items_count_desc - Number of items (descending)
|
/api/v1/lists/:list_id/items
Returns all items from a specific list. Archived items are excluded by default.
{
"items": [
{
"uid": "01234567-89ab-cdef-0123-456789abcdef",
"body": "Complete project proposal",
"complete": false,
"position": 1,
"created_at": "2025-04-05T13:14:15Z",
"updated_at": "2025-04-05T13:14:15Z",
"due_at": "2025-04-10T17:00:00Z",
"completed_at": null,
"archived": false,
"list_uid": "abc123"
},
// Additional items...
]
}
Parameter | Type | Description |
---|---|---|
include_archived | boolean | Include archived items in the response |
only_completed | boolean | Only include completed items |
only_uncompleted | boolean | Only include uncompleted items |
due_before | ISO8601 datetime | Only include items due before this date |
due_after | ISO8601 datetime | Only include items due after this date |
sort | string |
Sort items by:
position_desc - Position (descending)
date_asc - Due date (ascending)
date_desc - Due date (descending)
created_asc - Creation date (ascending)
created_desc - Creation date (descending)
updated_asc - Last update (ascending)
updated_desc - Last update (descending)
|
/api/v1/lists/:list_id/items
Creates a new item in the specified list.
Parameter | Type | Description |
---|---|---|
item[body] | string | The content of the item (required) |
item[complete] | boolean | Whether the item is completed (defaults to false) |
item[due_at] | ISO8601 datetime | Due date for the item |
item[archived] | boolean | Whether the item is archived (defaults to false) |
position_at_top | boolean | Whether to add the item at the top of the list (default) or bottom |
{
"item": {
"uid": "fedcba98-7654-3210-fedc-ba9876543210",
"body": "New item added via API",
"complete": false,
"position": 1,
"created_at": "2025-04-09T14:22:15Z",
"updated_at": "2025-04-09T14:22:15Z",
"due_at": "2025-04-15T09:00:00Z",
"completed_at": null,
"archived": false,
"list_uid": "abc123"
},
"message": "Item successfully created"
}
/api/v1/items/:uid
Returns details about a specific item.
{
"item": {
"uid": "01234567-89ab-cdef-0123-456789abcdef",
"body": "Complete project proposal",
"complete": false,
"position": 1,
"created_at": "2025-04-05T13:14:15Z",
"updated_at": "2025-04-05T13:14:15Z",
"due_at": "2025-04-10T17:00:00Z",
"completed_at": null,
"archived": false,
"list_uid": "abc123"
}
}
/api/v1/items/:uid
Updates an existing item.
Parameter | Type | Description |
---|---|---|
item[body] | string | The content of the item |
item[complete] | boolean | Whether the item is completed |
item[due_at] | ISO8601 datetime | Due date for the item |
item[archived] | boolean | Whether the item is archived |
item[completed_at] | ISO8601 datetime | When the item was completed |
{
"item": {
"uid": "01234567-89ab-cdef-0123-456789abcdef",
"body": "Updated item via API",
"complete": true,
"position": 1,
"created_at": "2025-04-05T13:14:15Z",
"updated_at": "2025-04-09T14:25:10Z",
"due_at": "2025-04-10T17:00:00Z",
"completed_at": "2025-04-09T14:25:10Z",
"archived": false,
"list_uid": "abc123"
},
"message": "Item successfully updated"
}
/api/v1/items/:uid
Permanently deletes an item.
{
"message": "Item successfully deleted"
}
/api/v1/dashboard
Returns statistics about the user's lists and items, plus a summary of each list. This is useful for building dashboard widgets or overview screens.
{
"stats": {
"lists_count": 5,
"archived_lists_count": 2,
"overdue_items_count": 3,
"total_items": 42,
"completed_items": 28,
"completion_percentage": 67
},
"lists": [
{
"uid": "abc123",
"name": "Weekly Tasks",
"description": "Things to do this week",
"created_at": "2025-04-05T12:34:56Z",
"updated_at": "2025-04-07T09:12:34Z",
"url": "https://freetodolist.com/lists/abc123",
"position": 1,
"shareable": true,
"shareable_url": "https://freetodolist.com/shared/def456",
"rss_feed_url": "https://freetodolist.com/lists/abc123/feed.rss",
"ical_feed_url": "https://freetodolist.com/lists/abc123/calendar.ics",
"items_count": 12,
"completed_items_count": 5,
"uncompleted_items_count": 7,
"overdue_items_count": 2
},
// Additional lists...
]
}
Parameter | Type | Description |
---|---|---|
sort | string |
position - Sort by position (default)
name - Sort by name
created_at - Sort by creation date
updated_at - Sort by last update
|
direction | string |
Sort direction: asc or desc
|
/api/v1/overdue_items
Returns a list of all overdue items across all lists belonging to the authenticated user. Items from archived lists are excluded.
{
"count": 3,
"items": [
{
"body": "Complete project proposal",
"complete": false,
"due_at": "2025-04-08T17:00:00Z",
"days_overdue": 1,
"position": 1,
"created_at": "2025-04-05T13:14:15Z",
"updated_at": "2025-04-05T13:14:15Z",
"list": {
"uid": "abc123",
"name": "Weekly Tasks",
"url": "https://freetodolist.com/lists/abc123",
"rss_feed_url": "https://freetodolist.com/lists/abc123/feed.rss",
"ical_feed_url": "https://freetodolist.com/lists/abc123/calendar.ics"
}
},
// Additional overdue items...
]
}
Note: This endpoint does not accept any additional parameters. Items are sorted by list name and then by due date.
/api/v1/items_due_dates
Returns a list of all upcoming due items (due today or in the future, within the next 30 days) across all lists belonging to the authenticated user. Items from archived lists are excluded.
{
"count": 5,
"items": [
{
"body": "Review project documentation",
"complete": false,
"due_at": "2025-04-11T14:00:00Z",
"days_until_due": 0,
"position": 2,
"created_at": "2025-04-09T10:12:15Z",
"updated_at": "2025-04-09T10:12:15Z",
"list": {
"uid": "abc123",
"name": "Weekly Tasks",
"url": "https://freetodolist.com/lists/abc123",
"rss_feed_url": "https://freetodolist.com/lists/abc123/feed.rss",
"ical_feed_url": "https://freetodolist.com/lists/abc123/calendar.ics"
}
},
{
"body": "Schedule team meeting",
"complete": false,
"due_at": "2025-04-12T09:00:00Z",
"days_until_due": 1,
"position": 3,
"created_at": "2025-04-09T11:22:30Z",
"updated_at": "2025-04-09T11:22:30Z",
"list": {
"uid": "abc123",
"name": "Weekly Tasks",
"url": "https://freetodolist.com/lists/abc123",
"rss_feed_url": "https://freetodolist.com/lists/abc123/feed.rss",
"ical_feed_url": "https://freetodolist.com/lists/abc123/calendar.ics"
}
},
// Additional upcoming due items...
]
}
Note: This endpoint does not accept any additional parameters. Items are sorted by due date (ascending) and then by list name.
The API uses standard HTTP status codes to indicate success or failure:
Status Code | Description |
---|---|
200 OK | Request was successful |
400 Bad Request | Invalid request parameters |
401 Unauthorized | Authentication required |
403 Forbidden | You don't have permission to access this resource |
404 Not Found | Resource not found |
422 Unprocessable Entity | The request was well-formed but could not be processed |
429 Too Many Requests | Rate limit exceeded |
500 Internal Server Error | Server error |
{
"error": "Authentication required"
}
{
"success": false,
"errors": ["Body can't be blank"]
}
The API supports various query parameters to filter and sort the results. Here's a comprehensive list of available parameters:
Parameter | Type | Description | Example |
---|---|---|---|
include_archived | boolean | Include archived items/lists in the response | ?include_archived=true |
only_completed | boolean | Only include completed items | ?only_completed=true |
only_uncompleted | boolean | Only include uncompleted items | ?only_uncompleted=true |
sort | string | Specify sorting field and direction | ?sort=date_asc |
direction | string | Specify sort direction (used with dashboard endpoint) | ?sort=name&direction=desc |
You can combine multiple parameters in a single request:
The FreeTodoList API is designed with security in mind:
// Fetch a list with its items using API token
async function getList(uid, apiToken) {
const response = await fetch(`https://freetodolist.com/api/v1/lists/${uid}`, {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': `Bearer ${apiToken}`
}
});
if (!response.ok) {
throw new Error(`HTTP error ${response.status}`);
}
return await response.json();
}
// Display the list
const apiToken = 'your_api_token'; // Get this from your Profile page
getList('abc123', apiToken)
.then(data => {
console.log(`List: ${data.list.name}`);
console.log(`Items: ${data.items.length}`);
// Display items
data.items.forEach(item => {
console.log(`- ${item.complete ? '✓' : '☐'} ${item.body}`);
});
})
.catch(error => console.error('Error:', error));
import requests
# API token authentication method
class ApiClient:
def __init__(self, api_token):
self.api_token = api_token
self.base_url = 'https://freetodolist.com/api/v1'
self.headers = {
'Authorization': f'Bearer {api_token}',
'Accept': 'application/json'
}
def get_dashboard(self):
response = requests.get(f'{self.base_url}/dashboard', headers=self.headers)
response.raise_for_status() # Raise exception for HTTP errors
return response.json()
def get_overdue_items(self):
response = requests.get(f'{self.base_url}/overdue_items', headers=self.headers)
response.raise_for_status()
return response.json()
def get_upcoming_due_items(self):
response = requests.get(f'{self.base_url}/items_due_dates', headers=self.headers)
response.raise_for_status()
return response.json()
def get_list(self, list_uid):
response = requests.get(f'{self.base_url}/lists/{list_uid}', headers=self.headers)
response.raise_for_status()
return response.json()
# Main function using API token authentication
def main():
# Initialize the API client with your token
api_token = 'your_api_token' # Get this from your Profile page
client = ApiClient(api_token)
# Get dashboard data
dashboard = client.get_dashboard()
print(f"You have {dashboard['stats']['lists_count']} lists")
print(f"Completion rate: {dashboard['stats']['completion_percentage']}%")
# Get overdue items
overdue = client.get_overdue_items()
print(f"You have {overdue['count']} overdue items:")
for item in overdue['items']:
print(f"- {item['body']} (Due: {item['due_at']})")
# Get upcoming due items
upcoming = client.get_upcoming_due_items()
print(f"You have {upcoming['count']} upcoming items due:")
for item in upcoming['items']:
print(f"- {item['body']} (Due: {item['due_at']})")
# Get a specific list
list_data = client.get_list('abc123')
print(f"List: {list_data['list']['name']}")
print(f"Items: {len(list_data['items'])}")
if __name__ == '__main__':
main()
# Set your API token as an environment variable
export API_TOKEN="your_api_token" # Replace with your API token from Profile page
# Get a list with its items
curl -H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" \
https://freetodolist.com/api/v1/lists/abc123
# Get dashboard data
curl -H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" \
https://freetodolist.com/api/v1/dashboard
# Get overdue items
curl -H "Authorization: Bearer $API_TOKEN" -H "Accept: application/json" \
https://freetodolist.com/api/v1/overdue_items
# Get a shared list (no authentication required)
curl -H "Accept: application/json" \
https://freetodolist.com/api/v1/shared/def456
We'd love to hear about your experience using the API and any suggestions for improvement.
Send FeedbackRead our announcement blog post for additional information and use cases.
Read Blog Post