What is the difference between bpy.types.IntProperty and bpy.props.IntProperty?
bpy.types.IntProperty is a type, used for the property descriptions in the RNA system for any int property. E.g. you get

&gt;&gt;&gt; type(bpy.data.scenes['Scene'].bl_rna.properties['frame_start'])
&lt;class 'bpy.types.IntProperty'&gt;


Note that i did not actually use bpy.data.scenes['Scene'].frame_start. That would actually evaluate the property and return a standard python int value, not the property definition.

bpy.props.IntProperty on the other hand is a function which creates such a property definition (a constructor).

Technically it's slightly more complicated because in order to create the property as part of a class the function returns a temporary tuple of another function and the arguments you passed. This is then used by a metaclass to create the actual IntProperty and put it inside the class definition.

&gt;&gt;&gt; bpy.props.IntProperty(name="Hello")
(&lt;built-in function IntProperty&gt;, {'name': 'Hello'})