You can just use a closed path with two curves, one slightly "bulgier" than the other:
<svg height="100" width="500" viewBox="0 40 100 60">
<path d="M 0 60 Q 50 40 100 60 Q 50 45 0 60 Z" />
</svg>
In this, the first curve is M 0 60 Q 50 40 100 60
, i.e. a quadratic curve from 0,60 to 100,600 over the control point 50,40, and the second curve is the ... 100 60 Q 50 45 0 60
part, defining a curve starting at "wherever we already were", i.e. 100,60 (the end point of our first curve), ending at 0,60 (the start point of our first curve) and controlled by 50,45
The Z
is technically not necessary here, but since this is a closed path, we might as well explicitly encode that this is a closed path.
And if you want "tapered ends" then you can use two cubic curves instead, with the control points near the end points.
<svg height="100" width="500" viewBox="0 40 100 60">
<path d="M 0 60 C 10 40 90 40 100 60 C 80 45 20 45 0 60 Z" />
</svg>
Of course, this is only an approximation, but it'll get you pretty much what you need in almost all "just a bow" cases. And for the cases where this doesn't suffice, solve those on their own.