Did your Stripe sync stop working sometime after March 2025?
Paste a Stripe object below, or a list of field paths, one per line. In a few seconds you'll see exactly which fields your integration depends on that Stripe's 2025-03-31.basilrelease removed or moved. Nothing you paste leaves your browser — the check runs entirely on this page.
Check your data
This part of the page needs JavaScript. The table below works without it.
Every field Basil removed or moved
Source for every row: Stripe's own API release notes for the Basil version, cross-checked against Trueness's internal Stripe integration reference. See the source list at the bottom of this section.
| Object | Field | Removed or moved | Where to read it in 2026 | Symptom in an old sync |
|---|---|---|---|---|
| Invoice | invoice.charge | removed | invoice.payments.data[n].payment.payment_intent, then PaymentIntent.latest_charge | Code reading invoice.charge gets undefined with no error. A reconciliation job that expects one charge per invoice silently drops the charge reference. |
| Invoice | invoice.payment_intent | removed | invoice.payments.data[n].payment.payment_intent | Payment-intent lookups keyed off invoice.payment_intent return undefined, and any code assuming a single payment intent per invoice misses the later payments on an invoice that now supports several. |
| Invoice | invoice.subscription | moved | invoice.parent.subscription_details.subscription | Invoices that were generated by a subscription stop showing that link. A sync that groups invoices under their subscription treats every one of them as a one-off invoice instead. |
| Invoice | invoice.tax | removed | sum(invoice.total_taxes[].amount) | Invoice totals read as untaxed even on invoices where tax was actually collected, because the old scalar tax field is gone and the new field is an array. |
| Invoice | invoice.total_tax_amounts | removed | invoice.total_taxes[] | A tax breakdown table that reads invoice.total_tax_amounts renders empty rows or throws when it tries to iterate a field that no longer exists. |
| Invoice Line Item | line.price | moved | line.pricing.price_details.price | Line-item price lookups return undefined, and any per-line price display on an invoice goes blank. |
| Invoice Line Item | line.plan | moved | line.pricing.price_details.price (Plans are Prices) | Legacy plan-based logic that reads line.plan gets undefined; Plans were folded into Prices before Basil, but the field itself is only removed as of Basil. |
| Invoice Line Item | line.tax_rates | moved | line.taxes[n].tax_rate_details.tax_rate (only where line.taxes[n].type is tax_rate_details) | Per-line tax rate reporting goes blank, and a tax audit that lists which lines used which tax rate silently under-reports. |
| Invoice Line Item | line.tax_amounts | moved | line.taxes[] | Per-line tax amount totals read as undefined, understating the taxed portion of the invoice in any downstream rollup. |
| Invoice Line Item | line.amount_excluding_tax | moved | line.subtotal (before discounts and taxes) | A pre-tax subtotal column reads undefined, and a report that subtracts tax from the line total to reconcile it produces a wrong number instead of an obvious error. |
| Invoice Line Item | line.unit_amount_excluding_tax | moved | line.pricing.unit_amount_decimal | Per-unit price-before-tax figures disappear from any per-seat or per-unit billing report. |
| Invoice Line Item | line.subscription / line.subscription_item | moved | line.parent.subscription_item_details.subscription / .subscription_item | Line items stop linking back to the subscription or subscription item that generated them, breaking any per-subscription revenue grouping. |
| Invoice Line Item | line.proration | moved | line.parent.subscription_item_details.proration or line.parent.invoice_item_details.proration | Proration lines stop being flagged as proration, so a plan-change report that filters proration lines either drops them or double-counts them as regular charges. |
| Credit Note | credit_note.tax_amounts | moved | credit_note.total_taxes[] | A credit note's tax breakdown goes missing from any refund-reconciliation report. |
| Credit Note Line Item | credit_note_line_item.tax_amounts | moved | credit_note_line_item.taxes[] | Per-line credit-note tax amounts read as undefined. |
| Credit Note | credit_note*.amount_excluding_tax | moved | credit_note.total_excluding_tax, or the line's subtotal | Pre-tax credit amounts disappear from refund reports. |
| Credit Note | credit_note*.unit_amount_excluding_tax | moved | the line's pricing.unit_amount_decimal | Per-unit pre-tax credit amounts disappear from refund reports. |
| Subscription | subscription.current_period_start | removed | items.data[n].current_period_start (each Subscription Item now carries its own period) | The old single "current period" field reads undefined, and a dashboard field showing when the current billing period began goes blank. |
| Subscription | subscription.current_period_end | removed | items.data[n].current_period_end; the renewal date is max(items.data[*].current_period_end) | current_period_end missing is a common symptom searched directly: a renewal-date display, a dunning trigger, or a churn-risk job that reads this field silently stops updating. |
| Subscription | subscription.coupon / subscription.promotion_code | removed | subscription.discounts[] (stackable array) | A discount report that reads the old singular coupon field shows subscriptions as having no discount at all, even when one is applied. |
| Coupon | coupons with no specified end time | removed | not supported for new coupons; every new coupon must specify an end time | An automation that creates open-ended coupons the way it always has starts failing on coupon creation with no explanation in the response body it used to check. |
| Usage records | /v1/subscription_items/{id}/usage_records (legacy UsageRecords) | removed | Billing Meters | A usage-based billing sync that posts to the legacy usage_records endpoint starts returning errors on every call. |
| Usage records | recurring.usage_type = metered, aggregate_usage | removed | a Meter with default_aggregation.formula | Price objects created the old metered way stop working with new subscriptions; usage aggregation silently falls back to nothing. |
| Invoice preview | GET /v1/invoices/upcoming | removed | POST /v1/invoices/create_preview | A next-invoice preview call that hits the old endpoint fails outright rather than returning a stale shape. |
| List pagination | total_count expansion on any list endpoint | removed | no total count is obtainable from the API at all | A page-count or record-count display that expands total_count starts showing undefined or a stale cached figure instead of updating. |
| Event destinations | page parameter on event destination listing | removed | cursor-based pagination | An event-destination listing job that pages with the old page parameter stops advancing past the first page. |
Sources. Stripe's own API release notes for the Basil version; Trueness's internal Stripe integration reference, section 2.1; Trueness growth claims register, CLM-019 (active).
Want this checked automatically, every day, against your live data?
This page is a one-time, manual check. Trueness's free Drift Report does the same kind of comparison automatically, every day, against your actual Stripe and HubSpot data — read-only, no card. It isn't installable yet. Leave your email and we'll let you know the moment it is.
Early-access sign-up opens with launch. Until then, this checker is free to use as often as you like.