There are no general rules, it depends on a lot of factors. In general, any polygon that isn’t fulfilling a purpose is one too many, but you have to weigh that against the time you invest into modeling and the performance benefits you are (not) getting.
A few things to consider:
Animated meshes, especially those with skeletal animations, are generally more expensive per vertex. Depending on where the work is performed (GPU and/or CPU), performance may scale differently.
It’s common for game engines to have a 65k triangle limit per mesh, even on the PC. This is because 65k fits into a 16-bit index buffer, halving memory cost over a 32-bit index buffer. On some devices (especially mobile) this is also a hardware limit. Above that, meshes will have to be split up (which the engine might do automatically), increasing the amount of draw calls required.
Less triangles are usually good, but large (onscreen) triangles are bad. You may actually increase performance by having more triangles, in that case. Also, there’s a minimum amount of triangles (probably around 1000 on a desktop GPU) per draw call, below which there is no performance improvement for having less triangles.
I’ve mentioned draw calls, but I haven’t explained what they are. Basically, you need one draw call to draw one mesh, but you might need more if it has multiple different materials or for multipass rendering. Game engines will usually combine static meshes with the same material into a batch, so you may actually end up with significantly less draw calls if you follow the specifications. Optimizing for draw calls can be crucial (especially on mobile), but it will become less important with low-overhead APIs like D3D12 and Vulkan.
As far as textures are concerned, keep them power-of-two dimensioned (e.g. 256x256, 1024x512, 64x512…). It usually doesn’t hurt to keep them at high resolution, because most game engines can scale the textures automatically as a setting.