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.

There is no dedicated “get the one card” endpoint. The widget fetches the customer’s full list of saved payment methods (the same list the management dialog below uses) and picks the one flagged as the invoice-settings default.

Updating the card

Click Update Payment Method to open the Manage Payment Methods dialog. It lists every card attached to the customer, with a Default badge on the one Stripe charges next; you can promote any other card with Set as default, or remove a non-default one with the trash-can button on its row. Removing the sole card is blocked while a subscription is billable (trialing/active/past_due) — Stripe would have nothing to charge at the next renewal.

To add a new card, click Add payment method. This switches the dialog to a Stripe PaymentElement sub-panel — 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 promotes it to the default invoice payment method. The old card is not automatically detached — use Set as default to swap back, or the trash-can button to remove it from the list.

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.