First: You don’t define the key handles ahead of time – they are returned by AddKey(). It’s “handle” as in “code pointer to thing” not “handle” as in “artist movable tangent.”
Second: The best way I’ve found is to read using the Keys member, and update using SetKeys()
FKeyHandle h1, h2;
h1 = TheCurve.AddKey(0.f, 0.f, true);
h2 = TheCurve.AddKey(1.f, 0.1f, true);
auto keys = TheCurve.Keys; // make a copy
keys[0].ArriveTangent = -1.0f;
keys[0].LeaveTangent = 1.0f;
keys[0].InterpMode = ERichCurveInterpMode::RCIM_Cubic;
keys[0].TangentMode = ERichCurveTangentMode::RCTM_Break;
TheCurve.SetKeys(keys); // update and broadcast to listeners