This page records changes to the partner-facing surface: endpoints you call, payloads you send, errors you handle, and corrections to these pages. Internal platform work is not listed. Each entry ends with Check your integration when there is something to act on. If you built against these docs before a dated entry below, read that line.
Dates are when the change landed on the lab environment (middleware.bso-projects.com). Production follows in a later promotion — ask your kurnl contact if you need to know whether a change is live in production yet.

2026-09-17 — Partners can change a subscription’s plan directly

New endpoints: POST /partner/subscriptions/{subscription_id}/change-plan and GET .../change-plan/preview. Previously, changing a subscriber’s plan required a dashboard session — the partner API only covered checkout and suspend/restore. Now your own dashboard or billing system can change the plan on any of your ACTIVE subscriptions directly, once per calendar day (UTC). The change is immediate; there is no scheduled option. Call the preview first to check eligibility and disable your own control instead of failing on submit. Billing follows the subscription: if kurnl doesn’t invoice it (true for CKO-03 subscriptions), kurnl issues no invoice line or credit note — your billing is authoritative. bandwidth_updated: false in the response means the plan change applied but the port needs an operator to confirm it; it is not a reason to retry. Check your integration: this is new — nothing existing breaks. If you were waiting on plan-change support to build a self-serve upgrade/downgrade flow, you can build it now. Pages: plan change, Subscriber Management.

2026-09-17 — A first-line building can be ordered by suite

POST /partner/external-checkout/complete used to reject a session that carried a building and a suite when the building was classified first-line, with:
A first-line building is reached two ways. From the captive portal the port is known and kurnl provisions it immediately — unchanged. From address search or a QR landing there is no port, only a building and a suite; that order now takes the install path, exactly as a second- or third-line building does. The kurnl marketplace has behaved this way since the day before; the partner path now matches. The remaining 422 fires only when a session carries neither a port nor a unit_id, and its text changed to:
Check your integration: if you special-cased the old 422 message, remove it — that order now succeeds and returns the PENDING_INSTALL shape (200 without job_id). If you match on error text anywhere, match on the status code and your own logic instead. Pages: complete, CKO-03 direct, CKO-03 home-drop.

2026-09-16 — Customers book their own installation

Where an order takes the install path, the customer receives a booking link and picks their own appointment slot, rather than an operator scheduling it. The booking invitation is held until the move-in date is inside the region’s booking window. Check your integration: nothing to change. Your thank-you page can tell the customer to expect a booking e-mail. Pages: CKO-03 home-drop, CKO-03 anonymous, anonymous complete.

2026-09-15 — Per-provider Stripe connection

Providers who use kurnl’s checkout now connect their own Stripe account, and the plan payload carries whether they have done so. Check your integration: nothing to change for external checkout (CKO-03) — you take payment yourself and kurnl is not involved in it. Pages: plans, subscribers.

2026-09-05 — Calendar-month billing

Subscription billing moved to calendar months across the partner surface, and the subscriber and reporting payloads reflect it. Check your integration: only relevant if you read kurnl’s billing fields. Partners who bill their own customers (the CKO-03 anonymous variant) are unaffected. Pages: subscribers, CKO-04 provider-initiated.

2026-08-25 — External checkout starts on the marketplace (correction)

This entry corrected documentation that was wrong for six days. If you drafted your CKO-03 integration between 19 and 25 August 2026, read this one carefully.
Between 19 and 25 August the CKO-03 guides described a store-originated flow with a “step 0” address check: your storefront would call the serviceability endpoints, then create a checkout session. That was never how CKO-03 works, and the guides were reverted. The actual contract: external checkout always starts on the kurnl marketplace. The shopper picks your plan there, the marketplace resolves the address, picks the building and suite, creates the session, and redirects to your checkout page with ?session_id=. A CKO-03 partner therefore never checks addresses, never picks a building or unit, and never creates sessions. Your page reads the session and posts the completion. The serviceability endpoints are real, but they are for CKO-04 — a storefront that runs its own funnel end to end and never touches the marketplace. Check your integration: if you built an address check or a session-creation call into your checkout page, remove it. A session your store creates bypasses the marketplace’s serviceability gate and will not route correctly. Also in this change: the suspend/restore state guards were documented. suspend applies only to an ACTIVE subscription and restore only reverses a suspend; anything else returns 409 with an explicit message. Pages: overview, CKO-03 direct, CKO-03 anonymous, subscription-status, serviceability.

2026-08-17 — Documentation re-verified against the code

Roughly thirty pages were corrected against the running implementation after an audit found divergences in endpoint paths, payload fields and error codes. Check your integration: if you built against these docs before 17 August 2026, re-read the pages you implemented. Field names and error codes changed on several of them.

2026-08-13 — No WordPress plugin; integrate against the API

The kurnl-maintained WooCommerce plugin was dropped. Partners integrate against the partner API with their own code instead, in whatever stack their store runs on. Check your integration: if you were waiting for a plugin, you are not — build against the integration guides. kurnl never calls your store; your store always calls kurnl. Pages: introduction, overview, subscription-status.