louislam/uptime-kuma · warning · Error
Flip UP to DOWN
Error message
Flip UP to DOWN
What it means
Thrown when a monitor has Upside-Down (invert) enabled and the beat would otherwise be UP: flipStatus turns UP into DOWN, and this error ensures the heartbeat records as DOWN. This is intended behavior, not a defect.
Source
Thrown at server/model/monitor.js:909
allowAutoTopicCreation: this.kafkaProducerAllowAutoTopicCreation,
ssl: this.kafkaProducerSsl,
clientId: `Uptime-Kuma/${version}`,
interval: this.interval,
connectionTimeout: this.timeout,
},
JSON.parse(this.kafkaProducerSaslOptions)
);
bean.status = UP;
bean.ping = dayjs().valueOf() - startTime;
} else {
throw new Error("Unknown Monitor Type");
}
if (this.isUpsideDown()) {
bean.status = flipStatus(bean.status);
if (bean.status === DOWN) {
throw new Error("Flip UP to DOWN");
}
}
retries = 0;
} catch (error) {
if (error?.name === "CanceledError") {
bean.msg = `timeout by AbortSignal (${this.timeout}s)`;
} else {
bean.msg = error.message;
}
if (this.getSaveErrorResponse() && error?.response?.data !== undefined) {
await this.saveResponseData(bean, error.response.data);
}
// If UP come in here, it must be upside down mode
// Just reset the retries
if (this.isUpsideDown() && bean.status === UP) {View on GitHub (pinned to 6b5ea01557)
Solutions
- Understand this is by design: disable 'Invert' in the monitor to restore normal UP=good semantics
- If the alert is unexpected, the target reached a state you did not anticipate — investigate the target itself
Defensive patterns
Strategy: validation
Validate before calling
// This is by-design behavior when invert is on; disable it if normal semantics are wanted if (!wantInverted) monitor.upsideDown = false;
Prevention
- Only enable Upside-Down when you genuinely want to alert on an UP target
- Document inverted monitors clearly so the DOWN heartbeat is not mistaken for a real failure
When it happens
Trigger: An upside-down monitor receives a successful/UP response from its target.
Common situations: Monitoring for an unwanted condition (a maintenance page that should NOT be up, a port that should stay closed). The resulting DOWN is the desired alert.
Related errors
- ${bean.msg}, but keyword is ${present|not} in [${data}]
- JSON query does not pass (comparing ${response} ${this.jsonP
- No heartbeat in the time window
- Failed to load docker host config
- JSON query does not pass (comparing ${response} ${monitor.js
AI-assisted analysis of louislam/uptime-kuma@6b5ea01557 (2026-08-12).
Data as JSON: /api/errors/a2d874f05b7282be.
Report an issue: GitHub.