Except for the 's' that is missing in your code, you should avoid using bpy.ops for that.
Use for example something like this instead:
import bpy
obj = bpy.data.collections['Collection'].objects['Cube']
decimate = obj.new(name='Decimate', type='DECIMATE')
decimate.ratio = 0.5
The reasons are: bpy.ops is slower (it will cause GUI updates, etc.) and most importantly you can't have a guaranty to access the modifier by its name like bpy.context.object.modifiers["Decimate"] as Blender will name it differently in case of name conflicts (Decimate, Decimate.001, Decimate.002, ...). ObjectModifiers.new() on the other hand, adds new modifier and returns a reference to the newly added modifier:
>>> C.object.modifiers.new('Decimate', 'DECIMATE')
bpy.data.objects['Cube'].modifiers["Decimate"]
>>> C.object.modifiers.new('Decimate', 'DECIMATE')
bpy.data.objects['Cube'].modifiers["Decimate.001"]
...