Changelog
Changes to the /v1 API, newest first. Each entry says whether anything breaks and what to change in
your client. Follow it as an Atom feed.
Versioning and deprecation
This policy applies from 2026-10-24.
- Additive changes ship in place. A new route, a new optional field or a new operation type arrives in the current version. Write your client to ignore fields it does not know.
- A breaking change gets a new version. The old version keeps working for at least 90 days next to the new one. The change is announced here first, with the date the old version stops.
- A retiring version says so in its answers. They carry a
Deprecationheader with the date it was deprecated, aSunsetheader with the date it stops, and aLinkheader withrel="deprecation"pointing to this page. No version is retiring today. - Dates are UTC.
2026-10-29: draft goals must name who to write to (bug fix)
- A goal with no target is a
422.POST /v1/drafts/goalsandPATCH /v1/drafts/goals/{user_id}/{goal_id}refuse a goal whosetarget_contact_idsandtarget_role_idsare both empty, withhint.required_one_of. Before, such a goal was saved and silently drafted to clients. APATCHthat leaves both lists out is not checked, so existing goals can still be renamed or paused. - An empty
target_role_idsmeans every role. A goal that names only contacts drafts to every role those contacts hold, not onlyCLIENT. draft_goal_min_confidenceis 0.8 when not set, and a goal that sets a lower value now reaches contacts at that value instead of being held at 0.8.- With no active goal, drafts go to active clients only. Before, they went to clients at every stage.
2026-10-24: contacts say who wrote first and last (additive: nothing breaks)
- Eight new timestamps. Every contact answer, and each row of
GET /v1/rolesandPOST /v1/roles/search, carriesuser_direct_first_contact/user_direct_last_contact(the user wrote to the contact),contact_direct_first_contact/contact_direct_last_contact(the contact wrote to the user),user_indirect_first_contact/user_indirect_last_contact(the user wrote with the contact in Cc or Bcc) andother_indirect_first_contact/other_indirect_last_contact(someone else wrote to the user with the contact in Cc or Bcc). Each is UTC, read-only, andnullwhen it never happened. first_contactandlast_contactcome from them.first_contactis the earliest of the four firsts andlast_contactthe latest of the four lasts, over every address of the contact. Sorting, the date filters, and the contact dates shown on drafts and roles use the same values. Bulk mail no longer counts, so for some contactslast_contactmoves earlier once. A contact with no address readsnullfor both.