Integraph

Payment methods and invoices

How to view and update the saved card, download invoices, and work with the split between billing email and login email.

Where to find these

Payment methods and invoices live on the billing tab that owns the Stripe customer:

  • Your personal card and invoices — Account Settings → Billing.
  • An org’s card and invoices — Organization Settings → Billing (only owners can see or change these).

Both tabs show the same UI components, but each is scoped to a different Stripe customer. You cannot see an org’s card from Account Settings, and you cannot see a member’s personal card from Organization Settings — the permission boundaries are strict.

Viewing the saved card

The current default payment method is shown as a small card widget: brand (Visa, Mastercard, etc.), last 4 digits, and expiry date. If there is no card on file — because the customer has never completed a Checkout — the widget shows an “Add payment method” call to action.

Updating the card

Click Update Card to open a dialog containing a Stripe PaymentElement — a different Stripe component from the embedded Checkout used on first subscribe. This one is backed by a SetupIntent rather than a Checkout Session, which is the correct primitive for “add a new card without a charge” scenarios.

Fill in the new card details and click Save. The dialog confirms via Stripe, attaches the new payment method to the customer, and marks it the default invoice payment method. The old card is not automatically detached — if you want to remove it, you’ll need to delete it explicitly (though in practice this is rarely necessary because only the default card is used for future invoices).

The field label drift between Checkout and PaymentElement

One gotcha for anyone building automation around this dialog: the PaymentElement uses slightly different field labels than the Embedded Checkout. “CVC” vs “Security code”, “Expiration” vs “Expiration date”, “ZIP” vs “Postal code”. If you’re writing selectors against the card input fields, use case-insensitive regex patterns rather than exact label matches — the e2e tests took this lesson the hard way.

Viewing invoices

The Invoices section lists all invoices Stripe has issued for the customer, newest first. Each row shows the invoice date, the amount in your billing currency, the status (paid, open, uncollectible, etc.), and a Download PDF link that fetches the official Stripe-hosted PDF directly.

The invoice list pulls straight from Stripe — nothing about invoices is stored in our database. This means the list is always up-to-date with Stripe’s view, and if you see an invoice on Stripe’s dashboard that isn’t in the list, something has gone wrong with the customer ID linkage (rare — and a good prompt to email support).

Billing email vs login email

Every Stripe customer has a billing email — the address Stripe sends invoices and dunning notices to — and that address is initially set to your login email when the Stripe customer is created. They are the same thing until you change one of them, and then they diverge.

  • Login email is managed via Cognito (your account) and is what you use to sign in.
  • Billing email is managed via Stripe and is where invoices, payment failure notices, and dunning emails go.

To change your billing email without changing your login email, open the customer portal from the billing tab (if we expose that — else contact support). Changing your login email via Account Settings does not automatically change the billing email — they are deliberately decoupled so that a user can hand off billing to an accountant while keeping their own login.

For org subscriptions, the billing email defaults to the org owner’s email at creation time. Org owners should check this is pointing at the right address — often it’s the accounts payable team rather than an engineer.

Dunning emails

When a payment fails, Stripe and our backend both send email. Stripe’s dunning emails are the authoritative ones (they contain the “update your payment method” link). Our backend sends a supplementary notification on invoice.payment_failed to the org’s billing email, rate-limited to once per 24 hours per org to avoid flooding during a retry loop.

If you’re not seeing dunning emails at all during a failed payment, first check that the billing email on Stripe is correct, then check your spam folder — the sender address is the same for all Integraph transactional mail and some inbox rules are aggressive.

Downloading invoices for accounting

The Download PDF link gives you the official Stripe-generated invoice PDF with Stripe’s hosted signature. This is the document your accounting team will want — it has the tax breakdown, Integraph’s business details, your customer details, the line items, and the payment status. Don’t screenshot the UI; always use the download.

If you need a receipt for a one-off payment (for example, if you were charged via a manual invoice), the PDF serves as both invoice and receipt once the invoice status is paid.