← All issues

Issue #1 · 11 October 2026

The silent 200: when every dashboard is green and checkout is broken

Most API breakages don't throw. They return 200 OK with a slightly different shape. This issue: how that happens, what it costs, and how to catch it in minutes instead of days.

A Tuesday with nothing wrong

A payment provider ships a cleanup: amount becomes amount_cents, status becomes payment_state. Their changelog says nothing, because to them it's an internal rename that 'went out with the v2 migration'.

Your uptime checks pass. Error rates are flat. Every request returns 200. And every order placed since the deploy has a total of undefined.

Why monitoring misses it

Status codes and latency describe the transport, not the contract. A response can be fast, successful and completely wrong for your code.

Undrift learns the shape each dependency actually returns from your real traffic, no OpenAPI files needed, and compares every response with it. A renamed money field is flagged critical the first time it appears, before anyone files a ticket.

Three habits worth stealing

Read fields defensively at the boundary: map provider responses into your own types in one place, so a rename breaks one function, not forty.

Treat money fields as special: a type change from 50000 to "500.00" is the most expensive bug you'll never see in logs.

Close the loop automatically: when the provider rolls back, or your fix ships, Undrift notices the responses match again and resolves the incident on its own.

What's new in Undrift

Copilot can now read your repo, explain which code a drift breaks and open a tolerant fix PR. For low-severity drift you can let it fix and merge on its own, after your CI passes.

Email alerts: get one email per new incident, for the severities you care about. Settings → Alerts.

Notes on API drift, about once a month. Read past issues.