Create Invoice with Stripe API

 import os
import stripe
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
import uvicorn

# Initialize Stripe API with the secret key
stripe.api_key = os.environ['STRIPE_SECRET_KEY']

app = FastAPI()

# CORS configuration to allow preflight requests with OPTIONS method
    allow_origins=["*"],  # Allows all origins
    allow_methods=["*"],  # Allows all methods
    allow_headers=["*"],  # Allows all headers

class InvoiceItemData(BaseModel):
    customer_email: str
    description: str

About this template

This app integrates with Stripe API to create and manage invoices. It provides a seamless experience for users to generate invoices and make payments. The backend handles the creation of Stripe customers and invoices, while the frontend includes a JavaScript function to post data to the backend and redirect users to the payment page. A valid Stripe API key is essential for the app's operation.

Introduction to the Create Invoice with Stripe API Template

Welcome to the Create Invoice with Stripe API template! This template is designed to help you seamlessly integrate Stripe's invoicing capabilities into your application. With this template, you can create and manage invoices, allowing users to generate payment requests and process payments with ease. The backend is set up to handle the creation of Stripe customers and invoices, while the frontend includes a JavaScript function to post data to the backend and redirect users to the payment page. Before you begin, ensure you have a valid Stripe API key, as it is essential for the app's operation.

Clicking Start with this Template

To get started with this template, click on the "Start with this Template" button. This will pre-populate the code in the Lazy Builder interface, so you won't need to copy, paste, or delete any code manually.

Initial Setup: Adding Environment Secrets

Before testing the app, you'll need to set up an environment secret for the Stripe API key:

  1. Log in to your Stripe account and navigate to the API section to find your secret key.
  2. In the Lazy Builder interface, go to the Environment Secrets tab.
  3. Create a new secret with the key STRIPE_SECRET_KEY and paste your Stripe secret key as the value.

Test: Pressing the Test Button

Once you have set up your environment secret, press the "Test" button. This will deploy the app and launch the Lazy CLI. The Lazy platform handles all deployment aspects, so you don't need to worry about installing libraries or setting up your environment.

Entering Input

After pressing the "Test" button, if the app requires any user input, the Lazy App's CLI interface will prompt you to provide the necessary information. Follow the instructions in the CLI to enter any required input.

Using the App

After deployment, Lazy will provide you with a dedicated server link to use the API. If you're using FastAPI, Lazy will also provide a link to the API documentation. You can use these links to interact with your app and test the endpoints.

Integrating the App

To integrate the backend with your frontend or another service, you can use the provided JavaScript snippet. Here's how to do it:

  1. Include the JavaScript function in your HTML/JS file.
  2. Replace LAZY_BACKEND_URL with the URL provided by Lazy after deployment.
  3. Call the createInvoiceAndRedirect function with the customer's email, invoice description, and amount to create an invoice and redirect the user to the payment page.

Here's the JavaScript snippet you can use:

    async function createInvoiceAndRedirect(customerEmail, description, amount) {<br>
      try {<br>
        const response = await fetch('LAZY_BACKEND_URL/create-invoice', {<br>
          method: 'POST',<br>
          headers: {<br>
            'Content-Type': 'application/json',<br>
          body: JSON.stringify({<br>
            customer_email: customerEmail,<br>
            description: description,<br>
            amount: amount<br>
        if (!response.ok) {<br>
          throw new Error(`HTTP error! status: ${response.status}`);<br>
        const data = await response.json();<br>
        window.location.href = data.invoice_url;<br>
      } catch (error) {<br>
        console.error('Could not create invoice:', error);<br>
        alert('Error creating invoice. Please try again.');<br>
    // Example usage:<br>
    // createInvoiceAndRedirect('', 'Product Description', 1000);<br>

Remember to replace LAZY_BACKEND_URL with the actual backend URL provided by Lazy. This code snippet will make a POST request to the backend, create an invoice, and redirect the user to the Stripe payment page.

By following these steps, you should now have a fully functional invoice creation and payment processing application integrated with Stripe, all set up and ready to go on the Lazy platform.

Last published
June 15, 2024

More templates like this

PDF Data Extraction and Excel Transfer

An app for extracting name, phone number, and email data from PDF files and transferring it to Excel.


GPT-4 Exam Generator

This app uses GPT-4 to generate a PDF of a new exam based on an uploaded PDF of a past exam.


Job Search Website

A customisable one-page job search website with a search bar and a search button that displays UI cards of matching jobs. You need to have a (free) account on to get the API key required for this to work.

React JS
Create Invoice with Stripe API