apidrift
Stripe changed its API. This is the line in your code that breaks.
A real example
Stripe's 2026-10-28.endive release removed payment_method_types from POST /v1/payment_intents (Stripe's changelog). Run against Stripe's own sample repository, stripe-samples/accept-a-payment at 1a57c3b, apidrift flags the 4 servers that still send it, with a link to each line.
Stripe 2026-10-28.endive breaks 4 Stripe call sites ! custom-payment-flow/server/node-typescript/src/server.ts:145 POST /v1/payment_intents via stripe.paymentIntents.create [body_removed] body field payment_method_types was removed why: payment_method_types is sent here ! custom-payment-flow/server/node/server.js:151 POST /v1/payment_intents via stripe.paymentIntents.create [body_removed] body field payment_method_types was removed why: payment_method_types is sent here ! custom-payment-flow/server/python/server.py:118 POST /v1/payment_intents via stripe.PaymentIntent.create [body_removed] body field payment_method_types was removed why: payment_method_types is sent here ! custom-payment-flow/server/ruby/server.rb:82 POST /v1/payment_intents via Stripe::PaymentIntent.create [body_removed] body field payment_method_types was removed why: payment_method_types is sent here
39 Stripe call sites were scanned; the 35 that are unaffected are not reported.
apidrift watches Stripe's published OpenAPI spec. When a release removes a field, retires an endpoint, or makes a new parameter required, it finds the call sites in your repository that send exactly that, and opens one issue with a link to each line. Nothing else: no digest of every change, no issue when you are unaffected.
Read access to code and permission to open issues; nothing else. apidrift downloads a snapshot of your default branch, reads it, and deletes it when the check ends. It never runs your code. It checks after each push to your default branch and whenever Stripe publishes a new spec.
How it works
- Stripe publishes
spec3.sdk.json; apidrift keeps every version (the latest it holds is2026-10-28.endive). - Each release is diffed against the one your code last passed.
- Your Python, JavaScript, TypeScript and Ruby are parsed for Stripe calls and the fields they send. Only the calls the diff touches are reported.
What it does not do yet
- No fix pull requests. That is next.
- Stripe only.
- It does not read which API version your account is pinned to.
- Calls whose arguments it cannot see are marked
?(possibly affected), not guessed. - Other languages get endpoint-level matches from literal URLs only.