One turn of a team's working cycle, fixed in length, ending in something that could in principle be delivered.
An iteration is one repetition of the cycle: plan, do, review, repeat. The fixed length is the load-bearing part, because it is what converts a queue of work into a series of comparable periods, and it is why scope rather than the end date moves when an iteration runs short of time. An iteration ending in something potentially deliverable is not the same as something delivered: whether the output actually reaches anyone is a separate decision, and the gap between the two is where undelivered increments accumulate.
See also
Where this comes up
Predictive work gets an ending for free, the day the thing is handed over. Iterative work has to manufacture one, which is why so much of it never formally ends at all.
Cadence is the beat the work runs to. Delivery cadence is how often finished output reaches the people who asked for it. Teams conflate the two and then wonder why nobody feels the pace.
Iteration-based agile fixes the length of the cycle and commits a batch to it. Flow-based agile fixes the amount of work in progress and pulls the next item when a slot frees.