OmniCon 2.0.229 — A new pricing page, live usage on your billing dashboard, Stripe receipts in your language, and lifecycle notifications for your team
June 24, 2026
Nineteen versions on from 2.0.210. The headline this release is billing transparency end to end. A new dedicated pricing page with a side-by-side feature comparison. Live usage cards on your billing dashboard so you can see exactly where you stand against your plan. Stripe-hosted Checkout and receipts that render in your language. And a new lifecycle-events stream that posts every signup, renewal, plan change, and cancellation to a Microsoft Teams channel of your choice — so the rest of your team sees revenue activity without anyone logging into Stripe.
2.0.229 is nineteen versions on from 2.0.210. Five themes stand out: a new pricing page, live usage cards on the billing dashboard, lifecycle notifications for your team, localized Stripe receipts, and a hardened subscription pipeline.
A dedicated pricing page
A new /{culture}/pricing page lays out the three plans side by side with a full feature comparison table, an FAQ accordion, and a clear path from "interested" to "subscribed."
- Three plans, one source of truth. Free (1 channel, 1,000 API calls / month, 500 MB), Basic ($14.99 / mo — 5 channels, 50,000 API calls / month, 10 GB, custom domain), Premium ($49.99 / mo — unlimited channels + API, 100 GB, PRM, priority support). The same plan definition powers the pricing page, the billing dashboard's plan cards, and every runtime gate — so what you read, what you click, and what you receive in your invoice are always the same numbers.
- Cleaner Subscribe flow. Clicking a plan now hands off directly to Stripe Checkout. Stripe already collects card details and asks for purchase confirmation on its own page, so we removed the redundant in-app confirm dialog that used to appear first.
- API rate-limit signals on every response. Authenticated
/api/*requests now carryX-OmniCon-Quota-Limit,X-OmniCon-Quota-Remaining, andX-OmniCon-Quota-Resetresponse headers so API consumers can self-pace their workload. Hit the monthly cap on a Free or Basic plan and you get a structured429 quota_exceededJSON envelope with anupgradeUrlpointing straight at/billing— Premium has no monthly cap and short-circuits the limiter entirely.
Live usage cards on your billing dashboard
The org billing page at /usr/org/.../billing grew two new cards so you can see usage at a glance instead of guessing.
- API usage this month. Used vs cap with a progress bar that shifts green → warning at 75% → danger at 90%. A small callout appears past 90% suggesting the upgrade flow. Resets on the first of next month. Hidden for Premium — unlimited doesn't have a cap to show.
- Storage. Same shape, in MB / GB, against your plan's storage cap. Same tint pattern, same upgrade prompt as you approach the limit.
- Plan cards mirror what the gates enforce. The "Available Plans" cards on
/billingare driven by the same plan definition that powers the rate limiter, the storage gate, and the AI Studio quota — so the numbers you see and the numbers we honor are always identical.
Lifecycle notifications for your team
Billing events that matter to your team now land as emails in a configurable inbox — defaulting to a Microsoft Teams channel address, so revenue signals show up as channel posts. No one needs to log into Stripe Dashboard to know what's happening.
- What posts to the channel: new signups, first subscribe, monthly renewals, plan changes, cancellations, payment failures, and paywall hits.
- Each post includes org name, owner email, plan tier, Stripe customer + subscription IDs, amount paid (for renewals), and the event timestamp — everything your team needs to follow up without opening another tab.
- Cancellation notifications capture the previous tier before the org reverts — "Cancellation finalised (premium → free)" reads better than "now on free".
- Smart filter for renewals: the first-month signup is reported once on the actual Checkout event, not duplicated by the invoice that fires the same payment. Monthly auto-renewals from that customer post normally each cycle.
- Customers get a friendly upgrade nudge when they bump into a plan limit, with a plan-aware pitch (Free users see Basic + Premium, Basic users see only Premium) and a link to
/billing. One nudge per (user, gate) per 24h so the prompt doesn't feel pushy. - Sales-side dedup: one post per (org, event-type) per hour, so a tight retry loop can't flood the channel.
Stripe receipts and Checkout in your language
If a customer signs up on /ja/, their Stripe-hosted Checkout, receipt email, and Customer Portal now render in Japanese. /en/ signups get English. Stripe's preferred_locales is pinned on the customer at creation, so the language the customer reads OmniCon in is the language their bill arrives in.
A hardened subscription pipeline
Several robustness improvements to the Stripe integration so subscriptions, webhooks, and customer state stay airtight across configuration changes — account rotations, Stripe SDK updates, or moving products between accounts.
- Webhook compatibility across API versions. The webhook receiver now accepts events from any Stripe API version the configured account uses, so dashboard endpoint upgrades don't require a synchronized code change.
- Self-healing customer records. When the cached customer pointer ever drifts out of sync with Stripe, the next Subscribe or Customer Portal call mints a fresh customer transparently — no operator intervention, no SQL fix, no user-visible error.
- Shared-account hygiene. Every Customer, Product, Price, and Checkout Session OmniCon creates is tagged with an app-identity marker so the integration plays nicely when one Stripe account serves multiple sibling products.
Also in this release
- Edge-cached static assets. Files under
/css/,/js/,/lib/,/images/,/fonts/now ship with a long-livedCache-Controlheader so Azure Front Door and browsers can serve them from the edge for a full week. Razor'sasp-append-versionhandles cache-busting on deploy, so updated styles and scripts land instantly. - Japanese article search. The article search index now writes
ja.microsoftcompanion fields so Japanese keywords match the way native speakers expect — important for Japanese-language Help and News channels.
If you'd like a hand walking through the new pricing page, wiring lifecycle notifications to your team's Teams channel, or making sense of the live usage cards on your billing dashboard, drop us a note.