Populating Fcurves Keyframe_Points I am currently working on an importer for captured Shape Key motions. To fasten up the process, I am using the method suggested here. It works perfectly and saves up to a few minutes per import.
I am confused about the way the keyframes are displayed in the viewport.
The keyframes show up in the Graph Editor and Dopesheet (Shape Key Editor view) like this:

Here is what I am doing:
if object_with_shape_keys:

    keyblocks = object_with_shape_keys.data.shape_keys.key_blocks

    for i, key in enumerate(keyblocks):

        if i == 0:
            continue
        # values captured in nano seconds:
        values = self.get_values_for_animation(shape_key_animation_values, frame_count, index = i-1)

        dp = 'key_blocks[&quot;{}&quot;].value'.format(key.name)

        fc = self.get_fcurve(mocap_action, data_path = dp) or None

        # When there is no fcurve existing for that datapath,
        # then we can simply create a new one and populate it
        if not fc:

            fc = mocap_action.fcurves.new(dp, index = i)

            # Create new keyframe points and populate captured values
            fc.keyframe_points.add(count = frame_count)
            fc.keyframe_points.foreach_set('co', [x for co in zip(frames, values) for x in co])


The issue I am having with it is that the keyframes do not show up in the data tab in the object properties and I cannot get them to show up. It looks like this:

When I manually add a keyframe to one of the Shape Keys then I the interface looks like this:

What's worse is that after manually adding a keyframe, the previously working motion is overwritten for that specific Shape Key...
To summarize: There is a discrepancy between the keyframe_points stored in the individual fcurves and the keyframes displayed in the viewport. I am wondering if I am missing something or if this is intended behavior. I hope I made myself clear!
Thanks a lot in advance!
In
fc = mocap_action.fcurves.new(dp, index = i)

Delete index = i.
That sets fc.array_index which is for things like locations (index=0 targets X, 1 targets Y, etc.). You don't need it for shape keys.