Email Receipts

    Send payment or refund receipts automatically.

    Stripe can automatically send email receipts to your customers whenever they make a successful payment, or when a payment is refunded. This is done by providing an email address when making the API request, using the email address of a Customer object, or updating a PaymentIntent with a customer’s email address after checkout. You can also manually send (or resend) receipts in the Dashboard.

    Each receipt contains a link to view it in a browser, and a unique receipt number that can be useful when looking up payment information.

    The link to view the receipt in the browser is also available through the API on the Charge object. Note that when you visit the link, the receipt will always show the latest status of that Charge—if it has been refunded, the receipt will accurately reflect this.

    Automatically send receipts when payments are successful

    When making a charge request for a one-time payment, include your customer’s email address as a value for the receipt_email parameter. Receipts are only sent when a successful payment has been made—no receipt is sent if the request fails or is declined.

    curl https://api.stripe.com/v1/charges \
      -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \
      -d amount=999 \
      -d currency=usd \
      -d source=tok_visa \
      -d receipt_email="jenny.rosen@example.com"
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
    
    charge = Stripe::Charge.create({
        amount: 999,
        currency: 'usd',
        source: 'tok_visa',
        receipt_email: 'jenny.rosen@example.com',
    })
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
    
    charge = stripe.Charge.create(
      amount=999,
      currency='usd',
      source='tok_visa',
      receipt_email='jenny.rosen@example.com',
    )
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc');
    
    $charge = \Stripe\Charge::create([
        'amount' => 999,
        'currency' => 'usd',
        'source' => 'tok_visa',
        'receipt_email' => 'jenny.rosen@example.com',
    ]);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
    
    Map<String, Object> params = new HashMap<>();
    params.put("amount", 999);
    params.put("currency", "usd");
    params.put("source", "tok_visa");
    params.put("receipt_email", "jenny.rosen@example.com");
    Charge charge = Charge.create(params);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc');
    
    (async () => {
      const charge = await stripe.charges.create({
        amount: 999,
        currency: 'usd',
        source: 'tok_visa',
        receipt_email: 'jenny.rosen@example.com',
      });
    })();
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    params := &stripe.ChargeParams{
        Amount: stripe.Int64(999),
        Currency: stripe.String(string(stripe.CurrencyUSD)),
        ReceiptEmail: stripe.String("jenny.rosen@example.com"),
    }
    params.SetSource("tok_visa")
    ch, _ := charge.New(params)
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
    
    var chargeOptions = new ChargeCreateOptions {
        Amount = 999,
        Currency = "usd",
        Source = "tok_visa",
        ReceiptEmail = "jenny.rosen@example.com",
    };
    var service = new ChargeService();
    Charge charge = service.Create(chargeOptions);
    

    The value of the description parameter provided in the request is displayed in the receipt, along with the amount, and your public business information. Receipts for one-time payments include only this information—additional line items cannot be added.

    When using Checkout, you can automatically email your customers upon successful payments. Enable this feature with the email customers for successful payments option in your email receipt settings.

    When creating a PaymentIntent, include your customer’s email address as a value for the receipt_email parameter. Receipts are only sent when a successful payment has been made—no receipt is sent if the payment fails or is declined.

    curl https://api.stripe.com/v1/payment_intents \
      -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \
      -d amount=1099 \
      -d currency=usd \
      -d "payment_method_types[]=card" \
      -d receipt_email="jenny.rosen@example.com"
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
    
    intent = Stripe::PaymentIntent.create({
      amount: 1099,
      currency: 'usd',
      payment_method_types: ['card'],
      receipt_email: 'jenny.rosen@example.com',
    })
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'
    
    stripe.PaymentIntent.create(
      amount=1099,
      currency='usd',
      payment_method_types=['card'],
      receipt_email='jenny.rosen@example.com',
    )
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc');
    
    \Stripe\PaymentIntent::create([
      "amount" => 1099,
      "currency" => "usd",
      "payment_method_types" => ["card"],
      'receipt_email' => 'jenny.rosen@example.com',
    ]);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
    
    Map<String, Object> paymentintentParams = new HashMap<String, Object>();
    paymentintentParams.put("amount", 1099);
    paymentintentParams.put("currency", "usd");
    ArrayList payment_method_types = new ArrayList();
    payment_method_types.add("card");
    paymentintentParams.put("payment_method_types", payment_method_types);
    paymentintentParams.put("receipt_email", "jenny.rosen@example.com");
    
    PaymentIntent.create(paymentintentParams);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc');
    
    (async () => {
      const paymentIntent = await stripe.paymentIntents.create({
        amount: 1099,
        currency: 'usd',
        payment_method_types: ['card'],
        receipt_email: 'jenny.rosen@example.com',
      });
    })();
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"
    
    params := &stripe.PaymentIntentParams{
      Amount: stripe.Int64(1099),
      Currency: stripe.String(string(stripe.CurrencyUSD)),
      PaymentMethodTypes: stripe.StringSlice([]string{
        "card",
      }),
      ReceiptEmail: stripe.String("jenny.rosen@example.com"),
    }
    paymentintent.New(params)
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc";
    
    var paymentIntents = new PaymentIntentService();
    var createOptions = new PaymentIntentCreateOptions {
      Amount = 1099,
      Currency = "usd",
      PaymentMethodTypes = new List<string> { "card" },
      ReceiptEmail = "jenny.rosen@example.com",
    };
    paymentIntents.Create(createOptions);
    

    The value of the description parameter provided in the request is displayed in the receipt, along with the amount, and your public business information. Receipts for one-time payments include only this information—additional line items cannot be added.

    To trigger an automatic receipt after the payment is complete, update the PaymentIntent’s receipt_email.

    Automatically send receipts when using Billing

    Stripe can send receipts for recurring payments (e.g., subscriptions) that are automatically created with Customer objects. Ensure that the customer’s email parameter is set, and the option email customers for successful payments is enabled in your email receipt settings.

    Stripe can also email your customers when subscriptions charges fail. Ensure that the option Send emails when payments fail is enabled in your Automatic collection settings.

    Receipts for subscription payments are itemized and include any additional line items from the invoice that triggered the payment.

    Manually send receipts from the Dashboard

    You can view and send receipts using the email history section of a payment in the Dashboard. You can specify a different email address to resend an email receipt to, or a comma-separated list of addresses if a receipt needs to be sent to multiple recipients. Receipts can be sent a maximum of 10 times per payment, and a complete history of all receipts sent is displayed within the payment’s page.

    Refund receipts

    When a payment is refunded, a receipt is automatically sent to the same email address that was provided in the original charge. You can also use the Dashboard to manually send a copy of the refund receipt.

    Similar to how email receipts work for Customer objects, receipts for refunds of customer-owned payments are only sent if the option Email customers for refunds is enabled in your email receipt settings.

    Failed payment alerts

    When a subscriptions charge fails, an email can be sent to your customers prompting them to update their payment information. These are sent to the email address associated with the Customer object. To enable, use the option Send emails when payments fail in your Automatic collection settings.

    Make sure to fill in the link for customers to update their payment information to give customers an effective call to action. You can also preview these emails in the same section.

    Customizing receipts

    You can select which language to use for receipts in your email receipt settings and upload a custom logo in the branding settings. Receipts also include any public information that you have specified in your email receipt settings, such as your phone number or website address.

    Stripe uses your logo’s colors to automatically set the optimal header color for your receipts, though you can override this by providing a hexadecimal (hex) number. The largest file size permitted for a custom logo image is 512KB. For best results, we recommend that your logo is a square image larger than 128 x 128 pixels. JPG, PNG, and GIF file types are supported.

    You can preview your changes in real-time within the Dashboard. To see how a receipt looks when it is sent, click Send test email… to send yourself a test receipt.

    Receipts for Stripe Connect

    If you make use of receipts on the platform account, Stripe automatically sends receipts for any destination charges, since these are processed by your platform.

    For platforms using Standard accounts, passing receipt_email when making a charge request results in a receipt being sent on behalf of the account. If your platform and connected accounts are using customers (e.g., a platform for subscription services), it is up to each connected account to manage their own customer email settings.

    Was this page helpful?

    Thank you for helping improve Stripe's documentation. If you need help or have any questions, please consider contacting support.

    On this page