Generating and Sending Professional Invoices
Create, customize, and automatically send professional invoices to your customers for one-time and recurring payments.
Generating and Sending Professional Invoices is a free Stripe Payments & SaaS Billing Systems lesson on CoddyKit — lesson 2 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Stripe Payments & SaaS Billing Systems learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Welcome to Stripe Invoicing
Invoices are formal requests for payment, crucial for businesses providing services or goods. They provide a clear record of transactions for both you and your customers.
Stripe Invoicing is a powerful tool that helps you create, send, and manage professional invoices efficiently, whether for one-time services or recurring subscriptions.
Why Use Stripe Invoicing?
Leveraging Stripe for invoicing brings many benefits, simplifying your financial operations:
- Automation: Automatically generate invoices for subscriptions or send reminders for overdue payments.
- Professionalism: Customize invoices with your branding for a consistent customer experience.
- Tracking: Easily monitor invoice statuses (draft, open, paid) directly from your Stripe Dashboard.
- Compliance: Helps with financial record-keeping and tax compliance (especially when combined with Stripe Tax).
Anatomy of a Stripe Invoice
A typical Stripe invoice includes several key elements:
- Customer Details: Who is being billed.
- Line Items: Descriptions of products or services, quantities, and prices.
- Subtotal: The total cost before taxes and discounts.
- Tax: Applicable sales tax (if configured with Stripe Tax).
- Total Due: The final amount the customer needs to pay.
- Due Date: When the payment is expected.
- Payment Status: Indicates if the invoice is paid, due, or overdue.
Crafting One-Time Invoices
For one-off services or custom orders, you can create a single invoice. This often involves two main steps: creating invoice items and then creating the invoice itself.
Invoice items are specific charges that are added to a customer's pending invoice. When you create an invoice, these items are included.
Try this Python example to create an invoice item and a draft invoice:
import stripe
# In a real app, load this securely from environment variables
stripe.api_key = "sk_test_YOUR_SECRET_KEY"
try:
# 1. Create an Invoice Item
# This item will be added to the customer's next invoice
invoice_item = stripe.InvoiceItem.create(
customer="cus_Nxxxxxxxxx", # Replace with a real customer ID
amount=2000, # $20.00
currency="usd",
description="Consulting Service (2 hours)"
)
print(f"Created Invoice Item: {invoice_item.id}")
# 2. Create a Draft Invoice for the customer
# This invoice will include the invoice item created above
invoice = stripe.Invoice.create(
customer="cus_Nxxxxxxxxx", # Same customer ID
collection_method="send_invoice", # We'll send it manually later
days_until_due=7
)
print(f"Created Draft Invoice: {invoice.id}")
print("Invoice is in 'draft' status. Preview and send it!")
except stripe.error.StripeError as e:
print(f"Error creating invoice: {e}")Customizing Your Invoices
Make your invoices reflect your brand! Stripe allows extensive customization via the Dashboard settings (Settings > Branding) or through the API when creating invoices.
- Logo & Color: Upload your logo and set a brand color.
- Footer: Add custom text, like 'Thank you for your business!' or legal disclaimers.
- Memo: Include a short note specific to each invoice.
- Custom Fields: Add fields for purchase order numbers, vendor IDs, etc.
These customizations ensure a professional and consistent brand experience for your customers.
Delivering Your Invoices
Once you've created a draft invoice and confirmed its details, the next step is to send it to your customer. Stripe can do this automatically via email.
You can send invoices manually through the Dashboard, or programmatically using the API, which gives you more control over the timing.
Here's how to send an existing draft invoice using the Stripe API:
import stripe
stripe.api_key = "sk_test_YOUR_SECRET_KEY"
try:
# Replace with a real draft invoice ID from your Stripe account
invoice_id = "in_1Nxxxxxxxxx"
# Retrieve the invoice to check its status (optional, good practice)
invoice = stripe.Invoice.retrieve(invoice_id)
print(f"Retrieved Invoice {invoice.id} with status: {invoice.status}")
if invoice.status == "draft":
# Send the invoice to the customer
sent_invoice = stripe.Invoice.send_invoice(invoice_id)
print(f"Invoice {sent_invoice.id} sent successfully!")
print(f"New status: {sent_invoice.status}")
else:
print(f"Invoice {invoice_id} is not in 'draft' status. Cannot send.")
except stripe.error.StripeError as e:
print(f"Error sending invoice: {e}")Automated Subscription Invoices
One of Stripe's most powerful features for SaaS businesses is its ability to automatically generate invoices for subscriptions.
When a customer subscribes to a plan (which has associated products and prices), Stripe automatically creates and finalizes invoices at each billing cycle. These invoices are then sent to the customer, and their payment method is charged.
This automation significantly reduces manual effort for recurring billing.
Tracking Invoice Status
Stripe provides clear statuses to help you manage the invoice lifecycle:
draft: Invoice has been created but not finalized or sent. You can still edit it.open: Invoice has been finalized and sent, awaiting payment.paid: Customer has paid the invoice in full.void: Invoice was cancelled and will not be paid.uncollectible: Invoice is past due and unlikely to be paid.
Monitoring these statuses is key for revenue tracking and follow-up.
Preview Before Sending
Before an invoice goes out to your customer, it's always a good idea to preview it to ensure everything is correct.
Stripe allows you to generate a preview of an invoice via the API or Dashboard. This lets you check line items, tax calculations, branding, and due dates without actually sending it.
Use the stripe.Invoice.upcoming() method in the API to see what an invoice would look like for a customer, especially useful for subscriptions.
Invoice Knowledge Check
Which of the following invoice statuses indicates that an invoice has been finalized and sent to the customer, but payment has not yet been received?
Recap: Invoice Mastery
Congratulations! You've learned how to generate and send professional invoices using Stripe.
- We covered the benefits of Stripe Invoicing, from automation to compliance.
- You saw how to create and customize one-time invoices via API.
- We discussed how Stripe handles automated invoicing for subscriptions.
- You learned to track invoices through their various lifecycle statuses.
Mastering invoicing ensures smooth financial operations and a professional experience for your customers. Next up, we'll dive into reporting and reconciliation!
Frequently asked questions
Is the “Generating and Sending Professional Invoices” lesson free?
Yes — the full text of “Generating and Sending Professional Invoices” is free to read here on the web, and the Stripe Payments & SaaS Billing Systems course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Stripe Payments & SaaS Billing Systems course, upgrade to CoddyKit PRO.
What will I learn in “Generating and Sending Professional Invoices”?
Create, customize, and automatically send professional invoices to your customers for one-time and recurring payments. You practise Stripe Payments & SaaS Billing Systems with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Stripe Payments & SaaS Billing Systems?
No prior experience is required. Stripe Payments & SaaS Billing Systems on CoddyKit is structured for beginners through advanced learners; this is — lesson 2 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Generating and Sending Professional Invoices” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Stripe Payments & SaaS Billing Systems lesson?
Yes. Every Stripe Payments & SaaS Billing Systems lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Automating Sales Tax with Stripe Tax
- Generating and Sending Professional Invoices
- Reporting and Reconciliation for Billing
- Handling Credit Notes and Partial Refunds on Invoices