Stripe Charges: Complete Guide to Payment Transactions

Master Stripe charge implementation including minimum amounts, credit card processing, shipping integration, and code examples for production applications.

What is a Stripe Charge?

A Stripe charge represents a single attempt to move money into your Stripe account. When a customer makes a payment, Stripe creates a charge object that tracks the entire lifecycle of that transaction--from authorization through capture, and potentially through refund or dispute.

Charge Object Fundamentals

The charge object contains comprehensive information about each transaction. At its core, a charge requires an amount (in the smallest currency unit), a currency specification, and a payment method. The object automatically captures additional details like the charge status, receipt email, and any associated fees.

Key charge properties include:

  • amount: The amount charged in cents (or smallest currency unit)
  • currency: Three-letter ISO currency code
  • payment_method: The payment method used for the charge
  • status: Current state of the charge (requires_action, succeeded, pending, failed)
  • receipt_email: Email to send the receipt to
  • description: Human-readable description of the charge

Charge Lifecycle Overview

Every charge follows a predictable lifecycle:

  1. Pending: Initial state while payment method is being verified
  2. Requires Action: Additional authentication needed (3D Secure, SCA)
  3. Succeeded: Payment successfully processed, funds captured
  4. Failed: Payment declined or error occurred

Stripe Minimum and Maximum Transaction Amounts

Understanding Stripe's amount constraints is crucial for preventing transaction failures.

Minimum Transaction Amount

Stripe requires a minimum amount of $0.50 USD (or the equivalent in other currencies) for most charges. This threshold applies per transaction and cannot be bypassed. For zero-decimal currencies like JPY, the minimum is typically 1 unit of that currency.

Maximum Transaction Amount

For single charges, Stripe limits transactions to $999,999.99 USD. This upper bound applies to the total charge amount, including any shipping costs or taxes. For amounts exceeding this limit, you must split the transaction into multiple charges or use alternative payment methods.

Currency Considerations

Amounts are always specified in the smallest currency unit (cents for USD, pence for GBP). Stripe automatically handles currency conversion at competitive rates when accepting payments in different currencies. The platform supports over 135 currencies, making international transactions straightforward.

For applications requiring multi-currency support, ensure your payment method configuration accounts for currency-specific limits and requirements.

Stripe Transaction Limits by Currency
CurrencyMinimum AmountMaximum AmountSmallest Unit
USD (US Dollar)$0.50$999,999.99Cents
EUR (Euro)€0.50€999,999.99Cents
GBP (British Pound)GBP0.30GBP999,999.99Pence
CAD (Canadian Dollar)$0.50$999,999.99Cents
JPY (Japanese Yen)¥1¥999,999.99Yen (no decimals)

Charging Credit Cards with Stripe

Credit card charges form the backbone of most Stripe integrations. Stripe provides multiple approaches depending on your use case.

Using Payment Intents (Recommended)

For most applications, Stripe recommends using Payment Intents rather than direct charges. Payment Intents handle complex payment flows like:

  • 3D Secure authentication
  • Strong Customer Authentication (SCA)
  • Various payment method types

The Payment Intent confirms the payment method, handles any required additional actions, and creates the charge upon successful completion. For a deeper dive into implementing Payment Intents, see our Stripe Payment Intents guide.

Capturing Charges

When using payment authorizations, you must explicitly capture charges. Authorization holds the funds on the customer's card without charging them immediately--useful for orders where final amount might change (like restaurants with tip adjustments).

If you're building an e-commerce platform that requires flexible payment flows with dynamic amounts, consider combining Payment Intents with subscription billing to handle both one-time charges and recurring revenue models.

Implementing Shipping with Stripe Charges

For e-commerce applications, Stripe supports shipping directly within the charge workflow.

Creating Shipping Rates

Shipping rates can be:

  • Fixed amounts: Flat rate delivery ($9.99 standard shipping)
  • Weight-based: Calculated based on package weight
  • Carrier-specific: UPS, FedEx, DHL rates

When creating a shipping rate, you specify the display name (like "Standard Shipping" or "Express Delivery") and the associated cost.

Address Collection

Stripe's checkout flow can automatically collect shipping addresses from customers. The address collection happens before payment completion, allowing you to verify delivery availability and adjust pricing if needed.

For comprehensive payment integration including shipping, refunds, and customer management, our web development services can help you build end-to-end payment solutions tailored to your business needs.

Basic Charge Creation
1import Stripe from 'stripe';2 3const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);4 5async function createBasicCharge(6 amount: number, 7 currency: string, 8 paymentMethodId: string9) {10 try {11 const charge = await stripe.charges.create({12 amount: amount, // Amount in cents (e.g., $10.00 = 1000)13 currency: currency, // e.g., 'usd', 'eur', 'gbp'14 source: paymentMethodId, // Payment method or token15 description: 'E-commerce purchase - Order #12345',16 receipt_email: '[email protected]',17 });18 19 console.log('Charge successful:', charge.id);20 return charge;21 } catch (error) {22 console.error('Charge failed:', error.message);23 throw error;24 }25}
Charge with Shipping
1async function createChargeWithShipping(2 amount: number,3 currency: string,4 paymentMethodId: string,5 shippingAddress: Stripe.ChargeCreateParams.Shipping6) {7 const charge = await stripe.charges.create({8 amount: amount,9 currency: currency,10 source: paymentMethodId,11 description: 'Order with shipping',12 shipping: {13 name: 'Customer Name',14 address: {15 line1: shippingAddress.address.line1,16 line2: shippingAddress.address.line2,17 city: shippingAddress.address.city,18 state: shippingAddress.address.state,19 postal_code: shippingAddress.address.postal_code,20 country: shippingAddress.address.country,21 },22 },23 });24 25 return charge;26}

Best Practices for Charge Implementation

Error Handling

Always implement robust error handling for charge operations. Common errors include:

  • Insufficient funds: Customer's card lacks funds
  • Expired card: Card has expired
  • Authentication failed: 3D Secure verification failed

Security Considerations

  • Never expose your secret key in client-side code
  • Use publishable keys for frontend integrations
  • Handle all charge creation through server-side code
  • Validate amounts and payment data before creating charges

Idempotency

For operations that might be repeated, implement idempotency using Stripe's idempotency keys. This prevents duplicate charges when network issues cause retry requests.

Implementing these best practices ensures your payment infrastructure is robust and reliable. For advanced payment scenarios including automated billing and subscription management, our team can help design and implement secure payment systems.

Frequently Asked Questions

Ready to Implement Stripe Payments?

Our team specializes in building secure, scalable payment integrations with Stripe and modern web technologies.