# Ricardo's Universe ## Docs - [Welcome to My Documentation](https://docs.ricardoneudorfer.com/welcome.md): Here you can find everything you need to know about my software and services. The documentation is designed to help you get started quickly, whether you are using self-hosted software, NPM modules, Packagist packages, or hosted, ready-to-use services. - NPM Modules > StripeKit [StripeKit - Installation](https://docs.ricardoneudorfer.com/npm-modules/stripekit/installation.md): A complete, production-ready Stripe toolkit for Node.js and TypeScript. StripeKit wraps the official stripe SDK with a simple, opinionated layer for customers, payment methods, payments, checkout, subscriptions, invoices, coupons and webhooks and more. - NPM Modules > StripeKit [StripeKit - Getting Started](https://docs.ricardoneudorfer.com/npm-modules/stripekit/getting-started.md): StripeKit wraps the official stripe SDK with a simple, opinionated layer for customers, payment methods, payments, checkout, subscriptions, invoices, coupons and webhooks, so you can integrate Stripe into your own application without becoming a Stripe API expert. - NPM Modules > StripeKit [StripeKit - Choosing a Mode](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modes.md): This is the single most important decision StripeKit asks you to make, because it decides what your payment and checkout calls hand back to you. - NPM Modules > StripeKit [StripeKit - Type Reference](https://docs.ricardoneudorfer.com/node-modules/stripekit/types.md): TypeScript has interfaces for plain data, so StripeKit represents every input and result as a documented interface, the same approach the Stripe SDK itself uses internally. This page lists the shape of every object you will send to, or receive from, StripeKit. - NPM Modules > StripeKit > Setup [StripeKit - Configuration](https://docs.ricardoneudorfer.com/npm-modules/stripekit/configuration.md): StripeKit is configured with a single call to StripeKit.init(). - NPM Modules > StripeKit > Setup [StripeKit - Timezones](https://docs.ricardoneudorfer.com/npm-modules/stripekit/timezones.md): Stripe stores every timestamp as a Unix epoch, which is UTC by definition. StripeKit always does the conversion in two explicit steps, never one - NPM Modules > StripeKit > Setup [StripeKit - Storage Adapter](https://docs.ricardoneudorfer.com/npm-modules/stripekit/storage-adapter.md): This page explains, in plain terms, what a storage adapter actually is, why StripeKit works fine without one, and exactly what changes once you add one. - NPM Modules > StripeKit > Setup [StripeKit - Money and Currency](https://docs.ricardoneudorfer.com/npm-modules/stripekit/money-and-currency.md): All amounts are always in minor currency units (cents), matching Stripe's own convention, so there's never ambiguity between 19.99 and 1999. - NPM Modules > StripeKit > Setup [StripeKit - Error Handling](https://docs.ricardoneudorfer.com/npm-modules/stripekit/error-handling.md): Every module throws typed exceptions you can catch and branch on. - NPM Modules > StripeKit > Stripe [StripeKit - Stripe Elements](https://docs.ricardoneudorfer.com/npm-modules/stripekit/stripe/elements.md): Stripe Elements is inherently browser code, so it cannot run in Node.js. StripeKit ships an optional companion frontend module you serve alongside your Node.js backend, and it never touches your server process. - NPM Modules > StripeKit > Modules [StripeKit - Modules Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/overview.md): Every action StripeKit can perform is available under kit..(). Initialize StripeKit once and share the instance across your app. - NPM Modules > StripeKit > Modules > Customers [StripeKit - Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/customers/overview.md): kit.customers creates, retrieves, updates, deletes and lists Stripe customers, and normalizes every result into a flat, predictable record. - NPM Modules > StripeKit > Modules > Customers [StripeKit - List Customers](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/customers/list.md): Lists customers from Stripe, optionally filtered by email, with cursor-based pagination. - NPM Modules > StripeKit > Modules > Customers [StripeKit - Retrieve Customer](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/customers/retrieve.md): Fetches a single customer from Stripe by ID and normalizes it. - NPM Modules > StripeKit > Modules > Customers [StripeKit - Find or Create Customer by Email](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/customers/find-or-create-by-email.md): Looks up a customer by email and returns it if one already exists; otherwise creates a new one. This is the method to use at the start of any flow where you don't yet know if the person has a Stripe customer, for example before starting a checkout or attaching a payment method. - NPM Modules > StripeKit > Modules > Customers [StripeKit - Create Customer](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/customers/create.md): Creates a new customer in Stripe. If a storage adapter is configured, the normalized record is persisted via saveCustomer() immediately after creation. - NPM Modules > StripeKit > Modules > Customers [StripeKit - Update Customer](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/customers/update.md): Updates an existing customer. Only the fields you pass are changed; omitted fields are left untouched in Stripe. - NPM Modules > StripeKit > Modules > Customers [StripeKit - Sync Customer](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/customers/sync.md): Re-fetches a customer from Stripe and persists the fresh record via your storage adapter's saveCustomer(). Functionally identical to retrieve(), except the result is always written to storage, even if you don't do anything else with the return value. - NPM Modules > StripeKit > Modules > Customers [StripeKit - Delete Customer](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/customers/delete.md): Permanently deletes a customer in Stripe. This cannot be undone through the Stripe API. - NPM Modules > StripeKit > Modules > Payment Methods [StripeKit - Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payment-methods/overview.md): kit.paymentMethods manages the cards and bank accounts saved against a Stripe customer: listing them, attaching or detaching them, marking one as default, and setting up new ones for future use. - NPM Modules > StripeKit > Modules > Payment Methods [StripeKit - Create Setup Intent](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payment-methods/create-setup-intent.md): Creates a Stripe SetupIntent, the entry point for saving a customer's card for later use, without charging them anything right now. Confirmed on the frontend with Stripe Elements. - NPM Modules > StripeKit > Modules > Payment Methods [StripeKit - List Payment Methods](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payment-methods/list.md): Lists every payment method attached to a customer, and marks which one is their default. - NPM Modules > StripeKit > Modules > Payment Methods [StripeKit - Attach Payment Method](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payment-methods/attach.md): Attaches a payment method that already exists in Stripe (typically created client-side by Stripe Elements or Stripe.js) to a customer, optionally making it the default. - NPM Modules > StripeKit > Modules > Payment Methods [StripeKit - Detach Payment Method](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payment-methods/detach.md): Detaches a payment method from whichever customer it is currently attached to. The payment method itself is not deleted, it simply becomes unattached and can no longer be charged. - NPM Modules > StripeKit > Modules > Payment Methods [StripeKit - Set Default Payment Method](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payment-methods/set-default.md): Marks a payment method as the customer's default for future invoices and off-session charges. This is a thin, single-purpose wrapper, use it instead of kit.customers.update() when this is the only thing you want to change. - NPM Modules > StripeKit > Modules > Payment Methods [StripeKit - Sync Payment Methods](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payment-methods/sync.md): Re-pulls a customer's payment methods from Stripe and persists them via your storage adapter. This is a direct alias for list(), it behaves identically. - NPM Modules > StripeKit > Modules > Payments [StripeKit - Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payments/overview.md): kit.payments handles one-off charges (Stripe PaymentIntents), respecting the mode configured on StripeKit.init(). See Choosing a mode if you haven't already. - NPM Modules > StripeKit > Modules > Payments [StripeKit - Pay With Saved Method](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payments/pay-with-saved-method.md): Charges a payment method the customer already saved, entirely server-side, with no customer interaction. This is the method for recurring or scheduled off-session charges that are not part of a Stripe Subscription, for example a usage-based top-up. - NPM Modules > StripeKit > Modules > Payments [StripeKit - Create Payment](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payments/create.md): Starts a one-off payment. What actually happens depends on the resolved flow, see Choosing a mode. - NPM Modules > StripeKit > Modules > Payments [StriepKit - Retrieve Payment](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payments/retrieve.md): Fetches a PaymentIntent by ID and returns the full KitPaymentRecord shape. - NPM Modules > StripeKit > Modules > Payments [StripeKit - Confirm Payment](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payments/confirm.md): Confirms a PaymentIntent server-side. Mostly useful for payment methods that don't require any customer interaction on the frontend at all. - NPM Modules > StripeKit > Modules > Payments [StripeKit - Cancel Payment](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payments/cancel.md): Cancels a PaymentIntent that has not yet succeeded. - NPM Modules > StripeKit > Modules > Payments [StripeKit - Sync Payment](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/payments/sync.md): Re-fetches a PaymentIntent from Stripe and persists it via your storage adapter's savePayment(). - NPM Modules > StripeKit > Modules > Checkout [StripeKit - Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/checkout/overview.md): kit.checkout is the high-level module for building your own checkout flow: one-off payments or subscriptions, with optional custom form fields and coupon codes, in either the api or elements flow. - NPM Modules > StripeKit > Modules > Checkout [StripeKit - Get Checkout](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/checkout/get.md): Fetches the current state of a checkout session, including any custom field values already submitted. - NPM Modules > StripeKit > Modules > Checkout [StripeKit - Create](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/checkout/create.md): Starts a new checkout session, either a one-off payment or a subscription, in whichever flow resolves from your configured mode (or flowOverride). - NPM Modules > StripeKit > Modules > Checkout [StripeKit - Checkout Submit Fields](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/checkout/submit-fields.md): Validates and stores custom field values for a checkout session created with customFields, and best-effort mirrors them onto the underlying Stripe PaymentIntent or Subscription's metadata. - NPM Modules > StripeKit > Modules > Checkout [StripeKit - Checkout Apply Coupon](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/checkout/apply-coupon.md): Applies (or removes) a coupon code on an existing checkout session in the elements flow, recalculating and updating the underlying PaymentIntent's amount. - NPM Modules > StripeKit > Modules > Checkout [StripeKit - Checkout Mark Complete](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/checkout/mark-complete.md): Marks a checkout session's stored status as 'complete'. This is bookkeeping only, it does not talk to Stripe. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/overview.md): kit.subscriptions creates, retrieves, cancels, resumes and updates Stripe subscriptions, with built-in support for custom fields and both UTC and local period timestamps. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Create Subscription](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/create.md): Creates a new subscription for an existing customer. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Retrieve Subscription](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/retrieve.md): Fetches a subscription by ID. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Cancel Subscription](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/cancel.md): Cancels a subscription, either immediately or at the end of the current billing period. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Resume Subscription](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/resume.md): Undoes a scheduled cancel-at-period-end, so the subscription keeps renewing. Has no effect on a subscription that isn't scheduled to cancel, and cannot bring back a subscription that has already been cancelled immediately. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Toggle Subscription Collection Mode](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/toggle-collection-method.md): Switches a subscription between automatically charging the customer's default payment method, and emailing them an invoice to pay manually. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Update Subscription Fields](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/update-fields.md): Updates the custom field values (field_ metadata entries) stored on a subscription, for example letting a customer change a seat count or a plan-specific option after the subscription already exists. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Apply Subscription Promotion Code](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/apply-promotion-code.md): Applies a coupon's promotion code to an already-active subscription, discounting future invoices. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - List Subscriptions By Customer](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/list-by-customer.md): Lists all subscriptions belonging to a customer, optionally filtered by status. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Find Subscription By Metadata](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/find-by-metadata.md): Finds a single active-ish subscription by matching a metadata key/value pair. Useful when you've tagged a subscription with your own identifier (for example a team_id) and want to look it up later without storing the Stripe subscription ID yourself. - NPM Modules > StripeKit > Modules > Subscriptions [StripeKit - Sync Subscription](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/subscriptions/sync.md): Re-fetches a subscription from Stripe and persists it via your storage adapter's saveSubscription(). - NPM Modules > StripeKit > Modules > Invoices [StripeKit - Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/invoices/overview.md): kit.invoices reads, pays, voids and finalizes Stripe invoices, and normalizes every line item plus both UTC and local timestamps for due, paid and issued dates. - NPM Modules > StripeKit > Modules > Invoices [StripeKit - Retrieve Invoice](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/invoices/retrieve.md): Fetches a single invoice by ID and normalizes it, including its line items and timestamps. - NPM Modules > StripeKit > Modules > Invoices [StripeKit - List Invoices By Customer](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/invoices/list-by-customer.md): Lists a customer's invoices, optionally filtered by status. - NPM Modules > StripeKit > Modules > Invoices [StripeKit - List Invoices By Subscription](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/invoices/list-by-subscription.md): Lists all invoices generated by a specific subscription, most recent first. - NPM Modules > StripeKit > Modules > Invoices [StripeKit - Pay Invoice With Saved Method](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/invoices/pay-with-saved-method.md): Pays an open invoice using a saved payment method, for example one that was left unpaid because a subscription uses send_invoice collection, or because an automatic charge failed. - NPM Modules > StripeKit > Modules > Invoices [StripeKit - Void Invoice](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/invoices/void-invoice.md): Voids an invoice that hasn't been paid, permanently marking it uncollectable and closing it out. This does not issue a refund; it is for invoices that were never paid in the first place. - NPM Modules > StripeKit > Modules > Invoices [StripeKit - Finalize Draft Invoice](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/invoices/finalize.md): Finalizes a draft invoice, locking its line items and making it payable. Most invoices Stripe generates for subscriptions are finalized automatically; this method is for invoices you created manually and left as a draft, or for adjusting a draft invoice's auto-advance behavior before finalizing. - NPM Modules > StripeKit > Modules > Invoices [StripeKit - Sync Invoice](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/invoices/sync.md): Re-fetches an invoice from Stripe and persists it via your storage adapter's saveInvoice(). - NPM Modules > StripeKit > Modules > Coupons [StripeKit - Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/coupons/overview.md): kit.coupons creates, validates, applies and deactivates coupons and promotion codes. Every coupon StripeKit creates is backed by both a Stripe Coupon (the discount rule) and a Stripe PromotionCode (the customer-facing code), which is why StripeKit's records always carry both a stripeCouponId and a stripePromotionCodeId. - NPM Modules > StripeKit > Modules > Coupons [StripeKit - Create Coupon](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/coupons/create.md): Creates a new coupon and a matching promotion code in Stripe. - NPM Modules > StripeKit > Modules > Coupons [StripeKit - Validate Coupon](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/coupons/validate.md): Checks whether a plain-text coupon code is currently valid, active, and not expired or exhausted. Returns null instead of throwing when the code is invalid, so it's safe to call directly from checkout-form validation. - NPM Modules > StripeKit > Modules > Coupons [StripeKit - Apply Coupon To Subscription](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/coupons/apply-to-subscription.md): Applies a promotion code to a subscription. This is a thin convenience wrapper around kit.subscriptions.applyPromotionCode(), kept on the coupons module so both directions of the relationship (coupon → subscription and subscription → coupon) are discoverable from either module. - NPM Modules > StripeKit > Modules > Coupons [StripeKit - List Coupons](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/coupons/list.md): Lists active promotion codes, most recently created first. - NPM Modules > StripeKit > Modules > Coupons [StripeKit - Deactivate Coupon](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/coupons/deactivate.md): Deactivates a promotion code so it can no longer be redeemed by new customers. Subscriptions that already have the discount applied keep it; this only prevents future redemptions. - NPM Modules > StripeKit > Modules > Webhooks [StripeKit - Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/webhooks/overview.md): kit.webhooks verifies, deduplicates and processes incoming Stripe webhook events, and can automatically re-sync the relevant object into your storage adapter before calling your own handler. - NPM Modules > StripeKit > Modules > Webhooks [StripeKit - Webhook Process](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/webhooks/process.md): Verifies a raw webhook payload against your webhookSecret, deduplicates it by Stripe event ID, automatically re-syncs the relevant object into your storage adapter, and then calls whichever of your handlers matches the event type. - NPM Modules > StripeKit > Modules > Webhooks [StripeKit - Events Reference](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/webhooks/events-reference.md): Every Stripe event type StripeKit recognizes, the handler key you can provide for it, and exactly what StripeKit does automatically before calling your handler (when autoSync is not set to false). - NPM Modules > StripeKit > Modules > Sync [StripeKit - Overview](https://docs.ricardoneudorfer.com/npm-modules/stripekit/modules/sync/overview.md): kit.sync is a thin convenience module that groups together the individual sync() methods already available on other modules, plus one aggregate method that pulls a customer's entire state in one call. Nothing here does anything you couldn't already do by calling the individual modules directly; it exists purely so a full reconciliation reads as one clear call instead of five. - Packagist Packages > StripeKit [StripeKit - Installation](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/installation.md): A complete, production-ready Stripe toolkit for PHP. StripeKit wraps the official stripe/stripe-php SDK with a simple, opinionated layer for customers, payment methods, payments, checkout, subscriptions, invoices, coupons and webhooks and more. - Packagist Packages > StripeKit [StripeKit - Getting Started](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/getting-started.md): StripeKit wraps the official `stripe/stripe-php` SDK with a simple, opinionated layer for customers, payment methods, payments, checkout, subscriptions, invoices, coupons and webhooks, so you can integrate Stripe into your own application without becoming a Stripe API expert. - Packagist Packages > StripeKit [StripeKit - Choosing a Mode](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modes.md): This is the single most important decision StripeKit asks you to make, because it decides what your payment and checkout calls hand back to you. - Packagist Packages > StripeKit [StripeKit - Type Reference](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/types.md): PHP has no compile-time interfaces for plain data, so StripeKit represents every input and result as a documented associative array, the same approach the Stripe PHP SDK itself uses internally. This page lists the shape of every array you will send to, or receive from, StripeKit. - Packagist Packages > StripeKit > Setup [StripeKit - Configuration](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/configuration.md): StripeKit is configured with a single call to StripeKit::init(). - Packagist Packages > StripeKit > Setup [StripeKit - Timezones](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/timezones.md): Stripe stores every timestamp as a Unix epoch, which is UTC by definition. StripeKit always does the conversion in two explicit steps, never one - Packagist Packages > StripeKit > Setup [StripeKit - Storage Adapter](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/storage-adapter.md): This page explains, in plain terms, what a storage adapter actually is, why StripeKit works fine without one, and exactly what changes once you add one. - Packagist Packages > StripeKit > Setup [StripeKit - Money and Currency](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/money-and-currency.md): All amounts are always in minor currency units (cents), matching Stripe's own convention, so there's never ambiguity between `19.99` and `1999`. - Packagist Packages > StripeKit > Setup [StripeKit - Error Handling](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/error-handling.md): Every module throws typed exceptions you can catch and branch on. - Packagist Packages > StripeKit > Stripe [StripeKit - Stripe Elements](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/stripe/elements.md): Stripe Elements is inherently browser code, so it cannot run in PHP. StripeKit ships an optional companion frontend module you serve alongside your PHP backend, and it never touches your PHP process. - Packagist Packages > StripeKit > Modules [StripeKit - Modules Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/overview.md): Every action StripeKit can perform is available under `$kit->->()`. Initialize `StripeKit` once and share the instance across your app. - Packagist Packages > StripeKit > Modules > Customers [StripeKit - Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/customers/overview.md): $kit->customers creates, retrieves, updates, deletes and lists Stripe customers, and normalizes every result into a flat, predictable record. - Packagist Packages > StripeKit > Modules > Customers [StripeKit - List Customers](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/customers/list.md): Lists customers from Stripe, optionally filtered by email, with cursor-based pagination. - Packagist Packages > StripeKit > Modules > Customers [StripeKit - Retrieve Customer](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/customers/retrieve.md): Fetches a single customer from Stripe by ID and normalizes it. - Packagist Packages > StripeKit > Modules > Customers [StripeKit - Find or Create Customer by Email](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/customers/find-or-create-by-email.md): Looks up a customer by email and returns it if one already exists; otherwise creates a new one. This is the method to use at the start of any flow where you don't yet know if the person has a Stripe customer, for example before starting a checkout or attaching a payment method. - Packagist Packages > StripeKit > Modules > Customers [StripeKit - Create Customer](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/customers/create.md): Creates a new customer in Stripe. If a storage adapter is configured, the normalized record is persisted via saveCustomer() immediately after creation. - Packagist Packages > StripeKit > Modules > Customers [StripeKit - Update Customer](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/customers/update.md): Updates an existing customer. Only the fields you pass are changed; omitted fields are left untouched in Stripe. - Packagist Packages > StripeKit > Modules > Customers [StripeKit - Sync Customer](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/customers/sync.md): Re-fetches a customer from Stripe and persists the fresh record via your storage adapter's saveCustomer(). Functionally identical to retrieve(), except the result is always written to storage, even if you don't do anything else with the return value. - Packagist Packages > StripeKit > Modules > Customers [StripeKit - Delete Customer](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/customers/delete.md): Permanently deletes a customer in Stripe. This cannot be undone through the Stripe API. - Packagist Packages > StripeKit > Modules > Payment Methods [StripeKit - Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payment-methods/overview.md): $kit->paymentMethods manages the cards and bank accounts saved against a Stripe customer: listing them, attaching or detaching them, marking one as default, and setting up new ones for future use. - Packagist Packages > StripeKit > Modules > Payment Methods [StripeKit - Create Setup Intent](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payment-methods/create-setup-intent.md): Creates a Stripe SetupIntent, the entry point for saving a customer's card for later use, without charging them anything right now. Confirmed on the frontend with Stripe Elements. - Packagist Packages > StripeKit > Modules > Payment Methods [StripeKit - List Payment Methods](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payment-methods/list.md): Lists every payment method attached to a customer, and marks which one is their default. - Packagist Packages > StripeKit > Modules > Payment Methods [StripeKit - Attach Payment Method](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payment-methods/attach.md): Attaches a payment method that already exists in Stripe (typically created client-side by Stripe Elements or Stripe.js) to a customer, optionally making it the default. - Packagist Packages > StripeKit > Modules > Payment Methods [StripeKit - Detach Payment Method](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payment-methods/detach.md): Detaches a payment method from whichever customer it is currently attached to. The payment method itself is not deleted, it simply becomes unattached and can no longer be charged. - Packagist Packages > StripeKit > Modules > Payment Methods [StripeKit - Set Default Payment Method](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payment-methods/set-default.md): Marks a payment method as the customer's default for future invoices and off-session charges. This is a thin, single-purpose wrapper, use it instead of $kit->customers->update() when this is the only thing you want to change. - Packagist Packages > StripeKit > Modules > Payment Methods [StripeKit - Sync Payment Methods](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payment-methods/sync.md): Re-pulls a customer's payment methods from Stripe and persists them via your storage adapter. This is a direct alias for list(), it behaves identically. - Packagist Packages > StripeKit > Modules > Payments [StripeKit - Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payments/overview.md): $kit->payments handles one-off charges (Stripe PaymentIntents), respecting the mode configured on StripeKit::init(). See Choosing a mode if you haven't already. - Packagist Packages > StripeKit > Modules > Payments [StripeKit - Pay With Saved Method](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payments/pay-with-saved-method.md): Charges a payment method the customer already saved, entirely server-side, with no customer interaction. This is the method for recurring or scheduled off-session charges that are not part of a Stripe Subscription, for example a usage-based top-up. - Packagist Packages > StripeKit > Modules > Payments [StripeKit - Create Payment](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payments/create.md): Starts a one-off payment. What actually happens depends on the resolved flow, see Choosing a mode. - Packagist Packages > StripeKit > Modules > Payments [StriepKit - Retrieve Payment](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payments/retrieve.md): Fetches a PaymentIntent by ID and returns the full KitPaymentRecord shape. - Packagist Packages > StripeKit > Modules > Payments [StripeKit - Confirm Payment](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payments/confirm.md): Confirms a PaymentIntent server-side. Mostly useful for payment methods that don't require any customer interaction on the frontend at all. - Packagist Packages > StripeKit > Modules > Payments [StripeKit - Cancel Payment](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payments/cancel.md): Cancels a PaymentIntent that has not yet succeeded. - Packagist Packages > StripeKit > Modules > Payments [StripeKit - Sync Payment](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/payments/sync.md): Re-fetches a PaymentIntent from Stripe and persists it via your storage adapter's savePayment(). - Packagist Packages > StripeKit > Modules > Checkout [StripeKit - Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/checkout/overview.md): $kit->checkout is the high-level module for building your own checkout flow: one-off payments or subscriptions, with optional custom form fields and coupon codes, in either the api or elements flow. - Packagist Packages > StripeKit > Modules > Checkout [StripeKit - Get Checkout](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/checkout/get.md): Fetches the current state of a checkout session, including any custom field values already submitted. - Packagist Packages > StripeKit > Modules > Checkout [StripeKit - Create](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/checkout/create.md): Starts a new checkout session, either a one-off payment or a subscription, in whichever flow resolves from your configured mode (or flowOverride). - Packagist Packages > StripeKit > Modules > Checkout [StripeKit - Checkout Submit Fields](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/checkout/submit-fields.md): Validates and stores custom field values for a checkout session created with customFields, and best-effort mirrors them onto the underlying Stripe PaymentIntent or Subscription's metadata. - Packagist Packages > StripeKit > Modules > Checkout [StripeKit - Checkout Apply Coupon](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/checkout/apply-coupon.md): Applies (or removes) a coupon code on an existing checkout session in the elements flow, recalculating and updating the underlying PaymentIntent's amount. - Packagist Packages > StripeKit > Modules > Checkout [StripeKit - Checkout Mark Complete](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/checkout/mark-complete.md): Marks a checkout session's stored status as 'complete'. This is bookkeeping only, it does not talk to Stripe. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/overview.md): $kit->subscriptions creates, retrieves, cancels, resumes and updates Stripe subscriptions, with built-in support for custom fields and both UTC and local period timestamps. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Create Subscription](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/create.md): Creates a new subscription for an existing customer. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Retrieve Subscription](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/retrieve.md): Fetches a subscription by ID. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Cancel Subscription](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/cancel.md): Cancels a subscription, either immediately or at the end of the current billing period. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Resume Subscription](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/resume.md): Undoes a scheduled cancel-at-period-end, so the subscription keeps renewing. Has no effect on a subscription that isn't scheduled to cancel, and cannot bring back a subscription that has already been cancelled immediately. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Toggle Subscription Collection Mode](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/toggle-collection-method.md): Switches a subscription between automatically charging the customer's default payment method, and emailing them an invoice to pay manually. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Update Subscription Fields](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/update-fields.md): Updates the custom field values (field_ metadata entries) stored on a subscription, for example letting a customer change a seat count or a plan-specific option after the subscription already exists. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Apply Subscription Promotion Code](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/apply-promotion-code.md): Applies a coupon's promotion code to an already-active subscription, discounting future invoices. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - List Subscriptions By Customer](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/list-by-customer.md): Lists all subscriptions belonging to a customer, optionally filtered by status. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Find Subscription By Metadata](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/find-by-metadata.md): Finds a single active-ish subscription by matching a metadata key/value pair. Useful when you've tagged a subscription with your own identifier (for example a team_id) and want to look it up later without storing the Stripe subscription ID yourself. - Packagist Packages > StripeKit > Modules > Subscriptions [StripeKit - Sync Subscription](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/subscriptions/sync.md): Re-fetches a subscription from Stripe and persists it via your storage adapter's saveSubscription(). - Packagist Packages > StripeKit > Modules > Invoices [StripeKit - Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/invoices/overview.md): $kit->invoices reads, pays, voids and finalizes Stripe invoices, and normalizes every line item plus both UTC and local timestamps for due, paid and issued dates. - Packagist Packages > StripeKit > Modules > Invoices [StripeKit - Retrieve Invoice](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/invoices/retrieve.md): Fetches a single invoice by ID and normalizes it, including its line items and timestamps. - Packagist Packages > StripeKit > Modules > Invoices [StripeKit - List Invoices By Customer](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/invoices/list-by-customer.md): Lists a customer's invoices, optionally filtered by status. - Packagist Packages > StripeKit > Modules > Invoices [StripeKit - List Invoices By Subscription](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/invoices/list-by-subscription.md): Lists all invoices generated by a specific subscription, most recent first. - Packagist Packages > StripeKit > Modules > Invoices [StripeKit - Pay Invoice With Saved Method](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/invoices/pay-with-saved-method.md): Pays an open invoice using a saved payment method, for example one that was left unpaid because a subscription uses send_invoice collection, or because an automatic charge failed. - Packagist Packages > StripeKit > Modules > Invoices [StripeKit - Void Invoice](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/invoices/void-invoice.md): Voids an invoice that hasn't been paid, permanently marking it uncollectable and closing it out. This does not issue a refund, it is for invoices that were never paid in the first place. - Packagist Packages > StripeKit > Modules > Invoices [StripeKit - Finalize Draft Invoice](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/invoices/finalize.md): Finalizes a draft invoice, locking its line items and making it payable. Most invoices Stripe generates for subscriptions are finalized automatically; this method is for invoices you created manually and left as a draft, or for adjusting a draft invoice's auto-advance behavior before finalizing. - Packagist Packages > StripeKit > Modules > Invoices [StripeKit - Sync Invoice](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/invoices/sync.md): Re-fetches an invoice from Stripe and persists it via your storage adapter's saveInvoice(). - Packagist Packages > StripeKit > Modules > Coupons [StripeKit - Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/coupons/overview.md): $kit->coupons creates, validates, applies and deactivates coupons and promotion codes. Every coupon StripeKit creates is backed by both a Stripe Coupon (the discount rule) and a Stripe PromotionCode (the customer-facing code), which is why StripeKit's records always carry both a stripeCouponId and a stripePromotionCodeId. - Packagist Packages > StripeKit > Modules > Coupons [StripeKit - Create Coupon](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/coupons/create.md): Creates a new coupon and a matching promotion code in Stripe. - Packagist Packages > StripeKit > Modules > Coupons [StripeKit - Validate Coupon](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/coupons/validate.md): Checks whether a plain-text coupon code is currently valid, active, and not expired or exhausted. Returns null instead of throwing when the code is invalid, so it's safe to call directly from checkout-form validation. - Packagist Packages > StripeKit > Modules > Coupons [StripeKit - Apply Coupon To Subscription](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/coupons/apply-to-subscription.md): Applies a promotion code to a subscription. This is a thin convenience wrapper around $kit->subscriptions->applyPromotionCode(), kept on the coupons module so both directions of the relationship (coupon → subscription and subscription → coupon) are discoverable from either module. - Packagist Packages > StripeKit > Modules > Coupons [StripeKit - List Coupons](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/coupons/list.md): Lists active promotion codes, most recently created first. - Packagist Packages > StripeKit > Modules > Coupons [StripeKit - Deactivate Coupon](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/coupons/deactivate.md): Deactivates a promotion code so it can no longer be redeemed by new customers. Subscriptions that already have the discount applied keep it, this only prevents future redemptions. - Packagist Packages > StripeKit > Modules > Webhooks [StripeKit - Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/webhooks/overview.md): $kit->webhooks verifies, deduplicates and processes incoming Stripe webhook events, and can automatically re-sync the relevant object into your storage adapter before calling your own handler. - Packagist Packages > StripeKit > Modules > Webhooks [StripeKit - Webhook Process](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/webhooks/process.md): Verifies a raw webhook payload against your webhookSecret, deduplicates it by Stripe event ID, automatically re-syncs the relevant object into your storage adapter, and then calls whichever of your handlers matches the event type. - Packagist Packages > StripeKit > Modules > Webhooks [StripeKit - Events Reference](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/webhooks/events-reference.md): Every Stripe event type StripeKit recognizes, the handler key you can provide for it, and exactly what StripeKit does automatically before calling your handler (when autoSync is not set to false). - Packagist Packages > StripeKit > Modules > Sync [StripeKit - Overview](https://docs.ricardoneudorfer.com/packagist-packages/stripekit/modules/sync/overview.md): $kit->sync is a thin convenience module that groups together the individual sync() methods already available on other modules, plus one aggregate method that pulls a customer's entire state in one call. Nothing here does anything you couldn't already do by calling the individual modules directly, it exists purely so a full reconciliation reads as one clear call instead of five.