Home › Free tools › Stripe basil field checker

Stripe basil field checker for webhook payloads

Matching pack: Subscription Billing Kit (for Stripe) (US$19), an Agent Skill for Claude Code and Cursor with a webhook-driven access model for SaaS subscriptions and helpers that read both API shapes. Read its test report (12 unit tests with basil-shaped fixtures plus 3 request-schema checks against stripe-mock, not real Stripe test mode).

current_period_end is undefined, or invoice.subscription is missing? Stripe removed or moved those fields in API version 2025-03-31.basil. Paste a webhook event or an API object below. This page lists every affected field it finds, where to read it now, and reads the subscription id and billing-period end from either shape.

Nothing you type leaves this browser. All processing happens in this page's own JavaScript. Your inputs are not sent anywhere and not saved: the tool makes no network requests (the page's Content-Security-Policy blocks them), sets no cookies, uses no analytics and loads no third-party scripts or fonts. Once loaded, it works offline. The one request it can make is the anonymous Buy-click count on the pack card (see Privacy). Payloads can contain customer names and emails; you can remove those before pasting and the check still works.

A whole event (with "object": "event", from your logs or the Dashboard's event view), or one object such as a subscription, invoice, invoice line item, invoice item, Checkout Session, PaymentIntent, Charge or credit note. Expanded objects inside it are checked too.

The two samples are the same invoice.paid event before and after basil, with fake ids.

What the checker looks for

These are the payload fields Stripe's changelog lists as removed in 2025-03-31.basil, by object:

Checked 26 Oct 2026. A field that is present with the value null still counts as the old shape: older versions include it as null on, for example, one-off invoices.

Why your webhook still gets the old shape

Each webhook endpoint has its own API version, and Stripe uses it to structure the event payloads it sends there. An event's api_version is the version used to render its data, and it never changes afterwards. So after an SDK upgrade, API calls can return the basil shape while webhook events keep arriving in the old one until you upgrade the endpoint, and resent old events keep their original shape. The checker compares the event's api_version with the fields it finds.

Sources: Stripe: Handle webhook versioning; Stripe API reference: the Event object.

What this checker doesn't do

Read both shapes in your code

Subscription Billing Kit (for Stripe) (US$19) is an Agent Skill for Claude Code and Cursor. It gives your agent a webhook-driven access model for SaaS: Checkout in subscription mode, the Customer Portal, an access policy for all 8 subscription statuses, protection against out-of-order events, trials, cancel-at-period-end, failed-payment hooks, and helpers for Stripe's 2025 "Basil" API changes. Its tests are 12 unit tests with basil-shaped fixtures plus 3 request-schema checks against stripe-mock; none run against real Stripe test mode.

See Subscription Billing Kit (for Stripe) · Read its test report · Guide: current_period_end is undefined

Moving to the next major version, 2026-09-30.endive? Stripe Endive Upgrade Check (US$15): A skill + read-only scanner that finds what breaks when you move to Stripe API 2026-09-30.endive, stripe-node 23 or stripe-python 16, and how to fix it. See Stripe Endive Upgrade Check.