When to use this
Use CKO-03 direct delivery when:- The subscriber’s building is already wired — a switch port exists and is assigned to their unit
- You run your own checkout page and want full control over the payment and signup experience
- Your plan is listed on the kurnl marketplace and you want subscribers to start there
How it works
Step-by-step
1. Configure your checkout URL
In Dashboard → Settings → Integration, set yourexternal_checkout_url. When a subscriber selects your plan, the kurnl Marketplace creates a checkout session and redirects them to your page with a single query parameter appended:
Example redirect:
2. Read the session
On page load, fetch the session to get the plan and location the subscriber selected:plan_versions object gives you the plan name and price to display. Sessions expire after 30 minutes — a 410 Gone means the subscriber must restart from the Marketplace. See Checkout Sessions for the full session API, including the PATCH upsell endpoint for swapping plans mid-checkout.
Legacy handoff: integrations built before the session flow received
location_hash, plan_version_id, and service_provider_document_id as individual query parameters. That handoff is obsolete — new integrations should always read the session. The callback still accepts explicit fields for non-Marketplace flows (see the field reference below).3. Collect payment and subscriber details
Run your normal checkout flow. Collect the subscriber’s:- Name, email, phone (optional)
- Billing address
- Payment method
4. Call kurnl after successful payment
After payment succeeds, POST to/partner/external-checkout/complete with the session_id and the subscriber’s details. kurnl reads the plan, location, and provider from the session — you never re-send them:
subscription_id and subscriber_id in your system — you’ll need them for any future subscriber management calls. The callback is idempotent: a second call with the same session_id returns the existing subscription without re-provisioning.
5. Handle webhook events
kurnl fires events to your configuredwebhook_url at each stage:
At
provisioning.completed, the subscriber’s internet is live. This is the right moment to send them a confirmation email.
See Webhooks for signature verification and retry behaviour.
Field reference
Session flow (recommended)
Explicit fields (non-Marketplace flows only)
Subscriber fields (required in both flows)
Optional fields
Contact detail fields
Address fields
Error handling
On 5xx errors: Safe to retry the full request. kurnl rolls back any partial state automatically on failure.
On network timeout: Retry the request — it is idempotent. The same
session_id (or, in the explicit-fields flow, the same email + plan_version_id combination) returns the existing subscription rather than creating a duplicate.
Anonymous variant
If you own the end-user relationship and don’t want kurnl to store subscriber PII, use the anonymous variant instead. You provide anexternal_subscription_id (your own identifier) instead of a subscriber object. kurnl provisions the port but creates no subscriber record.