Skip to main content
RapidDev - Software Development Agency
stripe-guide

How to enable email receipts in Stripe

Enable email receipts in Stripe by turning on 'Successful payments' under Dashboard → Settings → Emails, or by passing receipt_email in your PaymentIntent or Charge API call. Stripe sends a branded receipt automatically after each successful payment. You can customize the receipt appearance in Settings → Branding.

What you'll learn

  • How to enable automatic receipt emails in the Stripe Dashboard
  • How to set receipt_email on PaymentIntents via the API
  • How to customize receipt branding and appearance
  • How receipts work with Checkout Sessions and invoices
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Beginner5 min read5 minutesStripe API v2024-12+, Node.js 18+, Stripe DashboardMarch 2026RapidDev Engineering Team
TL;DR

Enable email receipts in Stripe by turning on 'Successful payments' under Dashboard → Settings → Emails, or by passing receipt_email in your PaymentIntent or Charge API call. Stripe sends a branded receipt automatically after each successful payment. You can customize the receipt appearance in Settings → Branding.

Sending Email Receipts with Stripe

Email receipts confirm to customers that their payment was processed. Stripe can send these automatically after every successful charge. You can enable them globally in the Dashboard, or control them per-payment by setting the receipt_email field in your API calls. Receipts include the amount, description, last four digits of the card, and a link to view the full receipt. Customizing your branding ensures receipts look professional and match your brand.

Prerequisites

  • A Stripe account (free to create at dashboard.stripe.com)
  • Access to Dashboard → Settings with admin permissions
  • Node.js 18 or newer (for API method)

Step-by-step guide

1

Enable receipts in the Dashboard

Go to Settings → Emails in the Stripe Dashboard. Under 'Customer emails', toggle on 'Successful payments'. This sends a receipt for every successful charge to the email on the customer record or the receipt_email on the payment.

Expected result: The toggle is on. Stripe will now send receipts for all successful payments.

2

Customize receipt branding

Go to Settings → Branding in the Dashboard. Upload your logo, set brand colors, and add your support URL and phone number. These settings apply to all Stripe-sent emails including receipts.

Expected result: Receipt emails show your logo, brand colors, and support contact information.

3

Set receipt_email via the API

When creating a PaymentIntent, pass the receipt_email parameter. This overrides the customer's default email and is useful when the payer's email differs from the customer record.

typescript
1const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
2
3const paymentIntent = await stripe.paymentIntents.create({
4 amount: 5000, // $50.00 in cents
5 currency: 'usd',
6 customer: 'cus_ABC123',
7 receipt_email: 'buyer@example.com',
8 description: 'Premium Plan - Monthly',
9});
10
11console.log('PaymentIntent created:', paymentIntent.id);

Expected result: After the payment succeeds, Stripe sends a receipt to buyer@example.com.

4

Set receipt_email in Checkout Sessions

For Checkout Sessions, Stripe automatically uses the customer's email. You can pre-fill it with customer_email if no customer record exists.

typescript
1const session = await stripe.checkout.sessions.create({
2 mode: 'payment',
3 customer_email: 'buyer@example.com',
4 line_items: [{
5 price_data: {
6 currency: 'usd',
7 product_data: { name: 'Widget' },
8 unit_amount: 2500, // $25.00
9 },
10 quantity: 1,
11 }],
12 success_url: 'https://yoursite.com/success',
13 cancel_url: 'https://yoursite.com/cancel',
14});

Expected result: After payment, Stripe sends a receipt to the customer's email address.

Complete working example

receipts-example.js
1const express = require('express');
2const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
3
4const app = express();
5app.use(express.json());
6
7// Create a payment with receipt email
8app.post('/api/charge', async (req, res) => {
9 try {
10 const { amount, email, description } = req.body;
11
12 const paymentIntent = await stripe.paymentIntents.create({
13 amount, // in cents
14 currency: 'usd',
15 receipt_email: email,
16 description: description || 'Payment',
17 automatic_payment_methods: { enabled: true },
18 });
19
20 res.json({
21 clientSecret: paymentIntent.client_secret,
22 id: paymentIntent.id,
23 });
24 } catch (err) {
25 console.error('Payment error:', err.message);
26 res.status(500).json({ error: err.message });
27 }
28});
29
30// Resend a receipt for an existing charge
31app.post('/api/receipts/resend', async (req, res) => {
32 try {
33 const { chargeId, email } = req.body;
34
35 // Update the charge with a new receipt_email to trigger resend
36 const charge = await stripe.charges.update(chargeId, {
37 receipt_email: email,
38 });
39
40 res.json({
41 message: 'Receipt will be sent to ' + email,
42 receiptUrl: charge.receipt_url,
43 });
44 } catch (err) {
45 res.status(500).json({ error: err.message });
46 }
47});
48
49const PORT = process.env.PORT || 3000;
50app.listen(PORT, () => console.log(`Server on port ${PORT}`));

Common mistakes when enabling email receipts in Stripe

Why it's a problem: Enabling receipts in the Dashboard but not having emails on customer records

How to avoid: Stripe needs an email to send the receipt. Either set receipt_email on the PaymentIntent or ensure the customer record has an email address.

Why it's a problem: Setting receipt_email to an empty string instead of omitting it

How to avoid: Pass null or omit the field entirely if you do not want to override the customer's email. An empty string causes an error.

Why it's a problem: Expecting receipts for failed or incomplete payments

How to avoid: Stripe only sends receipts for successful charges. Failed or pending payments do not trigger receipt emails.

Best practices

  • Always include a description on your PaymentIntents — it appears on the receipt and helps customers identify the charge
  • Set up your branding (logo, colors, support info) in Dashboard → Settings → Branding before enabling receipts
  • Use receipt_email to control exactly who gets the receipt, especially for gift purchases or B2B transactions
  • Store the charge.receipt_url from webhooks so you can link customers to their receipts from your app
  • Test receipt emails in test mode to verify branding and content before going live
  • For subscription invoices, receipts are sent automatically — no need to set receipt_email separately

Still stuck?

Copy one of these prompts to get a personalized, step-by-step explanation.

ChatGPT Prompt

Write a Node.js Express endpoint that creates a Stripe PaymentIntent with a receipt_email so the customer gets an automatic email receipt after payment. Include amount, currency, and description fields. Use the stripe npm package.

Stripe Prompt

Enable email receipts for my Stripe payments. Set up the PaymentIntent creation to include receipt_email from the customer's profile, and add a way to resend receipts for past charges by updating the charge with a new receipt_email.

Frequently asked questions

Can I customize the content of Stripe receipts?

You can customize branding (logo, colors, support info) but not the receipt template itself. For fully custom receipt emails, disable Stripe receipts and send your own using the charge.succeeded webhook event.

How do I resend a receipt?

Update the charge with a new receipt_email using stripe.charges.update(chargeId, { receipt_email: 'new@email.com' }). Stripe resends the receipt to the new address.

Do Stripe receipts count as tax invoices?

Stripe receipts are payment confirmations, not tax invoices. For tax-compliant invoices, use Stripe Invoicing or Stripe Tax, which generate proper tax documents.

Are receipts sent for test mode payments?

Yes. Receipts are sent in test mode if you have the setting enabled and provide a valid email. This is useful for testing your branding and email flow.

Can I send receipts for refunds?

Enable 'Refunds' under Settings → Emails to send automatic refund confirmation emails. These are separate from payment receipts.

What if I need a custom email notification system beyond Stripe receipts?

For transactional emails with custom templates, multi-language support, or integration with your email provider, the RapidDev team can help build a webhook-driven notification system triggered by Stripe events.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.