You're twenty minutes from landing, the descent has started, and then the plane levels off and begins a slow, patient loop. Then another. If you've ever stared out the window wondering why is my flight circling?, the answer is almost always a holding pattern — a deliberate, ATC-assigned racetrack in the sky designed to park your aircraft safely until it's clear to continue. Here's what a hold is, why it happens, and how you can watch one unfold live on a flight tracker.
What a holding pattern is
A hold is a racetrack-shaped flight path: two straight legs joined by two 180° turns, flown over a fixed point in space (a navaid or a named waypoint) at an altitude ATC assigns. Standard legs are about a minute long, turns are to the right by default, and multiple aircraft can stack in the same hold at different altitudes, each descending a rung as the one below is released. It's a way to convert a distance problem ("too many planes want the runway") into a time problem ("wait here and burn a few minutes") without anyone having to slow to a stop — because airplanes can't stop.

Why flights hold
A hold is a symptom, and the causes cluster into a few buckets:
- Traffic congestion at the destination. The most common reason. More aircraft want to land than the runway can accept per hour, so ATC meters the flow — and the overflow waits in a hold. This is the airborne face of the same congestion that shows up on the ground as Ground Delay Programs and Ground Stops.
- Weather at the field. Low visibility, a thunderstorm sitting over the airport, or a strong crosswind can drop the acceptance rate to a trickle or pause arrivals entirely until it passes.
- A blocked or closed runway. An aircraft that goes around, a disabled aircraft on the runway, or a brief closure sends everyone behind into a hold while it's sorted.
- Sequencing and spacing. Sometimes it's simply about building the right gaps between arrivals.
Not every "circle" is a textbook published hold, either — controllers often achieve the same delay with long radar vectors (a series of heading changes) or by slowing you down. From the cabin it all feels like circling.
How to spot a hold live in the data
Here's the fun part: a holding pattern has an unmistakable signature in ADS-B data, so you can catch one happening in real time. A holding aircraft shows a track that loops back over the same coordinates, its heading reversing roughly every minute, altitude pinned at a level, and groundspeed reduced. Pull the live feed for an area and you can see it.
Using SkyLink API's ADS-B endpoint, you'd fetch aircraft over the arrival airport and watch the position and track fields:
# Aircraft within ~50 km of London Heathrow's holding fixes
curl "https://skylink-api.p.rapidapi.com/adsb/aircraft?lat=51.47&lon=-0.45&radius=50" \
-H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: skylink-api.p.rapidapi.com"Poll that every few seconds and an aircraft in the hold gives itself away: its latitude/longitude trace out a closed loop, its track swings through a full reversal and back, and its altitude holds steady while ground_speed sits low. (During busy periods over big hubs — London's Heathrow stacks are the classic example — you'll often find several aircraft doing exactly this at once.) That repeating-loop pattern is also the basis for programmatically detecting holds, the mirror image of detecting takeoffs and landings from ADS-B.

Should you worry?
Almost never. Holding is a routine, well-practiced tool, and aircraft carry fuel reserves that account for it. The usual outcome is a delay of minutes; if a hold runs long enough to threaten those reserves, the crew diverts to an alternate — also routine. If you want to know why you specifically are holding, the destination's delay picture usually tells the story: cross-reference with FAA delay programs and you'll often find a Ground Delay Program or weather event at the field.
Building something that watches for this? SkyLink API gives you a free tier of 1,000 requests/month across ADS-B tracking and FAA delays, with paid plans starting at $19/mo for production traffic. It's available through the free trial — sign up, grab a key, and watch the stack from your own code.
