Skip to main content

Setting up Auto-Pay

Auto-pay automatically charges customers when their invoices are due using Stripe’s invoicing system. Stripe handles charging, retries (via Smart Retries), failure emails, and receipts — Monk handles invoice generation and status tracking.
Two billing modes: Monk supports two ways to bill customers:
  • Auto-charge via Stripe — Stripe charges the customer’s payment method automatically. Best for self-serve / PLG.
  • Invoice & collect via Monk — Monk emails the invoice and manages collections. Best for enterprise / SLG.
This guide covers the Stripe auto-charge mode. For Monk email invoicing, see PLG vs SLG workflows.

Before You Start

You’ll need:
  • A Monk account with Stripe connected
  • A plan configured with Auto-charge via Stripe billing mode
  • Customers with saved payment methods in Stripe
Integrations page showing connected Stripe account with status and settings

How Auto-Pay Works

1. Invoice reaches invoiceDate

2. Monk creates a Stripe invoice (charge_automatically)

3. Stripe charges the customer's default payment method

4. Success → Stripe sends receipt, Monk marks invoice Paid
   Failure → Stripe Smart Retries (up to 8 attempts over 2 weeks)

5. All retries exhausted → Monk disables auto-pay, escalates to collections

What Stripe Handles

EventStripe sendsMonk sends
Invoice finalizedInvoice notificationNothing
Payment succeedsReceipt emailNothing
Payment fails”Payment failed” emailNothing
Card expiringExpiration warningNothing
All retries exhaustedLast failure emailNothing (disables auto-pay internally)

Payment Method Resolution

When charging, Monk looks for payment details in this order:
  1. Contract-level: Payment method saved when customer paid via the payment portal
  2. Customer-level: Default payment method set via the API (paymentMethodId on the customer)
Contract-level payment methods take priority. This allows different payment sources for different contracts (e.g., different credit cards for different projects).

Step-by-Step: Enable Auto-Pay

1. Configure the Plan

Auto-pay starts at the plan level:
  1. Navigate to Products → Plans
  2. Create a new plan
  3. Under Settings, select Auto-charge via Stripe as the billing mode
  4. Net terms are automatically set to “Due on receipt” (Net 0)
Auto-charge via Stripe and Invoice & collect via Monk are mutually exclusive. Stripe mode always uses Net 0 terms. You cannot combine Stripe auto-charge with Net 30/60 terms.

2. Create a Contract

When creating a contract on an auto-charge plan:
  1. The billing mode is inherited from the plan
  2. Auto-pay is enabled automatically
  3. The contract drawer shows the current auto-pay status

3. Collect Payment Method

Customers need a saved payment method before auto-pay can charge them. Save a payment method on the customer via the Monk API:
curl -X PATCH https://api.monk.com/api/v1/customers/{id} \
  -H "x-api-key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentMethodId": "pm_xxx",
    "paymentMethodType": "card"
  }'
The payment method must be attached to the customer in Stripe first. Use a SetupIntent to collect and save payment methods:
// Server-side: Create SetupIntent for the customer
const setupIntent = await stripe.setupIntents.create({
  customer: 'cus_xxx', // Stripe customer ID
  usage: 'off_session', // Required for auto-pay
  automatic_payment_methods: { enabled: true },
});
Always set usage: 'off_session' when creating SetupIntents for auto-pay. This ensures the payment method can be charged without the customer present.

Option B: Payment Portal

When customers receive their first invoice:
  1. They click the payment link in the invoice email
  2. They pay via Stripe Checkout
  3. They check “Save payment method for future invoices”
  4. Payment method is saved and linked to the contract

Option C: Stripe Dashboard

For manual setup:
  1. Find the customer in Stripe Dashboard
  2. Go to Payment methods → Add a card or bank account
  3. Set it as the default payment method

Payment Retry (Smart Retries)

When a charge fails, Stripe’s Smart Retries automatically retries the payment at optimal times using machine learning.

Configuration

Configure retry settings in your Stripe Dashboard under Settings → Billing → Reminders and retries:
  • Smart Retries: Up to 8 retries within 2 weeks (recommended)
  • Invoice reminders: Send reminders for unpaid invoices
  • Failed payment emails: Notify customers when charges fail

Retry Lifecycle

Charge fails

Stripe Smart Retries (ML-optimized timing, up to 8 attempts)
    ├─ Retry succeeds → Invoice marked Paid, customer gets receipt
    └─ All retries exhausted → Monk disables auto-pay, escalates to collections

What Monk Tracks

During retries, Monk records the Stripe retry status on the invoice metadata:
  • Retrying: Next retry date, attempt count
  • Exhausted: All retries failed, auto-pay disabled
  • Paid: Retry succeeded
This is visible in the invoice activity timeline in Monk.

Stripe Emails

When using auto-charge via Stripe, Stripe handles all customer-facing emails. Monk does not send any emails for this billing mode. Enable these in your Stripe Dashboard under Settings → Billing → Emails:
EmailSetting
Payment receiptsSettings → Business → Customer emails
Failed payment notificationsSettings → Billing → “Send emails when card payments fail”
Card expiration warningsSettings → Billing → “Send emails about expiring cards”

Monitoring Auto-Pay

Invoice Status Flow

Drafted → In Progress → Paid

          (Stripe charges here)

          If failed → Stripe retries → Paid or Exhausted

Successful Charge

When auto-pay succeeds:
  • Invoice status changes to Paid (via invoice.paid webhook)
  • Stripe sends payment receipt to customer
  • Payment allocation recorded in Monk

Failed Charge

When all retries are exhausted:
  • Invoice remains in In Progress status
  • Auto-pay is disabled on the contract
  • Collections escalation triggered (if configured)
  • Customer can still pay manually via the Stripe hosted invoice page

Troubleshooting

”Invoice wasn’t charged automatically”

  1. Check billing mode: Is the plan set to “Auto-charge via Stripe”?
  2. Verify payment method: Does the customer have a saved payment method?
  3. Check Stripe connection: Is your Stripe account connected?
  4. Review invoice date: Auto-pay runs daily at 6 AM EST for invoices due today

”Customer was charged but invoice still shows unpaid”

  1. Check Stripe for the invoice status
  2. Webhooks may be delayed — wait a few minutes
  3. Verify the Stripe webhook endpoint is receiving events

”Stripe retry emails not being sent”

Check Stripe Dashboard → Settings → Billing → Emails. Ensure “Send emails when card payments fail” is enabled.

FAQ

Can I use auto-pay with Net 30 terms?

No. Auto-charge via Stripe requires Net 0 (due on receipt). For Net 30+ terms, use “Invoice & collect via Monk” and manage collections manually or via Monk’s collections playbooks.

What if a customer doesn’t have a payment method?

The invoice will be finalized but won’t be charged. It remains in “In Progress” status. Add a payment method to the customer and the next invoice will be charged automatically.

Is there a retry limit?

Stripe Smart Retries attempts up to 8 retries within 2 weeks by default. You can customize this in Stripe Dashboard → Settings → Billing → Retries.

Can customers pay manually during retries?

Yes. The Stripe hosted invoice page allows customers to pay at any time, even during the retry window.

What happens to existing plans?

Existing plans with sendMethod='email' continue to work as before. The billing mode change only affects newly created plans and contracts.

Next Steps

PLG vs SLG Workflows

Compare self-serve and enterprise billing approaches

Stripe Smart Retries

Stripe documentation on automatic payment retries

Billing Overview

Complete guide to SaaS billing with Monk

Save Payment Methods

Stripe documentation on saving payment methods