Agent Skills: Stripe Knowledge Patch (Acacia to Dahlia)

Stripe changes since training cutoff (latest: 2026-03-25.dahlia) -- named API versions, stripe-node v21 Decimal type, stripe-python v15 dict removal, Billing Mode, Accounts v2, Event Destinations. Load before working with Stripe.

UncategorizedID: nevaberry/nevaberry-plugins/stripe-knowledge-patch

Install this agent skill to your local

pnpm dlx add-skill https://github.com/Nevaberry/nevaberry-plugins/tree/HEAD/plugins/stripe-knowledge-patch/skills/stripe-knowledge-patch

Skill Files

Browse the full folder contents for stripe-knowledge-patch.

Download Skill

Loading file tree…

plugins/stripe-knowledge-patch/skills/stripe-knowledge-patch/SKILL.md

Skill Metadata

Name
stripe-knowledge-patch
Description
"Stripe changes since training cutoff (latest: 2026-03-25.dahlia) -- named API versions, stripe-node v21 Decimal type, stripe-python v15 dict removal, Billing Mode, Accounts v2, Event Destinations. Load before working with Stripe."

Stripe Knowledge Patch (Acacia to Dahlia)

Claude's baseline knowledge covers the Stripe API through 2024-06-20 and stripe-node ~16.x / stripe-python ~10.x. This skill covers changes from Acacia (2024-09-30) through Dahlia (2026-03-25).

API Version Timeline

| Version | Date | Key Changes | |---------|------|-------------| | Acacia | 2024-09-30 | Named version scheme begins | | Basil | 2025-03-31 | total_count removed, deferred subscription creation, Meters API | | Clover | 2025-09-30 | Billing Mode flexible becomes default | | Dahlia | 2026-03-25 | Decimal types, Checkout UI mode renames, Stripe.js renames |

Format: YYYY-MM-DD.name (e.g., 2025-03-31.basil). Monthly additive releases reuse the same name.

SDK Breaking Changes Quick Reference

stripe-node v21 (Dahlia) -- Decimal Fields

All decimal_string fields changed from string to Stripe.Decimal:

// Reading: now Stripe.Decimal, not string
const rate = session.currency_conversion.fx_rate;
rate.toString(); // "1.23"
rate.toNumber(); // 1.23

// Writing: must use Decimal.from()
unit_amount_decimal: Stripe.Decimal.from('9.99')

// Arithmetic
a.add(b); a.sub(b); a.mul(b); a.div(b, 6, 'half-up');

Minimum Node version: 18. Webhook parsing throws if wrong method used (v1 vs v2).

stripe-python v15 (Dahlia) -- No More dict Inheritance

# BROKEN in v15:
customer.get("name")     # AttributeError
customer.items()          # Returns subscription items, not dict items!
dict(customer)            # Empty dict
for key in customer: ...  # No longer iterates

# Use instead:
customer.name             # Attribute access
customer["name"]          # Bracket notation
customer.to_dict()        # Get plain dict

Decimal fields: use decimal.Decimal("9.99") not "9.99". Min Python: 3.9.

Basil Breaking Changes

  • total_count removed from list endpoints -- no more list.total_count
  • Checkout subscription creation deferred -- subscription created after payment, not on session creation
  • Legacy usage-based billing removed -- migrate to Meters API
  • Upcoming Invoice API replaced -- use stripe.invoices.createPreview()

Stripe.js Method Renames (Dahlia)

| Removed | Replacement | |---------|-------------| | stripe.initCheckout() | stripe.initCheckoutElements() | | stripe.initEmbeddedCheckout() | stripe.createEmbeddedCheckoutPage() | | stripe.confirmCardPayment() | stripe.confirmPayment() | | stripe.confirmCardSetup() | stripe.confirmSetup() | | stripe.handleCardAction() | stripe.handleNextAction() |

elements.update() now returns a Promise. Layout radios no longer accepts boolean -- use 'accordion' or 'tabs'.

Checkout Session UI Modes (Dahlia)

| Old Value | New Value | |-----------|-----------| | embedded | embedded_page | | custom (preview) | elements | | -- | form | | -- | hosted_page |

const session = await stripe.checkout.sessions.create({
  ui_mode: 'elements',
  mode: 'payment',
  line_items: [{ price: 'price_xxx', quantity: 1 }],
});

Billing Mode (Flexible)

Default in Clover+. Supports mixed intervals, billing thresholds, partial payments.

const subscription = await stripe.subscriptions.create({
  customer: 'cus_xxx',
  items: [{ price: 'price_xxx' }],
  billing_mode: 'flexible',  // default in Clover+, explicit in Basil
});

See billing.md for Credit Grants API.

Billing Credits (Credit Grants)

Prepaid/promotional credits for metered prices (Meters API only, not legacy Usage Records).

const grant = await stripe.billing.creditGrants.create({
  customer: 'cus_xxx',
  amount: { type: 'monetary', monetary: { value: 1000, currency: 'usd' } },
  applicability_config: { scope: { price_type: 'metered' } },
  category: 'paid',  // or 'promotional'
  effective_at: Math.floor(Date.now() / 1000),
  expires_at: Math.floor(Date.now() / 1000) + 86400 * 90,
});

Credits apply after discounts, before taxes.

Event Destinations API

Unified API for webhooks, Amazon EventBridge, and Azure Event Grid.

const destination = await stripe.v2.core.eventDestinations.create({
  type: 'webhook_endpoint',
  url: 'https://example.com/webhook',
  enabled_events: ['payment_intent.succeeded'],
});

// Test connectivity
await stripe.v2.core.events.ping({ destination: destination.id });

See event-destinations.md for thin vs snapshot events.

Accounts v2 (Connect)

Configuration-based capabilities replace old account types. One Account for both connected accounts and customers.

const account = await stripe.v2.core.accounts.create({
  contact_email: 'jenny@example.com',
  display_name: 'Jenny Rosen',
  identity: { country: 'us', entity_type: 'company' },
  configuration: {
    merchant: { capabilities: { card_payments: { requested: true } } },
    customer: { capabilities: { automatic_indirect_tax: { requested: true } } },
  },
  defaults: {
    currency: 'usd',
    responsibilities: { fees_collector: 'stripe', losses_collector: 'stripe' },
  },
  include: ['configuration.merchant', 'configuration.customer', 'identity', 'requirements'],
});

Configurations: merchant (accept payments), customer (be charged), recipient (receive transfers). V2 responses return null for unincluded properties -- use include param. See accounts-v2.md.

Payment Line Items

L2/L3 transaction data for interchange savings (commercial cards), better auth rates, and reconciliation.

const paymentIntent = await stripe.paymentIntents.create({
  amount: 5000,
  currency: 'usd',
  payment_method_types: ['card'],
  payment_line_items: [
    {
      product_code: 'SKU-123',
      product_description: 'Widget',
      quantity: 2,
      unit_cost: 2000,
      tax_amount: 500,
      discount_amount: 0,
      total_amount: 4500,
    },
  ],
});

Crypto Payments (Basil+)

Stablecoin payments that settle as fiat in your Stripe balance.

const pi = await stripe.paymentIntents.create({
  amount: 1000,
  currency: 'usd',
  payment_method_types: ['crypto'],
});

stripe-python v15 Decimal Fields

from decimal import Decimal

stripe.Price.create(
    unit_amount_decimal=Decimal("9.99"),  # not "9.99"
    currency="usd",
    recurring={"interval": "month"},
    product="prod_xxx",
)

V2 Amount types consolidated to stripe.v2.Amount. See sdk-breaking-changes.md.

Reference Files

| File | Contents | |------|----------| | sdk-breaking-changes.md | Full stripe-node v21 and stripe-python v15 migration details | | billing.md | Billing Mode (Flexible), Credit Grants, metered pricing | | accounts-v2.md | Accounts v2 (Connect) configuration-based capabilities | | event-destinations.md | Unified webhook/EventBridge/Event Grid API | | payments.md | Payment Line Items (L2/L3), Crypto Payments |