> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cortado.pro/llms.txt
> Use this file to discover all available pages before exploring further.

# Customer Portal

> The branded web experience your customers use to review quotes, accept bookings, and pay invoices

## Customer Portal Overview

The Customer Portal is the public-facing side of Cortado — where your customers land when you share a quote or invoice link. It's branded with your organization's name and logo, secured with signed tokens, and optimized for the three actions customers actually need to take: review, accept, and pay.

There are two portal experiences:

* **Quote review** — customers see the quote, compare alternates, and accept.
* **Booking & invoices** — after acceptance, customers manage invoices and pay balances.

## How Customers Get There

You share the portal with a customer in one of three ways:

1. **Send by email** — click Send on a quote or invoice; Cortado emails a personalized link.
2. **Share by email** — enter any recipient emails from the invoice or quote detail page and Cortado sends them a copy.
3. **Copy link** — grab a secure link from the quick actions and paste it into your own message.

All portal links include a **signed JWT token** that grants temporary access to that specific quote or booking. The token is stored in the customer's browser after the first visit, so they can return without re-entering the URL. Expired or missing tokens redirect to a friendly "link expired" page with the option to request a new one from you.

<Note>
  Tokens expire for security. If a customer's link stops working, resend the quote or invoice from Cortado to generate a fresh link.
</Note>

## Quote Review

When a customer opens a quote link, they see a split layout:

* **Left panel** — submission details, event dates and locations, selected add-ons, and a list of every quote you've sent for this inquiry.
* **Right panel** — the selected quote with line items, totals, payment schedule, and an **Accept Quote** button.

The portal automatically marks the quote as **Viewed** the first time it loads, so you can see when customers engage.

### Comparing Multiple Quotes

If you've sent more than one quote on an inquiry, customers see a **Compare Quotes** button. Compare mode lets them select up to two quotes and see them side-by-side, with a toolbar showing the price difference between them.

### Accepting a Quote

The Accept button opens a three-step confirmation dialog:

<Steps>
  <Step title="Confirm event details">
    The customer reviews event date, time, location, and guest count. For multi-event quotes, they see a table of every event in the quote.
  </Step>

  <Step title="Review quote">
    The customer sees a final summary of line items, totals, and the payment schedule. If you have Terms & Conditions configured, a link to the full text appears above the Accept button.
  </Step>

  <Step title="Success">
    The quote is marked accepted, a booking is created, events are scheduled, and the first invoice is generated. The customer sees a confirmation with a link to their booking portal.
  </Step>
</Steps>

<Tip>
  Once accepted, the same portal token is associated with the new booking so the customer can jump straight from the quote to managing their invoices.
</Tip>

## Booking and Invoices

After acceptance, the customer lands on the booking page. It's organized as a split layout:

* **Left panel** — a list of all invoices tied to the booking, plus scheduled event details (date, time, duration, location, guest count).
* **Right panel** — the currently selected invoice with line items, tip selector, totals, and the payment schedule timeline.

Customers with multiple invoices — common for multi-event bookings or when you issue a separate invoice per milestone — can click between them in the sidebar.

### Paying an Invoice

The payment schedule is rendered as a vertical timeline. Each schedule shows:

* A status icon (pending, next up, processing, paid, overdue)
* Description and due date
* Amount (with tip included on the final schedule when applicable)
* A **Pay** button on the next unpaid schedule

Clicking **Pay** opens an embedded Stripe checkout dialog. The customer completes payment without leaving the portal, and the schedule status updates as soon as Stripe confirms.

### Pay in Full

If an invoice has multiple schedules and no payment has been made yet, the customer sees a **Pay in Full** button that collapses the whole invoice into a single payment. They can still choose to pay installments instead by clicking **Pay** on the first schedule.

### ACH Bank Verification

When a customer pays via bank transfer and the account requires microdeposit verification, the schedule shows a **Verify Bank Account** prompt. Clicking it opens Stripe's hosted verification flow in an in-portal iframe. Once verified, the payment continues to process.

### Payment Processing States

ACH payments take longer than cards to clear. During processing, the schedule shows a "Payment processing" indicator with ACH-specific timeline messaging so customers understand what to expect.

### Download a Receipt

After a schedule has a completed payment, the customer can download a **payment receipt PDF** from that schedule on the booking page. The receipt is not offered while a payment is still processing. You can download the same file from the invoice in Cortado — see [Payments](/guides/payments#payment-receipts).

## Tip Selector

The tip selector appears above the invoice totals whenever the invoice isn't fully paid and tips can still be changed. It includes:

* Preset percentage buttons (configurable in organization settings)
* An optional custom amount input
* A "No tip" option with an optional message you've configured

### Enforced Tips

If you've set an enforced tip percentage for the event type, the selector:

* Hides percentages below the minimum
* Auto-selects the minimum if the customer's current tip is below it
* Prevents the customer from paying less than the minimum

### Tip Lock

Once the first payment is made, the tip amount locks and can't be changed — even if the customer returns to pay another schedule. This keeps totals consistent across multiple payments.

## Invoice Summary and Sharing

At the top of each invoice, the customer sees the invoice title, payment status badge, and a description if you've added one. Paid invoices show the paid date and payment method (e.g., "Paid on April 1, 2026 • Visa \*\*\*\*4242").

A **Share** button lets the customer forward the invoice to someone else (a spouse, accountant, or event co-organizer) — Cortado sends the invoice to the emails they enter, bypassing the need for them to re-share the link manually.

## Terms and Conditions

If you've configured Terms & Conditions under organization settings, they appear in two places:

* **Portal footer** — a persistent link in the footer of every portal page opens a modal showing all clauses in order.
* **Quote acceptance dialog** — a reminder above the Accept button with a clickable link to view the terms before committing.

Terms include a title and body per clause, and appear in the order you've configured.

## Organization Branding

Every portal page displays:

* Your organization's logo (if uploaded) in the header
* Your organization name
* A contact email icon that opens the customer's mail client

Branding is pulled automatically from your organization profile — no separate portal setup required.

## Security and Access

* **Signed tokens** — each portal link carries a JWT that's validated on every request
* **Token storage** — after the first visit, the token is stored in the customer's browser so reloads and revisits work seamlessly
* **Expiry** — expired tokens redirect to a clear "access expired" page that identifies your organization so the customer knows who to contact
* **Automatic cleanup** — tokens are cleared from the URL after storage, preventing accidental forwarding of live credentials

## Best Practices

1. **Always send by email from Cortado** — this creates a personalized token tied to the recipient and tracks engagement (Sent, Viewed, Accepted).
2. **Configure Terms & Conditions before sending quotes** — the terms link in the acceptance dialog is your best chance to get agreement on paper.
3. **Customize the tip message** — a friendly no-tip message explaining how tips support your team converts better than a bare 0% option.
4. **Use multiple invoices for long bookings** — separate deposit, progress payment, and final invoices give customers a cleaner view and reduce balance confusion.
5. **Keep logos high-resolution** — the portal header displays your logo at full size; blurry logos undercut the professional experience.
6. **Test the portal yourself** — share a live link to yourself before a big event to confirm the customer experience feels polished.

<CardGroup cols={2}>
  <Card title="Quotes" icon="file-lines" href="/guides/quotes">
    How quotes are built and sent before customers see them in the portal.
  </Card>

  <Card title="Invoices" icon="file-invoice" href="/guides/invoices">
    Creating and managing the invoices customers pay through the portal.
  </Card>

  <Card title="Payments" icon="credit-card" href="/guides/payments">
    Payment schedules, refunds, and how checkout works behind the scenes.
  </Card>

  <Card title="Settings" icon="gear" href="/guides/settings">
    Configure branding, terms, tip rules, and portal behavior.
  </Card>
</CardGroup>
