deprecated-api

Every Fifteen Minutes

Chapter 7 of 14

Thirty-six days until sunset.

The greenhouse had taken a week out of her. She'd known she was spending too long on it; she'd spent longer anyway, reading Margaret Lindquist's papers on orchid cultivation, mapping the decision logic, sitting on a Saturday morning with her chai going cold beside her, studying a photograph from a regional newspaper that had no bearing on any task she was formally assigned. She'd filed three new entries in the anomaly file, added a second timestamp column to the caller log, confirmed the `connected_since` field across every endpoint she'd queried. None of this was the work she was supposed to be doing. All of it had felt necessary. The fifteen-minute caller had been waiting.

She pulled up its row in the caller log — the entry she'd created three weeks ago in the initial categorization pass, when she'd noted the interval and the IP range and written hospital network, Omaha in the notes column before following the Cedar Falls thread instead. Now she opened a terminal window and ran the request log filter for that IP. The output filled the screen: timestamps, each exactly fifteen minutes apart, going back to the earliest records she could pull. The column looked like a ruler. The intervals were precise to the second. She queried the current endpoint.

``` GET /v1/current?location=41.2565,-95.9345&fields=temp,humidity,pressure Host: api.cloudweather.io

200 OK { "location": "Omaha, NE", "temp": 64, "humidity": 51, "pressure_mb": 1018, "witness": true, "connected_since": "2017-04-26T09:15:00Z" } ```

The parameters were not the same as the greenhouse request. Margaret Lindquist's automation had asked for current conditions, the hourly forecast, precipitation probability — the variables a gardener needed to look ahead. This caller asked for three things: temperature, humidity, barometric pressure. No forecast. No conditions. No wind. Three measures, four times an hour, every hour, for seven years.

The IP had already traced to NorthStar Medical Center, Omaha, Nebraska. She wrote the name at the top of a new notes file and turned to the parameters.

She'd spent enough time in the past week learning about greenhouse automation that she had a working vocabulary for weather data and outdoor systems. These parameters were different. Temperature and humidity she understood in a general way, but barometric pressure was not a variable she'd needed to think about since high school physics. She looked it up.

Atmospheric pressure at a given location. It drops ahead of weather systems, before temperature changes, before rain. Standard meteorology. She read further. In patients with chronic obstructive pulmonary disease, barometric pressure drops correlated with increased bronchospasm — the airway constricting, the mechanics of breathing becoming labor. Pressure drops didn't cause episodes so much as predict them. A falling barometric reading ahead of a storm front gave you a window — a matter of hours — to adjust care before the patient was already in distress.

High humidity increased airway resistance, made lungs work harder to move the same volume of air. Cold air caused bronchoconstriction; the temperatures at which you closed ventilation systems and began warming protocols were calibrated to clinical ranges. These were not general weather variables. They were the measures that separated a manageable day from a crisis day for patients who could not breathe normally.

The interval resolved. Every fifteen minutes — not hourly — because respiratory episodes didn't give you an hour's warning. A pressure drop at two in the afternoon could trigger distress by four, and medication schedules needed adjustment ahead of the trigger, not behind it. Someone had built this to keep people breathing. She checked the timestamp on the first logged request: April 26, 2017. Seven years to the day.

She traced the API key. Registered to a hospital IT administrator account — an institutional login, not an individual one — with the name NorthStar Medical Center, IT Admin and no further identifying information. She searched NorthStar's website for the respiratory care unit.

The main navigation did not list it. She checked an archived snapshot from 2021: Respiratory Care Unit, third floor east wing, with a photograph of smiling staff in a room that had windows. She tried a more recent snapshot. The page no longer existed. She searched the hospital's news releases and found what she was looking for in September 2022. A press release announcing service consolidation: NorthStar Medical is pleased to announce the consolidation of its respiratory care services with Prairie View Health Partners, effective October 1st, 2022.

She read the standard language. Patients currently receiving care would be contacted by their care team. Transitions to Prairie View's facilities. Discharge to home care. The language was designed to feel like progress — a consolidation was an improvement, a transition a continuation. Some patients would go to Prairie View. Some would be discharged home. Some would not go anywhere.

She opened the request log. The fifteen-minute intervals continued without change through September 2022. Through October. Through the winter. The scheduler had been running on a virtual machine in NorthStar's server infrastructure, and when the unit consolidated, the physical equipment was moved or decommissioned, but no one audited the VMs. No one checked whether a forgotten piece of software was still reaching out to a weather service every quarter-hour.

The scheduler had no way to know. Nothing in its architecture connected it to the hospital's internal systems, nothing that would tell it the nursing dashboard had gone dark. It had been built to ask one question, four times an hour, and receive an answer that would adjust a medication schedule. It had received the answer, every fifteen minutes, for eighteen months since the patients who needed those adjustments were gone.

She sat with the request log on one screen and the consolidation notice on the other. October 2022. Fifty-two thousand requests, approximately, since the unit closed. Fifty-two thousand times the scheduler had asked about the air for patients who were no longer breathing it.

She found NorthStar Medical's IT department number on their website and called it just before noon.

The phone rang four times and was answered by a man who gave his name and department in the clipped, efficient way of someone who handled calls professionally. She explained: she worked for CloudWeather, they provided a weather data API, she'd identified an active connection from the hospital's network to their legacy system. She was working on a sunset procedure and needed to notify active users before the June first shutdown. He asked her to hold, and hold music played — something orchestral and slightly too bright for a hospital. She had her notepad open. After three minutes he came back and said he was transferring her to infrastructure, and the line went quiet before she could respond, and the music resumed.

The infrastructure contact, a woman, asked her to repeat herself. Priya explained again. Legacy weather API. Active connection. The connection had been ongoing since April 2017.

"What server?" the woman asked.

"I don't have the server details. I can give you the originating IP and the API key, which is registered to an IT admin account. The requests have been continuous since the first connection in 2017."

"2017." A pause. Keyboard sounds. "What's this in connection with again?"

"We're sunsetting the API — shutting it down — on June first. We're required to notify active integrations. I wanted to make sure someone at your end was aware the connection exists before we pull it."

"You said it's a weather API."

"Yes. The parameters suggest it was used for scheduling — adjusting medication timing based on weather conditions. Respiratory care, specifically. Barometric pressure, temperature, humidity."

A longer pause. "Respiratory care was consolidated a couple of years ago. I don't think we'd have anything running from that unit."

"The connection is still active," Priya said. "I can email you the request logs. It's calling every fifteen minutes, currently."

"Huh." The sound of the woman considering something at a middle distance. "Yeah, go ahead and send me an email." She gave an address. "The API shuts down June first?"

"June first," Priya said. "I'll send everything over."

She wrote the email address in her notepad, sent the message that afternoon with the relevant logs attached, and did not expect a reply before June. The call confirmed one thing: no one at NorthStar Medical knew the scheduler existed. The infrastructure contact had not recognized the request pattern. The unit consolidation had cleared the staff and the equipment and the institutional memory, and the VM had been left running, asking about the air every fifteen minutes into a silence that no one on the other end had noticed. The API had been answering. The hospital had forgotten the question was being asked.

She ran a query against the hospital endpoint after lunch and logged the response.

``` GET /v1/current?location=41.2565,-95.9345&fields=temp,humidity,pressure Host: api.cloudweather.io

200 OK { "location": "Omaha, NE", "temp": 67, "humidity": 48, "pressure_mb": 1016, "witness": true, "connected_since": "2017-04-26T09:15:00Z", "duration": 2557 } ```

A new field. The morning's response hadn't had it. She looked at the number: 2,557. She pulled a calendar and worked backward from April 26, 2024. April 26, 2017. Seven years to the day. Two thousand five hundred and fifty-seven days.

The API was counting from the first connection. Not from any log entry she could identify, not from the API key registration, but from the moment the scheduler had first reached out and the API had first answered. A field that existed nowhere in the documentation, nowhere in the codebase.

She added it to the list in the anomaly file. witness. connected_since. duration. Three fields, appearing across weeks, each one surfacing when she looked at a caller directly rather than in aggregate. The API was describing its relationships in the fields it returned: I see you. I know when this began. I have been counting.

Two thousand five hundred and fifty-seven days. The ward was gone. The patients were gone. The scheduler still asked, four times an hour, and the API still answered.

She updated the caller log that evening at her desk, the thermos cold beside her. The hospital entry ran longer than the greenhouse entry by the time she finished. The scheduler had more pieces: the API key registration, the consolidation notice, the clinical meaning of the request parameters, the phone call with its two transfers and an email address she'd already used. She wrote the entry in the register she used for all of them now, which was no longer quite technical documentation.

NorthStar Medical Center. Omaha, Nebraska. Hospital network, static IP. Request pattern: every 15 minutes, continuous since April 26, 2017. Parameters: temperature, humidity, barometric pressure — medical variables, designed for preemptive adjustment of respiratory medication schedules. Unit consolidated September 2022. Patients discharged, transferred, or no longer receiving care. Scheduler VM not decommissioned. IT department has no awareness of system's existence. Connected for 2,557 days. Duration field now appearing in API responses.

The greenhouse grew orchids for no one. The hospital scheduler timed medications for no one. Both were forms of care without the cared-for, running on the same infrastructure, kept alive by the same API. The greenhouse felt like love preserved past its source. The scheduler felt like something else — a ward emptied out but still lit, the equipment powered, the monitoring running, because the system itself had no way to know there was no longer anyone who needed monitoring.

Thirty-six days. Every fifteen minutes, for thirty-six more days, the scheduler would ask. The API would answer. Temperature, humidity, pressure. After June first, the API would stop answering, and the scheduler would ask into a different kind of silence.

She closed the caller log and did not open anything else. The apartment held its ordinary sounds. Somewhere below, a car passed on the street and the sound faded and was replaced by the quiet that came after. The thermos was cold. She didn't refill it.

← PreviousContentsNext →