I’m not planning on setting up a separate internal API for modders; they should be able to use the same general services & utils that the base content uses, e.g. there’s a big unit_conditions.gd file that any ability can call into by saying UnitCondition.apply_status(…) to apply Impaired.
The main way an ability can specify working differently than the general rules is by extending and overriding a function from the base class. For example, action_impact_lance.gd from the Vlad overrides func get_self_heat_dice(context:Context) to only gain heat if it’s catching more than one target in its attack.
The drawback to this is that mods will break as I change the internal implementations // function names. But since these usually represent changes in available context, I don’t see a way to maintain an unchanging API that would still work with the old contexts.