Your next outage is already published on someone else's changelog.
Driftpatch watches the APIs that break production, tells you which change hits your code, and hands you the patch. Start with one fix for your repo — free, done by hand, by us.
15 providers watched · 433 changes recorded · last check UTC.
What a missed change actually costs
- A method removed without a deprecation window costs you a weekend.
- A sunset you missed costs you a customer.
- A changelog you read three weeks late costs you the window to fix it quietly.
Watch → Match → Patch
-
1. Watch
Live
We watch the changelogs, release notes, and API specs of the providers you depend on. Every change is tagged breaking, deprecation, or informational, and linked to the provider's own notice.
-
2. Match
Live on the feed · by hand for your repo
On the public feed, matching a change to its severity happens automatically. For the free-fix offer below, a person reads your repo by hand to check whether a tracked change actually touches your code.
-
3. Patch
Live · by hand
Our fix engine produces a real patch: a branch, a diff, a pull-request description, and a written record of what it checked. It never pushes to your repo and never opens a pull request by itself. A person reviews the diff and runs your tests before anything is sent to you.
A real patch, from a real notice — not a mockup
Anthropic retired Claude Haiku 3, with Claude Haiku 4.5 named as the replacement in its own migration notes. Driftpatch found the file that still pinned the old model name, confirmed the replacement wouldn't break the surrounding call (no conflicting parameters, no incompatible SDK calls), and produced this:
- Provider notice
- Anthropic retired Claude Haiku 3 on and named Claude Haiku 4.5 as the replacement.
- Read the provider's own notice
- @@ -6,7 +6,7 @@ from dotenv import load_dotenv
- load_dotenv()
- class AnthropicGenerator(BaseGenerator):
- Removed line: def __init__(self, api_key: str = None, model: str = "
claude-3-haiku-20240307"): - Added line: def __init__(self, api_key: str = None, model: str = "claude-haiku-4-5-20251001"):
- self.api_key = api_key or os.getenv("ANTHROPIC_API_KEY")
- self.model = model
- self.client = Anthropic(api_key=self.api_key)
- Repository
- This diff comes from a public repository, name withheld — the code and the fix are real; we're just not naming someone else's project to sell ours.
- Tests
- The project's own test suite ran clean against this change: 57 tests passed before and after; the 2 that failed were unrelated and failed the same way on both sides.
- Pull request
- This patch has not been opened as a pull request anywhere — that only happens with the repo owner's review, never automatically.
We've run this engine 38 times against 37 real public repos. It produced a patch 7 times. The other 31 times, it told us why it couldn't — and refused rather than guess.
From the feed this week
-
OpenAI API spec changed: 1 breaking
Why: oasdiff:response-property-one-of-added
1 spec finding (oasdiff)
- Breaking
POST /threads/runsadded `subschema #1, subschema #2, subschema #3, subschema #4, subschema #5, subschema #6, subschema #7, subschema #8, subschema #9, subschema #10` to the `oneOf[#/components/schemas/RunStreamEvent]/` response property `oneOf` list for the response status `200` (media type: text/event-stream)
- Breaking
-
Plaid API spec changed: 9 breaking, 3 behaviour changes
Why: oasdiff:response-property-became-nullable, oasdiff:request-property-enum-value-removed
12 spec findings (oasdiff)
- Breaking
POST /asset_report/audit_copy/getthe response property `report/items/items/accounts/items/owners/items/addresses/items/data/street` became nullable for the status `200` - Breaking
POST /beta/credit/v1/bank_employment/getthe response property `bank_employment_reports/items/items/items/bank_employment_accounts/items/owners/items/addresses/items/data/street` became nullable for the status `200` - Breaking
POST /cra/check_report/income_insights/getthe response property `report/items/items/bank_income_accounts/items/owners/items/addresses/items/data/street` became nullable for the status `200` - Breaking
POST /cra/check_report/verification/getthe response property `report/voa/items/items/accounts/items/owners/items/addresses/items/data/street` became nullable for the status `200` - Breaking
POST /cra/monitoring_insights/getthe response property `items/items/accounts/items/owners/items/addresses/items/data/street` became nullable for the status `200` - Breaking
POST /cra/partner_insights/getthe response property `report/items/items/items/accounts/items/owners/items/addresses/items/data/street` became nullable for the status `200` - Breaking
POST /credit/bank_income/getthe response property `bank_income/items/items/items/bank_income_accounts/items/owners/items/addresses/items/data/street` became nullable for the status `200` - Breaking
POST /link/token/createremoved the enum value `charge card` of the request property `account_filters/credit/account_subtypes/items/` - Breaking
POST /link/token/createremoved the enum value `installment` of the request property `account_filters/loan/account_subtypes/items/` - Behaviour
POST /cashflow_report/getthe response property `accounts/items/allOf[subschema #2]/owners/items/addresses/items/data/street` became nullable for the status `200` - Behaviour
POST /employers/searchthe response property `employers/items/address/allOf[subschema #1: AddressData]/street` became nullable for the status `200` - Behaviour
POST /processor/identity/getthe response property `account/allOf[subschema #2]/owners/items/addresses/items/data/street` became nullable for the status `200`
- Breaking
-
Tax webhook summary and calculation requests now use Global IDs
Why: label:Breaking API Change
Get your first fix free
10 of 10 slots left
Tell us one repo. We check it by hand against the breaking changes we already track. If one hits your code, we build you a real patch. If nothing matches yet, we tell you that too.
- To submit
- A repo URL and an email. Nothing else. No card, no account, no call required.
- What you get, and by when
- We reply within two business days — yes, we found a match and we're building your patch, or no, nothing matches yet. That's the only time commitment on this page: we don't promise when a patch arrives, because that depends on when the provider ships a change that actually hits your code, and we don't control that.
- What we ask back, only if we deliver a patch
- 20 minutes to tell us whether it's worth paying for, and permission to mention the result without your name or your repo's name.
- What we never do
- We don't push anything to your repo. We don't open a pull request without your review. We don't touch your tests. The patch is yours to apply or ignore.
Questions engineers ask first
- Why not just read the changelogs myself?
Because there are 15 providers across payments, messaging, commerce, and AI models, and none of them schedule a change around your calendar.
We read every one of them, tag what's breaking, and link back to their own notice — one feed, not 15 tabs.
- Doesn't Dependabot already do this?
Dependabot watches the packages pinned in your lockfile — versions you choose when to upgrade.
We watch the third-party APIs you call over the network, where the provider decides when something changes, with no lockfile to pin it.
- What if the alert is a false positive — or what if you miss something?
We tune conservative on purpose: every false-positive guard we've shipped is written down, tested, and the exact wording that triggered a tag is shown next to the change.
We also publish what we can't catch — a break with no announcement still slips through today, and we'd rather say so than pretend we're complete.
- What happens to my code?
For the free-fix slots, a person reads your repo by hand. Nothing automated touches it, and we never push a branch or open a pull request ourselves.
You get a patch and a written explanation of what it changed and what it left alone. You decide if and when it goes in.
- Is this free forever?
The public feed stays free, always — at most one email a week, unsubscribe in one click, no card.
The 10 free-fix slots are limited and done by hand. What ongoing repo coverage costs after that is in the pricing section below: Team and Business at launch price, locked for the first 10 slots who take one.
Pricing
Why the price is here: so nobody wastes their time, and so the price is a real conversation on the 20-minute call — not a surprise after the fact.
-
Free
$0
Works today
- The public breaking-change feed — every provider we watch, tagged, linked to source.
-
Team
$79/mo
launch price, locked for the first 10 slots
Works today
- Nothing in this tier yet; the free feed above already runs.
Planned
- 1 repo tracked
- 10 providers
- Breaking-change alerts by email and Slack
- Weekly checks
-
Business
$299/mo
launch price, locked for the first 10 slots
Works today
- Nothing in this tier yet.
Planned
- 5 repos
- Unlimited providers
- Daily checks
- Draft pull requests opened for you
- API and webhooks
No billing code exists for Team or Business. These are priced intentions, shown to test willingness to pay before we build the metering and billing behind them.
Get your first fix free
Tell us one repo. We check it by hand against the breaking changes we already track. If one hits your code, we build you a real patch. If nothing matches yet, we tell you that too. 10 of 10 slots left.