The changelog limitation hit me hard when I built a migration tool last year. Here’s what worked: combine the issue fetch with manual pagination through the changelog resource. After getting your initial issue with jira_client.issue(issue_key, expand='changelog'), check if issue.changelog.total exceeds what you got back. Then use jira_client._session.get() to grab additional pages by building the URL yourself: {jira_base_url}/rest/api/2/issue/{issue_key}/changelog?startAt={offset}&maxResults=100. You stay within the library’s auth framework but get full pagination control. The magic is _session - it gives you the underlying requests session that jira-python uses, so you keep all the auth and connection pooling without dropping to raw REST calls.