Start here. This is the direct spoken answer to practice first.
Why this question matters
A running build and a public contract have different audiences and lifecycles. Operations needs exact artifact provenance for every deployment, while clients need a stable contract that changes version only when incompatible behavior must coexist.
An application version identifies a software build or release, such as 2.8.5, so the team can tell what artifact is running. An API version identifies the request and response contract a client uses, such as v1. The application can deploy many bug fixes, performance improvements, and internal refactors while continuing to serve API v1. I introduce a new API version only when an incompatible contract must be supported separately because clients cannot all migrate together.