The partner API has no sandbox mode. Your API key is a single production credential (krnl_...) and every partner API call — including external-checkout complete and provider-initiated provisioning — acts on your live account and can run a real provisioning job. There is no krnl_sb_ key and no separate sandbox host.

Two different “sandboxes”

  • The in-dashboard sandbox (this is what “sandbox” means in kurnl) — an operator-facing safe mode you enter from the dashboard. It shows mirrored sample data and simulated network/billing, and never touches real subscribers or switch ports. Use it to learn the product and rehearse changes. See the operator guide: Use the dashboard sandbox. It is driven by a dashboard login, not by a partner API key.
  • The partner API — production only (above). Test your integration deliberately, against a test location/unit you control.

Testing your integration safely

Until a partner test environment exists, the pragmatic approach:
  • Point webhook_url at a throwaway receiver (e.g. webhook.site) while wiring up your webhook handler — this exercises the full event flow without needing a finished endpoint.
  • Use a test location/unit you control for end-to-end runs, and clean up the resulting test subscriber afterward from Dashboard → Subscribers.
  • Rely on idempotency: the same email + plan returns the existing job with "Provisioning already in progress", so retries on network errors are safe.

Webhook delivery behaviour

kurnl delivers each event with up to 3 retry attempts (exponential back-off: 2s, then up to 30s). Your endpoint must return any 2xx status to acknowledge; anything else is treated as a failure and retried. Events are signed — verify the X-Webhook-Signature: sha256=<hmac> header (see Webhooks).

Going live on the production domain

If you integrated against the demo host and are moving to the kurnl.ca production domain, swap the host in your endpoint URLs (middleware.bso-projects.commiddleware.kurnl.ca) and use the API key + webhook secret + service_provider_document_id for that environment.
Production location_hash values come from real Marketplace redirects — read location_hash dynamically from the redirect URL rather than hardcoding it.