Updating retention period for `last_activity_at` values on the Copilot user management API to 90 days
Starting Tuesday, February 18, 2025, we are updating our retention policy so that the last_activity_at value of the user management API will only be stored by GitHub for 90 days. Previously, the contents of this field were retained indefinitely.
See what’s changing
- Old Policy: Unlimited retention of the
last_activity_atvalue. - New Policy: A rolling 90-day retention period. If your data’s
last_activity_atexceeds 90 days, its value will be set tonil.
Expected impact
Only users with no new activity within a 90-day window will have their last_activity_at value replaced by nil. In practice this means that on the changeover date, users whose last activity with Copilot took place prior to November 20, 2024 will have the value for their last_activity_at replaced on a rolling-forward basis.
Detail
Clarifying the behavior of last_activity_at in the context of the current changes:
- Assigning a Seat: When you assign a seat to a user, the
last_activityvalue for that seat will beniluntil the user interacts with it for the first time. This is true even if the user had previous activity from a different seat assignment in another organization. - Removing a Seat: When you remove a seat from a user, the
last_activitydata for that user is set tonilin the revoking org. Their data is unaffected for other admins who have granted that user a seat in other orgs, when pulled for those orgs. - Reassigning a User to Seat: If you remove a seat from a user and later assign a new seat to the same user, the
last_activityvalue for the new seat will again beniluntil the user’s next interaction, regardless of whether the seat was previously assigned to them. -
Deleting a User: If you delete a user, all associated
last_activitydata for that user is immediately deleted. -
Determining Dormancy: When retrieving activity data for a seat, you can use the
created_atandlast_activityvalues to determine dormancy. For example, ifcreated_atis more than 30 days ago andlast_activityis either more than 30 days ago ornil, the seat may considered dormant. -
Activity Data for Assigned Seats: When retrieving
last_activitydata for assigned seats, you will receive anilvalue if the assignee’s most recent activity record is older than 90 days.
Note: Behavior of the data will remain consistent with the Activity Report, available in Admin UI.
Why we’re making this change
Our external data surfaces must be quality first. Retaining data of this volume for multi-year retention periods increases storage and backup overhead significantly, as well as the cost and complexity of quality checks. A time-bound retention policy allows us to maintain efficiency while still offering relevant, up-to-date information. This will allow us to further improve the resilience of the data that is returned by the endpoint, while limiting the impact only to very old records.
Next steps
You don’t need to take any action if you rely on the last_activity_at field for current activity records.
However, if you have workflows or reports that depend on usage dates for active seats that have been dormant for 90 or more days, please be aware that these values will become nil for records older than 90 days, for dates on or before November 20, 2024, as of Tuesday, February 18, 2025. While exceptionally rare, we encourage you to store API responses for cases where this will become problematic.