A payment connection says which Stripe events it invoices
event_source (PAYMENTS, INVOICES or BOTH) picks which family of Stripe events a connection invoices. Existing connections are BOTH, which is today's behaviour.
A Stripe account sends every event to the same webhook endpoint, but you may only want one family of them invoiced: your charges, or the invoices Stripe Billing issues. A connection now declares which with event_source, and what falls outside it is recorded as skipped and needs no attention.
Every existing connection is BOTH, so nothing you have changes until you set it.
What else changed
PAYMENTSinvoices charges, frompayment_intent.*andcheckout.session.*.INVOICESinvoices Stripe's own billing documents, frominvoice.*.BOTHtakes both, deduplicated to one invoice per charge.- Refunds, disputes and credit notes are acted on under every value, because Stripe does not always report a correction through the family the charge came in. A correction whose charge was never invoiced is recorded as skipped and needs no action.
- Changing it affects the events that arrive from then on. Events already recorded keep their outcome.
Endpoints
- PATCH/v1/companies/{company_id}/payment-connections/{connection_id}Accepts event_source
- GET/v1/companies/{company_id}/payment-connectionsEvery connection carries event_source
Where to go next
Three response fields were never guaranteed
`amount`, `currency` and `sending_history.sent_at` leave `required`. No response changes — the contract was promising something the server never did.
New webhook event: invoice.pdf.generated
`invoice.pdf.generated` tells you an invoice's PDF is stored and ready, so you can fetch it instead of polling.