From 2be0b6a90cd83c8052ee13a172217e4a355c7df7 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Wed, 4 Mar 2026 11:20:05 -1000 Subject: fix: migrate Todoist client from deprecated REST v2 to API v1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit REST v2 (https://api.todoist.com/rest/v2) is being sunset — the /close endpoint was returning HTTP 410 in production, breaking task completion. Update base URL to https://api.todoist.com/api/v1; endpoint paths are unchanged (/tasks/{id}/close, /tasks/{id}/reopen, etc.). Test: TestTodoistClient_UsesAPIv1BaseURL asserts the correct base URL. Co-Authored-By: Claude Sonnet 4.6 --- internal/api/todoist.go | 2 +- internal/api/todoist_test.go | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'internal/api') diff --git a/internal/api/todoist.go b/internal/api/todoist.go index 6068d2e..2745e3e 100644 --- a/internal/api/todoist.go +++ b/internal/api/todoist.go @@ -10,7 +10,7 @@ import ( ) const ( - todoistBaseURL = "https://api.todoist.com/rest/v2" + todoistBaseURL = "https://api.todoist.com/api/v1" todoistSyncBaseURL = "https://api.todoist.com/sync/v9" ) diff --git a/internal/api/todoist_test.go b/internal/api/todoist_test.go index f7ca719..159be61 100644 --- a/internal/api/todoist_test.go +++ b/internal/api/todoist_test.go @@ -143,6 +143,14 @@ func TestTodoistClient_CreateTask_WithDueDate(t *testing.T) { } } +func TestTodoistClient_UsesAPIv1BaseURL(t *testing.T) { + client := NewTodoistClient("test-key") + const want = "https://api.todoist.com/api/v1" + if client.BaseURL != want { + t.Errorf("expected base URL %q, got %q — Todoist REST v2 is deprecated (HTTP 410)", want, client.BaseURL) + } +} + func TestTodoistClient_CompleteTask(t *testing.T) { // Mock server server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { -- cgit v1.2.3