> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/calcom/cal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment apps

> Accept payments for bookings through Stripe, PayPal, and other payment processors integrated with Cal.com.

Payment integrations let you charge for bookings by processing payments when appointments are scheduled. Payment is collected before the booking is confirmed, ensuring you get paid for your time.

## Available payment integrations

<CardGroup cols={2}>
  <Card title="Stripe" icon="stripe">
    Most popular - accept credit cards, digital wallets, and more
  </Card>

  <Card title="PayPal" icon="paypal">
    Process payments through PayPal accounts
  </Card>

  <Card title="Alby" icon="bitcoin">
    Accept Bitcoin via Lightning Network
  </Card>

  <Card title="HitPay" icon="credit-card">
    APAC payment methods and e-wallets
  </Card>
</CardGroup>

### Other payment options

* **BTCPay Server** - Self-hosted Bitcoin payment processor
* **Razorpay** - India-focused payment gateway (via Stripe integration)
* **PayPal Business** - Advanced PayPal features for businesses

## How payment integrations work

When a payment app is enabled for an event type:

<Steps>
  <Step title="User initiates booking">
    Someone schedules time on your paid event type and enters their details.
  </Step>

  <Step title="Payment prompt">
    Before confirming, they're redirected to the payment processor to enter payment information.
  </Step>

  <Step title="Payment processed">
    The payment processor charges the amount you specified and returns success or failure.
  </Step>

  <Step title="Booking confirmed">
    On successful payment, the booking is created and both parties receive confirmations.
  </Step>
</Steps>

<Warning>
  If payment fails, the booking is not created. Users can retry payment or exit without booking.
</Warning>

## Stripe

Stripe is the most popular payment processor for Cal.com, supporting credit cards, debit cards, Apple Pay, Google Pay, and many regional payment methods.

### Setup instructions

<Steps>
  <Step title="Create a Stripe account">
    Sign up at stripe.com if you don't have an account. Complete identity verification to accept live payments.
  </Step>

  <Step title="Install Stripe integration">
    Go to Settings > Apps in Cal.com, search for "Stripe", and click Install.
  </Step>

  <Step title="Connect your Stripe account">
    Click "Connect with Stripe" and authorize Cal.com to create payment intents and charges.
  </Step>

  <Step title="Grant permissions">
    Approve access to read customer data, create charges, and manage payments.
  </Step>

  <Step title="Enable in event types">
    Edit a paid event type, scroll to Payment, and select Stripe. Enter your price and currency.
  </Step>
</Steps>

### Features

* **Multiple payment methods** - Credit cards, debit cards, Apple Pay, Google Pay, ACH, SEPA, and 40+ others
* **Global currency support** - 135+ currencies
* **Automatic tax** - Calculate and collect tax with Stripe Tax
* **Subscriptions** - Charge recurring fees (requires custom setup)
* **Refunds** - Process refunds from Stripe dashboard
* **Security** - PCI compliant, 3D Secure support
* **Detailed reporting** - Revenue analytics and financial reports

### Configuration

When enabling Stripe for an event type:

```typescript theme={null}
{
  price: 5000,              // Amount in cents (e.g., $50.00)
  currency: "usd",          // ISO currency code
  paymentOption: "ON",      // Always require payment
}
```

<Note>
  Stripe charges fees per transaction: 2.9% + \$0.30 for US cards. International and currency conversion fees may apply. See stripe.com/pricing for details.
</Note>

### Testing Stripe integration

Stripe provides test mode for development:

<Tabs>
  <Tab title="Test card numbers">
    * **Success**: 4242 4242 4242 4242
    * **Decline**: 4000 0000 0000 0002
    * **3D Secure**: 4000 0027 6000 3184

    Use any future expiry date, any 3-digit CVC, and any postal code.
  </Tab>

  <Tab title="Switching to live mode">
    1. Complete Stripe account verification
    2. Toggle from test mode to live mode in Stripe dashboard
    3. Update Cal.com integration if using API keys
    4. Test with a real card (you can refund it)
  </Tab>
</Tabs>

### Troubleshooting

<AccordionGroup>
  <Accordion title="Payment page not loading">
    * Verify Stripe integration is connected in Settings > Apps
    * Check that event type has a price configured
    * Ensure Stripe account is activated (not in restricted mode)
    * Re-authenticate by disconnecting and reconnecting Stripe
  </Accordion>

  <Accordion title="Payments failing">
    * Check Stripe dashboard for error messages
    * Verify you're not in test mode when accepting real payments
    * Confirm your Stripe account can accept the payment method being used
    * Check for sufficient funds or card limits on the customer's end
  </Accordion>

  <Accordion title="Refund requests">
    Process refunds in the Stripe dashboard:

    1. Go to Payments > All payments
    2. Find the charge
    3. Click Refund
    4. Cal.com booking remains unless manually cancelled
  </Accordion>
</AccordionGroup>

## PayPal

PayPal integration lets customers pay with their PayPal balance, linked bank accounts, or credit cards via PayPal checkout.

### Setup instructions

<Steps>
  <Step title="Create PayPal Business account">
    Sign up for a PayPal Business account at paypal.com/business. Personal accounts cannot accept Cal.com payments.
  </Step>

  <Step title="Install PayPal integration">
    Find "PayPal" in Settings > Apps and click Install.
  </Step>

  <Step title="Connect with PayPal">
    Authorize Cal.com to create payment requests on your behalf.
  </Step>

  <Step title="Configure event types">
    Add PayPal as the payment method in your event type settings.
  </Step>
</Steps>

### Features

* **PayPal balance payments** - Customers can pay from PayPal accounts
* **Credit card processing** - Accept cards without Stripe
* **Buyer protection** - PayPal's purchase protection for customers
* **International support** - Available in 200+ countries
* **Multi-currency** - Accept payments in 25+ currencies

<Info>
  PayPal fees vary by country and transaction type. Typical US rate: 2.9% + \$0.30 per transaction. Check paypal.com/fees for your region.
</Info>

## Alby (Bitcoin Lightning)

Alby lets you accept Bitcoin payments via the Lightning Network - instant, low-fee Bitcoin transactions.

### Setup instructions

<Steps>
  <Step title="Create Alby account">
    Sign up at getalby.com and set up your Lightning wallet.
  </Step>

  <Step title="Install Alby integration">
    Go to Settings > Apps, find "Alby", and click Install.
  </Step>

  <Step title="Connect wallet">
    Enter your Alby API credentials or connect via OAuth.
  </Step>

  <Step title="Set Bitcoin pricing">
    Configure event types with prices in satoshis (1 BTC = 100,000,000 sats).
  </Step>
</Steps>

### Features

* **Lightning Network** - Instant settlement, minimal fees
* **No chargeback risk** - Bitcoin transactions are final
* **Global payments** - No geographic restrictions
* **Privacy-focused** - Pseudonymous transactions
* **Low fees** - Typically \< 1% compared to 3% for credit cards

<Note>
  Alby charges a small service fee. Lightning Network transaction fees are typically less than 1 cent.
</Note>

## HitPay

HitPay specializes in APAC payment methods, including popular e-wallets and banking apps in Asia.

### Setup instructions

<Steps>
  <Step title="Create HitPay account">
    Sign up at hitpayapp.com for your country (Singapore, Hong Kong, Malaysia supported).
  </Step>

  <Step title="Complete verification">
    Submit business documents for account verification.
  </Step>

  <Step title="Install HitPay integration">
    Find "HitPay" in Cal.com Settings > Apps and install.
  </Step>

  <Step title="Connect account">
    Authorize Cal.com to create payment requests.
  </Step>
</Steps>

### Supported payment methods

* **E-wallets** - GrabPay, PayNow, AliPay, WeChat Pay
* **Bank transfers** - FPX (Malaysia), PayNow (Singapore)
* **Credit cards** - Visa, Mastercard, Amex
* **Buy Now Pay Later** - Atome, Grab PayLater

## BTCPay Server

BTCPay Server is a self-hosted, open-source Bitcoin payment processor - no third-party accounts required.

### Setup instructions

<Steps>
  <Step title="Deploy BTCPay Server">
    Self-host BTCPay Server following btcpayserver.org documentation. Requires a server and Bitcoin node.
  </Step>

  <Step title="Create a store">
    Set up a store in BTCPay Server and configure wallet settings.
  </Step>

  <Step title="Generate API key">
    Create an API key in BTCPay Server with invoice creation permissions.
  </Step>

  <Step title="Install integration">
    In Cal.com, install "BTCPay Server" and enter your server URL and API key.
  </Step>
</Steps>

### Features

* **Self-hosted** - Complete control over your payment processing
* **No KYC** - No account registration with third parties
* **No fees** - Only Bitcoin network transaction fees
* **Privacy** - Your server, your data
* **Lightning support** - Accept Lightning Network payments
* **Altcoins** - Optional support for other cryptocurrencies

<Check>
  BTCPay Server is ideal for privacy-conscious users and Bitcoin maximalists who want complete payment sovereignty.
</Check>

## Configuring paid event types

### Setting up pricing

To make an event type paid:

<Steps>
  <Step title="Edit event type">
    Go to Event Types and select the event type to make paid.
  </Step>

  <Step title="Add payment">
    Scroll to the Payment section and enable "Require payment".
  </Step>

  <Step title="Select processor">
    Choose your payment integration (Stripe, PayPal, etc.).
  </Step>

  <Step title="Enter price">
    Set the amount and currency. Prices are per booking, not per attendee.
  </Step>

  <Step title="Save changes">
    Save the event type. Future bookings will require payment.
  </Step>
</Steps>

### Pricing options

```typescript theme={null}
// Fixed pricing
price: 10000  // $100.00 (always in cents)

// Optional payment (donations)
paymentOption: "OPTIONAL"

// Multiple price tiers (not natively supported)
// Workaround: Create multiple event types with different prices
```

### Payment on booking page

When users book a paid event:

1. They fill out booking form (name, email, etc.)
2. Click "Continue" or "Book"
3. Redirected to payment processor
4. Enter payment information
5. Submit payment
6. Redirected back to Cal.com with confirmation

<Warning>
  If users close the payment window without completing payment, the booking is not created. They must restart the booking process.
</Warning>

## Refunds and cancellations

### Refund policy

Cal.com does not automatically process refunds. You must handle refunds manually:

1. User cancels booking (optional)
2. You decide whether to issue refund based on your policy
3. Process refund in payment processor dashboard (Stripe, PayPal, etc.)
4. Cal.com booking can be cancelled separately

<Tip>
  Clearly state your refund policy in event type descriptions so customers know what to expect.
</Tip>

### Processing refunds

<Tabs>
  <Tab title="Stripe">
    1. Go to Stripe Dashboard > Payments
    2. Find the charge for the booking
    3. Click "Refund" button
    4. Choose full or partial refund
    5. Confirm refund - customer receives funds in 5-10 business days
  </Tab>

  <Tab title="PayPal">
    1. Log in to PayPal Business account
    2. Go to Activity
    3. Find the transaction
    4. Click transaction > Issue refund
    5. Select full or partial
    6. Confirm - customer gets refund in their PayPal account
  </Tab>

  <Tab title="Bitcoin (Alby, BTCPay)">
    Bitcoin transactions are not reversible. To "refund":

    1. Ask customer for Bitcoin address
    2. Send Bitcoin manually from your wallet
    3. Include network transaction fee
  </Tab>
</Tabs>

## Payment security

<Check>**PCI Compliance** - Cal.com never stores payment card data. All card processing happens on payment processor servers.</Check>

<Check>**SSL/TLS** - All payment flows use HTTPS encryption.</Check>

<Check>**SCA support** - Stripe integration supports Strong Customer Authentication (3D Secure) for EU compliance.</Check>

<Check>**Fraud detection** - Payment processors have built-in fraud detection and prevention.</Check>

## Best practices

<Check>**Clear pricing** - Display price prominently in event type title or description</Check>

<Check>**Refund policy** - State your cancellation and refund policy upfront</Check>

<Check>**Test payments** - Use test mode to verify payment flow before going live</Check>

<Check>**Tax compliance** - Configure Stripe Tax or calculate tax in your pricing</Check>

<Check>**Multiple currencies** - Create separate event types for different currencies if needed</Check>

<Check>**Backup payment method** - Have a secondary processor in case of outages</Check>

## Environment variables (self-hosted)

Self-hosted Cal.com requires API credentials for payment integrations:

```bash theme={null}
# Stripe
STRIPE_CLIENT_ID=your_stripe_client_id
NEXT_PUBLIC_STRIPE_PUBLIC_KEY=your_stripe_public_key
STRIPE_PRIVATE_KEY=your_stripe_private_key

# PayPal
PAYPAL_CLIENT_ID=your_paypal_client_id
PAYPAL_SECRET_KEY=your_paypal_secret_key

# Alby
ALBY_CLIENT_ID=your_alby_client_id
ALBY_CLIENT_SECRET=your_alby_client_secret
```

<Info>
  Cal.com Cloud users don't need to configure environment variables - all payment processors work out of the box.
</Info>

## Troubleshooting

### Payment integration won't connect

1. Verify you're using a Business account (for PayPal)
2. Check that API credentials are correct (for self-hosted)
3. Ensure your payment processor account is activated
4. Try disconnecting and reconnecting
5. Check browser console for error messages

### Bookings created without payment

1. Verify "Require payment" is enabled in event type settings
2. Check that a payment processor is selected
3. Ensure price is set to a value > 0
4. Test the booking flow end-to-end

### Webhooks not working (self-hosted)

For Stripe webhooks:

1. Configure webhook endpoint: `https://yourdomain.com/api/integrations/stripepayment/webhook`
2. Select events: `checkout.session.completed`, `payment_intent.succeeded`
3. Copy webhook secret to environment variable: `STRIPE_WEBHOOK_SECRET`

## Comparing payment processors

| Feature              | Stripe        | PayPal           | Alby (Bitcoin) | HitPay            |
| -------------------- | ------------- | ---------------- | -------------- | ----------------- |
| **Setup difficulty** | Easy          | Easy             | Medium         | Medium            |
| **Transaction fee**  | 2.9% + \$0.30 | 2.9% + \$0.30    | \< 1%          | 2.5% - 3.5%       |
| **Payment methods**  | 40+           | PayPal + Cards   | Bitcoin only   | E-wallets + Cards |
| **Global support**   | 46 countries  | 200+ countries   | Worldwide      | APAC only         |
| **Settlement time**  | 2-7 days      | Instant (PayPal) | Instant        | 1-3 days          |
| **Chargeback risk**  | Yes           | Yes              | No             | Yes               |
| **Self-hostable**    | No            | No               | Yes (BTCPay)   | No                |

## Next steps

<CardGroup cols={2}>
  <Card title="Event types" icon="calendar-check" href="/event-types">
    Configure pricing for event types
  </Card>

  <Card title="App Store" icon="store" href="/integrations/app-store">
    Explore other integrations
  </Card>
</CardGroup>
