Skip to main content
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), and an object with none can start from Create quote and View contract in one click.
Settings → Payments is admin only. A member who opens it sees “Only workspace admins can set up payments.” and nothing else.

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

1

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 below.
2

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.
3

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.
4

Payment defaults

What a new quote starts with. Every quote can change them. See Payment defaults.
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.
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.

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: 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: 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 tab counts it.

Payment defaults

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

Developer API

For billing from your own 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