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

# Set up payments

> Point Custral at your products and customers, connect your Stripe account, and choose how customers pay by default.

Before you can send a quote, an admin sets up payments once in **Settings → Payments**. The screen is a four-step checklist, in order: your products, your customers, Stripe, and the defaults a new quote starts with. Once every step is done, the same screen becomes a plain settings view where you can change any of them.

The screen has five tabs: **Payments** (the checklist, then Stripe, products, customers and payment defaults), **Who pays**, **Contracts** (your contract templates), **Record buttons** and **Developers** (the Developer API settings).

**Record buttons** lists your customers object and every object quotes can start from, with the buttons in each one's record header. **Edit buttons** opens the same editor as the object's own Buttons tab ([action buttons](/surfaces/views/action-buttons#buttons-on-a-record)), and an object with none can start from **Create quote** and **View contract** in one click.

<Note>
  Settings → Payments is **admin only**. A member who opens it sees "Only workspace admins can set up payments." and nothing else.
</Note>

## Stripe is the ledger

Quotes, invoices and subscriptions bill through **your own Stripe account**, connected to Custral. Stripe owns the subscriptions, invoices, invoice numbers, charging and the card and bank details. Custral reads them back live from Stripe, so the numbers you see in Custral match what Stripe shows. Card and bank details are only ever typed on Stripe's hosted page, never into Custral.

This is separate from **Settings → Billing**, which is what your workspace pays Custral.

## The setup checklist

<Steps>
  <Step title="Products">
    What you sell. Quotes pick their line items from this object. Choose **Use an object I have** and pick it, or **Create a Products object**. See [Products](#products) below.
  </Step>

  <Step title="Customers">
    Who pays. Each Stripe customer links to a record here, and invoices land on it. Use an object you have (a Companies object, say) and pick its **Billing email field**, or **Create a Customers object**, which gets Email and Stripe ID fields.
  </Step>

  <Step title="Connect Stripe">
    Sign in to the Stripe account that should bill your customers, and you come back to Settings → Payments when it's done. Your products push to Stripe as soon as you connect, and anything you already bill in Stripe keeps working. Custral then keeps two tables synced from Stripe: **Stripe Invoices** and **Stripe Subscriptions**.
  </Step>

  <Step title="Payment defaults">
    What a new quote starts with. Every quote can change them. See [Payment defaults](#payment-defaults).
  </Step>
</Steps>

Once connected, the Stripe row reads like "Connected to Juniper Ridge Inc.", with **· test mode** added when the account is a Stripe test-mode account. Test mode is the safe way to try the whole flow: Stripe's test cards and test bank accounts work, and nobody is charged.

## Who pays

Once Customers is set, the **Who pays** section says how billing is shaped around it. It saves from the bar at the bottom of the screen.

### Billing contact

Pick an **email field** on the paying object as the billing contact, or choose **Add a "Billing email" field**. New quotes go to this address by default, from the app, from Stella and from the API, and Stripe sends the customer's invoices and receipts there. On the customer's Billing panel, **Change** picks one of their people or takes an address; Stripe's customer email follows.

<Note>
  The billing contact is an email field rather than a link to a person. A link to People can't hold just one person: every link from a company to its people would show in it.
</Note>

### Quotes from other objects

Quotes can also start from another object that links to the customers object, such as **Deals**. Pick the object and its field that links to the customer (a Deals "Company" field). A quote made on a deal bills that deal's company, so a company with three deals still has one card on file, one invoice history and one MRR.

If each deal really is its own billing account, make **Deals** the customers object instead, and pick the deal's company field as its **parent**. The company then adds up its deals' billing fields.

### Billing fields

Billing facts can appear as fields on the paying object, the objects quotes start from, and the parent. Tick the ones you want for each:

| Field | Holds | On a parent |
| - | - | - |
| **Billing status** | Active, Trialing, Past due, Cancelled or No subscription | The worst of its children (Past due beats Active) |
| **MRR** | Monthly recurring revenue | The sum |
| **Renewal date** | The soonest renewing contract's term end, else the subscription's next renewal | The soonest |
| **Contract end** | The soonest live contract's term end | The soonest |
| **Payment method** | "Visa ···· 4242" | Not added up: each pays its own |
| **Card expires** | The card's month | The soonest |
| **Open balance** | What's unpaid on open invoices | The sum |

Custral keeps these up to date from Stripe and your contracts: when Stripe reports a change, when a contract is recorded or cancelled, and once a day. Nobody edits them by hand, admins included, and they show a lock. Use them in views, filters, dashboards and workflows ("card expires before December", "deals whose subscription went past due"). Unticking a field hides it and keeps any view that uses it working. A money field shows one currency; a customer billed in two shows the larger.

### Invoices, linked

The synced **Stripe Invoices** table links each invoice to the customer it bills and, when it came from a deal's quote, to the deal, and names the quote. Invoices then show on the company's and the deal's pages and can be filtered by customer. They link as they sync.

## Products

The Products object is your catalog. Each product record carries:

| Field | Holds |
| - | - |
| **Name** | What the line is called on a quote and an invoice. |
| **Description** | Optional detail shown under the name. |
| **Price** | The list price, in major units: `49.50` is \$49.50. On a usage product, the price per unit. |
| **Currency** | A currency code such as `usd` or `eur`. US dollars when empty. |
| **Interval** | **One-time**, **Monthly** or **Yearly**. |
| **Usage event** | Optional. The name of a usage event, which makes the product billed per unit from [usage](/bi/reporting/usage). |

**Create a Products object** adds all of these fields. If you pick an object you already have, Custral matches its fields by key or name (for example a field called "Unit price" or "List price" maps to Price, and "Billing period" maps to Interval). Once saved, the step lists what it mapped, for example "Using Products · Name, Price, Currency mapped · 7 products". A field that wasn't picked up can be renamed to match.

A quote line starts at the catalog price, and a rep can change the price for one deal. A custom price is sent to Stripe for that deal only and never changes the catalog.

### Usage products

A product with a **Usage event** becomes a metered price in Stripe. Usage events your product records against a customer are forwarded to Stripe, and Stripe bills them per unit each month. Each usage event is sent once, so a retry never bills it twice. Usage for a customer who has no Stripe customer yet (they haven't accepted a quote) isn't billed, and the [Receivables](/revenue/receivables-and-collections) tab counts it.

## Payment defaults

| Setting | Options |
| - | - |
| **Accepted payment methods** | **Card**, **US bank account**, **SEPA Direct Debit**. At least one. Card when nothing is set. |
| **Default way to pay** | **Autopay (card or bank on file)** or **Send invoices**. Autopay when nothing is set. |
| **Payment terms** | Days an invoice is due after it's sent, 0 to 365. 30 when nothing is set. |

The accepted methods are what Stripe's page offers a customer who accepts an autopay quote.

## Developer API

For [billing from your own product](/dev/guides/bill-from-your-product), the screen also has a **Developer API** section:

* **Customer key**: the field on your Customers object that holds your app's own customer id, so the API can name a customer by it.
* **Allowed return domains**: the hosts a hosted quote may send the customer back to after accepting, comma-separated (for example `app.example.com`). A quote created with a return URL on any other host is refused.
* **API keys**: **Open API keys** to create a key with the `quotes:write` and `billing:read` scopes.

## Switching Stripe accounts

In the settings view, **Switch account** signs you in to a different Stripe account. New quotes, invoices and the synced Invoices and Subscriptions tables use the new account. Subscriptions already running stay on the old account in Stripe.

## Troubleshooting

| You see | Do this |
| - | - |
| The quote builder says an autopay quote can't be sent | Stripe isn't connected. Finish the Connect Stripe step. |
| A quote shows **Stripe not connected** after the customer accepted | Connect Stripe, then choose **Retry** on the quote. |
| The customer's page says online payment isn't set up | The quote is on autopay and Stripe was disconnected. Reconnect it. |
| Receivables or Metrics says Stripe isn't connected | Connect Stripe here. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.