My intention is to help you to dissect the calculation in a way that you spot where it goes the wrong way. Usually in such cases, one member is wrong (not in the constraint, no input, etc.). Setting up a cube view helps as it provides a quick entry point for the analysis.
This one will not work, because O#Top cannot be a target:
api.Data.Calculate("A#2A900A01:O#Top:I#None:F#CHI:U1#None:U2#None:U3#None:U4#None:U5#None:U6#External:U7#None:U8#None=A#3ABCDEF0:O#Top:I#Top:F#None:U1#TotProduct:U2#TotC2:U3#TotMarket:U4#TotC4:U5#TotCostCenter:U6#External:U7#None:U8#None")
Try O#Forms, and then try it in a cube view as well to verify you can enter data into that exact POV selection manually. Once you confirmed that, you can try writing (i.e. calculating) data there as previously described.