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
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).
line_type is the building’s line type: first, second, third, or null
when the building is not classified yet.
earliest_service_date is the building’s planned occupancy date while it is
still ahead: a customer’s move-in date cannot be earlier, and checkout refuses
one that is. On a first-line building, a kurnl checkout with a later move-in
date holds the order and starts it on that day. presale: true marks a
build-out building opened for pre-orders; it may now be a
first-line building.
POST /serviceability/check
Availability verdict for one concrete address.Request body
Send free text, or structured fields (structured wins when both are present; one ofaddress / street is required, otherwise 422):
A1A 1A1) postal formats are recognized.
Response — 200 OK
Example of a bulk building (
bulk: true):
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
A suite with several connections is one entry, not one per connection. Its
id and unit_number are those of the suite’s first free connection, by the
same rule an order on the suite is placed by (the first
one when none is free), so the id can be a different connection than the one
listed on an earlier call. Send that id as unit_id — kurnl re-anchors the
order to a free connection itself (see
provider-initiated provisioning).
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.