It appears that for CRM Extension objectID returned from a data fetch needs to be a numeric id. The natural id for our extension is an opaque string (and encoded guid).
However, it appears to work to use an ID that is unique to the results being returned in the extension data fetch; that is we don't have to use the real id and can just return a relatively unique number.
That will break if there is caching or anything objectID is used for beyond the data fetch and display context. Does anyone know if objectIDs can be duplicate and overlap as long as they are unique within a data fetch?
(Aside for future seachers: using a string instead of an integer can be a source of the "deserialization error" reported in hubspot)