In my testing on 20D (12.2.21.503) it seems the checkpoint-id attribute returned in the get-checkpoint-response is ignored and not included in the subsequent <set-checkpoint-request>. Request/response flow:
First, I get:
<m:get-checkpoint-request><m:request-context><m:parameter name="id" value="00ABCD"/></m:request-context></m:get-checkpoint-request>
Which I respond to with:
<get-checkpoint-response><checkpoint-data checkpoint-id="001234">UEs...</checkpoint-data></get-checkpoint-response>
Moving to the next screen, I get this (no checkpoint-id attribute) so I have to make another query to my backend to find it again (just as in get-checkpoint-request) so I can update it:
<m:set-checkpoint-request><m:request-context><m:parameter name="id" value="00ABCD"/></m:request-context><m:checkpoint-data>UEs...</m:checkpoint-data></m:set-checkpoint-request>
Then I respond with:
<set-checkpoint-response checkpoint-id="001234"></set-checkpoint-response>
And the checkpoint-id is then sent in subsequent <set-checkpoint-requests>, as expected:
<m:set-checkpoint-request><m:request-context><m:parameter name="id" value="00ABCD"/></m:request-context><m:checkpoint-data checkpoint-id="001234">UEs...</m:checkpoint-data></m:set-checkpoint-request>
Obviously there is a workaround (just query for the checkpoint using the request-context parameters) but it would be nice to save that additional query - and the documentation seems to indicate it should work as I expect:
"This data will only be tagged with a checkpoint-id if a previous set or get checkpoint response specified one."
https://documentation.custhelp.com/euf/assets/devdocs/cloud20d/IntelligentAdvisor/en/Content/Guides/Developer_Guide/Connector_Framework/WSDL_Reference_12_2_13/Data_service/CheckpointData.htm