commercial_status_collection_method_unsafe
Raised by PATCH /admin/tenants/{id}/commercial-status (action tenant.commercial_status.set) on a transition to comped while the tenant's Stripe subscription is still charge_automatically and/or its Stripe customer still carries a default payment method. Recording the intent before the collection method can honour it means the next finalization charges the customer's card before any credit note can exist, and a credit note cannot be created against an invoice with a pending payment_intent - so the ordering is the control, not a checklist beside it. create_subscription states neither field today and says so in its own docstring (packages/providers/src/vocapable_providers/billing_stripe.py:1241-1243), and Stripe's documented default is charge_automatically, so this is the ordinary state of every subscription rather than an edge case. What an operator does: run billing.collection_method.set first (send_invoice, days_until_due=30, clear the default payment method), then re-send the same status. A transition away from comped never raises this. P1 - built 2026-08-19 (billing_admin.py:1005, route at :1107; tenants.commercial_status shipped as migration 0076 with ck_tenants_commercial_status).
Problem shape
Every non-2xx response is an RFC 9457 application/problem+json body. The type URI below is stable and machine-matchable, so branch on the final path segment (the code) and treat the status as redundant confirmation. See the error-handling guide.
{
"type": "https://docs.vocapable.com/errors/commercial_status_collection_method_unsafe",
"title": "…",
"status": 409,
"detail": "…",
"instance": "/v1/…"
}