Who this is for. These endpoints serve storefronts that run their own checkout funnel and provision through the provider-initiated API — the shopper types an address on your site and you need to know whether, and what, you can sell there. Marketplace-originated external checkout (CKO-03) never uses them: the shopper’s address, building and unit are resolved on the kurnl marketplace, and the checkout session your page reads already carries them.

Endpoints

Together they are the address funnel: autocomplete turns keystrokes into addresses, check turns one address into a building_id and the plans you can sell there, and units turns that building_id into the premises inside it — the suite a customer picks, which is what provider-initiated provisioning needs when the premise has no live port yet. Auth: X-API-Key: krnl_... on both. Results are automatically scoped to your provider — there is no parameter to query another provider’s coverage, and none is accepted. Rate limits: autocomplete 300 / minute, check 120 / minute, units 300 / minute (per API key).
Serviceability answers are advisory: they come from a coverage index that the kurnl operator refreshes after footprint or plan changes. Checkout and provisioning re-validate every order fail-closed, so a stale index can never place an order at an unserved address — but a very recent footprint change may take until the next index refresh to appear here.

GET /serviceability/autocomplete

Address suggestions for a storefront search box. House-number suffixes may be written fused or separated — 68a and 68 a both match.

Response — 200 OK

At most 15 suggestions, deduplicated by display string:
orderable: true means connected and orderable now; false means the building is in your coverage but still in build-out (pre-order territory).

POST /serviceability/check

Availability verdict for one concrete address.

Request body

Send free text, or structured fields (structured wins when both are present; one of address / street is required, otherwise 422):
German (5-digit PLZ) and Canadian (A1A 1A1) postal formats are recognized.
A provided house number must match exactly, suffix included — 68a and 68 are different premises. An invented house number on a real street returns serviceable: false.

Response — 200 OK

No match returns 200 with serviceable: false, match: null, plans: [].

GET /serviceability/units

The premises inside one building in your coverage — the suite picker for your checkout page.

Response — 200 OK

available is the only occupancy signal, and it is the one to use. A unit is taken when a non-terminal subscription (pending, pending-install or active) references it. Do not infer occupancy from anything else you may have stored about a unit — a suite with an order still in flight looks untouched by every other measure, and offering it again double-books it.
Render unavailable units disabled rather than hiding them: a customer who knows their own suite number is in the building reads a gap in the list as your site being broken.
A building that is not in your coverage returns 404, exactly as an unknown id does. The response never confirms that a building you cannot serve exists.

Errors