When using the Contact API we can get a contact with list-memberships field and can see all active list the contact is in, along with their timestamp as the inserted date/time.
But I also want to know what list they were in previously and a list of date/time on list membership change. Is there an API I can accomplish the task?
There isn't currently a public API to get a contact's prior list memberships. Once a contact leaves a list, that list will not longer appear in the contact's list-memberships array. If you have the inclination, I'm happy to pass this feedback along internally, but I would encourage you to check out the Ideas Forum on the HubSpot Community. There, you can create a post including your use case that product and other customers can see.