I think this should not be too hard to track. If you follow the link provided by rafi there is a legacy note:
In OpenGL versions before 3.0, the user was allowed to ignore the generation step entirely. The user could just decide that “3” is a valid object name, and start using it like an object. The implementation would then have to accept that and create the object behind the scenes when you first start using it. In GL 3.0, this behavior was deprecated. In core GL 3.1 and above, this is no longer allowed. Regardless of the version of OpenGL, it is always good practice to use glGen* rather than making up your own object names.
Then lookout for OpenGL-Objects you use and check if you created them using their appropriate glGen* function or not e.g. you use the id directly instead of calling glGen* first which returns you an id for it.
Objects created with glGen* are: Buffers, Framebuffers, Programpipelines, Queries, Renderbuffers, Samplers, Textures, Transformfeedbacks and Vertexarrays.
How do you create your OpenGL-Context and which profile and version do you create?