List your plans
Auth: X-API-Key
Returns your provider’s active plan versions offered to new customers — active means effective_from <= now and (effective_to is null or >= now), and target_audience is NEW_SUBSCRIBERS or ALL. A version for existing customers only is not listed. Only plans you offer in at least one region or building are listed: a plan with no plan selection anywhere does not appear until you offer it on the Coverage page. Bulk plan versions are listed as before, and sandbox keys are not narrowed. Use this to resolve plan_version_id values.
The response is a wrapped object, not a bare array:
Each plan version carries its prices and setup fee, and embeds:
- its
plans record (name, description, and the plan’s campaign with its discount);
wholesale_products with the speeds (download_speed_mbps, upload_speed_mbps);
- the version’s own campaign;
promo: what a new customer pays (price_monthly, list_price_monthly), its label and campaign_name, the duration_months (null = for as long as the line runs) and the overridden setup_fee; null when the version has no promotion. price_monthly is null for a campaign that only overrides the setup fee, and setup_fee is null unless it is overridden. Read it instead of computing a price from the campaign embeds. The price is billed from activation, for the duration’s full calendar months (the first, partial month too), then the plan’s price;
- add-on and included services;
- badges;
service_providers: branding, public support contacts, checkout config, plan_details, and tenant_configs with
checkout_pathway, external_checkout_url and stripe_connected.
Every plan version carries is_bulk (boolean). A bulk plan version is your copy of a plan at retail_price_monthly: 0 and setup_fee: 0, offered only in buildings that include internet in the rent. Bulk versions are not in this list, because it has no building context. Read them from plans in serviceability for a bulk building. Ordering a bulk plan outside a bulk building, or a paid plan inside one, is refused with 422 bulk_plan.
target_audience says who the version is offered to: ALL (new and existing customers), NEW_SUBSCRIBERS (new customers only; never offered as a plan change) or EXISTING_SUBSCRIBERS (existing customers only; offered when a customer changes plan). A customer with a running line with the provider is existing, otherwise new.
Wholesale prices, discount codes and internal ids are never part of a plan response.
kurnl plans have no minimum term and no cancellation charge.
On a database error the list degrades to {"plan_versions": []} with HTTP 200.
service_providers.tenant_configs.stripe_connected is a boolean: true once that provider
has connected their own Stripe account, false otherwise. A false means the standard
(Kurnl marketplace) checkout is unavailable for that provider — only its external checkout can
be used.
Get a single plan
Auth: Public (no auth required)
Returns the bare plan-version object (no wrapper) with the same embeds — pricing, speed, provider, and included/add-on services. Only a version in effect now answers. An unknown id, a version that has ended or not started yet, and a sandbox provider’s version return 404 "Plan not found".