# How to integrate Stripe without a website

- Tool: Stripe
- Difficulty: Beginner
- Time required: 10 minutes
- Compatibility: Stripe Dashboard, no coding required for Payment Links and Invoicing
- Last updated: March 2026

## TL;DR

Accept Stripe payments without a website using Payment Links (shareable URL), Stripe Invoicing (email invoices), or the Virtual Terminal (manual card entry in Dashboard). Payment Links require zero code — create one in the Dashboard, copy the URL, and share it via email, social media, or messaging. Invoices work for B2B billing. The virtual terminal handles phone orders.

## Accepting Payments Without a Website

Not every business needs a website to accept payments. Freelancers, consultants, pop-up shops, and service providers can use Stripe's no-code tools to collect payments immediately. Payment Links create a shareable URL that takes customers to a Stripe-hosted checkout page. Invoicing lets you send professional invoices via email. The virtual terminal (manual card entry) lets you charge cards from phone orders. All three methods work from the Stripe Dashboard with zero code.

## Before you start

- A Stripe account (free to create at dashboard.stripe.com)
- Your Stripe account activated for live payments (identity verification complete)
- A product or service to sell

## Step-by-step guide

### 1. Create a Payment Link

Go to Dashboard → Payment Links → + Create payment link. Add your product name, price, and optional image. Set whether it is a one-time or recurring payment. Click 'Create link'. Copy the URL and share it anywhere — email, text, social media, QR code.

**Expected result:** A URL like https://buy.stripe.com/abc123 is generated. Anyone with the link can make a payment.

### 2. Create a Payment Link via the API (optional)

If you want to generate Payment Links programmatically (e.g., per-customer or per-order), use the API.

```
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

const paymentLink = await stripe.paymentLinks.create({
  line_items: [{
    price_data: {
      currency: 'usd',
      product_data: {
        name: 'Consulting Session - 1 Hour',
      },
      unit_amount: 15000, // $150.00
    },
    quantity: 1,
  }],
});

console.log('Payment Link:', paymentLink.url);
```

**Expected result:** A Payment Link URL is returned that you can share with customers.

### 3. Send an invoice via email

Go to Dashboard → Invoices → + Create invoice. Add the customer's email, line items with descriptions and amounts, and optional due date. Click 'Send invoice'. Stripe sends a professional email with a 'Pay this invoice' button that leads to a Stripe-hosted payment page.

**Expected result:** The customer receives an email with a link to pay. The invoice status updates as they pay.

### 4. Use the virtual terminal for manual card entry

Go to Dashboard → Payments → + Create payment. Enter the customer's card number, expiration, CVC, and amount. This is useful for phone orders or in-person payments when you do not have a card reader. Note: manually entered transactions have higher fraud risk and may have different fee structures.

**Expected result:** The payment is processed immediately and appears in your Payments list.

### 5. Test with a test card

In test mode, use card 4242424242424242 with any future expiry and any CVC to test all three methods without processing real charges.

**Expected result:** Test payments appear in your test mode Dashboard. No real money is charged.

## Complete code example

File: `payment-links.js`

```javascript
const express = require('express');
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

const app = express();
app.use(express.json());

// Create a Payment Link
app.post('/api/payment-links', async (req, res) => {
  try {
    const { productName, amount, recurring } = req.body;

    const priceData = {
      currency: 'usd',
      product_data: { name: productName },
      unit_amount: amount, // in cents
    };

    if (recurring) {
      priceData.recurring = { interval: 'month' };
    }

    const paymentLink = await stripe.paymentLinks.create({
      line_items: [{ price_data: priceData, quantity: 1 }],
    });

    res.json({ url: paymentLink.url, id: paymentLink.id });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// Create and send an invoice
app.post('/api/invoices', async (req, res) => {
  try {
    const { customerEmail, items, daysUntilDue } = req.body;

    // Find or create customer
    let customers = await stripe.customers.list({ email: customerEmail, limit: 1 });
    let customer = customers.data[0];
    if (!customer) {
      customer = await stripe.customers.create({ email: customerEmail });
    }

    // Create invoice
    const invoice = await stripe.invoices.create({
      customer: customer.id,
      collection_method: 'send_invoice',
      days_until_due: daysUntilDue || 30,
    });

    // Add line items
    for (const item of items) {
      await stripe.invoiceItems.create({
        customer: customer.id,
        invoice: invoice.id,
        description: item.description,
        amount: item.amount, // in cents
        currency: 'usd',
      });
    }

    // Finalize and send
    await stripe.invoices.finalizeInvoice(invoice.id);
    await stripe.invoices.sendInvoice(invoice.id);

    res.json({ id: invoice.id, status: 'sent' });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server on port ${PORT}`));
```

## Common mistakes

- **Using the virtual terminal as a primary payment method for e-commerce** — undefined Fix: The virtual terminal is for occasional manual entries. For regular online sales, use Payment Links or a proper checkout integration. Manually entered cards have higher fraud risk.
- **Not completing Stripe account verification before trying to accept live payments** — undefined Fix: You must verify your identity and business information before live mode works. Complete all onboarding steps in Dashboard → Settings → Account.
- **Sharing test mode Payment Links to real customers** — undefined Fix: Test mode links only work with test cards. Toggle to live mode in the Dashboard before creating Payment Links for real customers.

## Best practices

- Use Payment Links for one-off sales, events, and social media selling — they require zero code
- Use Invoicing for B2B services, consulting, and contracts where you need due dates and reminders
- Use the virtual terminal only for phone orders or exceptional cases — not as a primary checkout method
- Add product images and descriptions to Payment Links for a professional checkout experience
- Enable automatic receipt emails in Settings → Emails so customers get payment confirmation
- Test all payment methods in test mode with card 4242424242424242 before going live
- Track all payments in Dashboard → Payments regardless of which method was used

## Frequently asked questions

### Are Payment Links free to create?

Yes. Creating Payment Links costs nothing. Stripe only charges its standard processing fee (2.9% + $0.30) when a customer actually makes a payment.

### Can I customize the checkout page on a Payment Link?

You can add product images, descriptions, and adjust quantities. The checkout page uses your branding from Settings → Branding (logo, colors). For deeper customization, you need a coded Checkout Session.

### Can I accept recurring payments with Payment Links?

Yes. When creating a Payment Link, set the price type to 'Recurring' and choose the billing interval (monthly, yearly, etc.). Customers will be enrolled in a subscription.

### How do I track who paid through a Payment Link?

Go to Dashboard → Payments and filter by the Payment Link. Each payment shows the customer email, amount, and date. You can also view analytics per Payment Link.

### Can I set up automatic payment reminders for invoices?

Yes. In Dashboard → Settings → Invoices, configure automatic reminders that are sent before the due date and after the invoice becomes overdue.

### What if I eventually need a full website with Stripe integration?

When you are ready to build a website with integrated payments, the RapidDev team can help you set up a complete Stripe checkout flow, customer portal, and subscription management system.

---

Source: https://www.rapidevelopers.com/stripe-guide/how-to-integrate-stripe-without-a-website
© RapidDev — https://www.rapidevelopers.com/stripe-guide/how-to-integrate-stripe-without-a-website
