Zaroz
Zaroz Cloud Kernel Open API

Get Asset

GET
/api/v2/assets/{id}

Streams an asset by id for the calling customer. Serves everything the public mount serves, plus the owner-only assets belonging to the caller's own organization (support attachments, service configs, server backups). Owner-only responses are marked privately cacheable and short-lived; publicly readable ones carry the same day-long public caching as the public mount.

Get Asset › path Parameters

id
​string · uuid · required · style: simple

Get Asset › Responses

no content

No data returned

Get Public Asset

GET
/api/v2/public/assets/{id}

Streams a publicly readable asset by id: catalog icons, reseller icons and OG images, and avatars. Requires no authentication, and reads no caller identity even if one is presented. An asset whose kind is owner-scoped (support attachments, service configs, server backups) is reported as forbidden here regardless of who asks -- fetch those from the console mount instead. Responses are cacheable for a day; the id is not a content hash, so replacing an icon reuses it.

Get Public Asset › path Parameters

id
​string · uuid · required · style: simple

Get Public Asset › Responses

no content

No data returned

Get Reseller Branding By Hostname

GET
/api/v2/public/resellers/by-host/{hostname}

Resolves a storefront's branding from the hostname it is served on: name, brand colour, logo, Discord invite and OpenGraph image. Unauthenticated, because a storefront has to paint itself before anybody has logged in, and therefore deliberately narrow. A hostname belonging to no live, enabled reseller answers 404.

Get Reseller Branding By Hostname › path Parameters

hostname
​string · required · style: simple

Get Reseller Branding By Hostname › Responses

The storefront's public branding

A reseller as an anonymous visitor's browser sees it, resolved from the hostname it was served on. Branding only: everything a storefront needs to paint itself before anybody has logged in, and nothing else.
brand_color
​string · required
custom_plan_selector_enabled
​boolean · required
hostname
​string · required
id
​string · uuid · required
name
​string · required
og_image_mode
​string · required

One of platform, logo, custom, disabled.

discord_invite_url
​string | null
icon_asset_id
​string | null · uuid
resolved_og_image_asset_id
​string | null · uuid

See [ResellerResponse::resolved_og_image_asset_id].


Get Public Captcha Config By Hostname

GET
/api/v2/public/captcha/config/{hostname}

Resolves the captcha configuration a browser must honour for the host it is on: provider, public site key, and which actions (login, register, password reset and so on) require a solved challenge. Unauthenticated, because it has to answer before anyone has signed in -- that is the whole point of a pre-login captcha. Never returns a secret key; there is no secret field on this response at all. A hostname matching a live, enabled reseller answers that reseller's own configuration; any other hostname, including one belonging to no reseller at all, answers the platform's. Never 404s: an unmatched or malformed hostname resolves to the platform default rather than an error.

Get Public Captcha Config By Hostname › path Parameters

hostname
​string · required · style: simple

Get Public Captcha Config By Hostname › Responses

The captcha configuration this host's visitors must honour

`GET /api/v2/public/captcha/config/{hostname}`, ZC-1192. Unauthenticated, so it carries strictly less than `CaptchaConfigResponse` above: no `secret_key_set` (a bare "yes/no" about a secret's presence has no reason to exist on a route nobody signed in can act on), no `updated_at`, and `site_key` is `None` rather than an empty string when nothing is configured. Built from `CaptchaRequirements` (`crates/domain/system/src/domain/captcha/mod.rs`), which is itself the secret-free projection every scope's config collapses to -- there is no field on this type a caller could not already learn by trying to load the login page and inspecting the widget it renders.
enabled
​boolean · required

Whether any action on this host requires a solved challenge at all. false for a missing config, a disabled one, or one missing a key -- see CaptchaConfig::is_active.

protected_actions
​string[] · required

Stable snake_case action names the widget is required for. Empty when enabled is false.

provider
​string · required

Provider wire value, e.g. turnstile. Always present, even when enabled is false, so a client can wire up the right widget component ahead of a provider ever being turned on.

site_key
​string | null

Safe to render in a browser; this is the half of the key pair that is meant to be public. None exactly when enabled is false.


List Public Incidents

GET
/api/v2/public/incidents

Lists the platform incidents that are happening right now, for the customer-facing outage banner. Deliberately unauthenticated: the moment this read matters most is the one where the caller cannot sign in. Resolved incidents are never returned, and each entry carries only the headline, the optional detail text and when it began.

List Public Incidents › Responses

The ongoing incidents, oldest first. An empty array means all clear.

An ongoing platform incident, as published to anyone with no account at all. Carries only what an outage banner has to render.
title
​string · required

The headline to show.

id
​string · uuid · required

A stable key for deduplicating a poll or remembering a dismissal.

started_at
​string · date-time · required

When the incident began, so the banner can date itself.

message
​string | null

Further detail, if the operator published any.


List Public Maintenance Windows

GET
/api/v2/public/maintenances

Lists the maintenance windows that have not been cancelled and are scheduled no earlier than 24 hours ago, soonest first, for the customer-facing maintenance banner. Deliberately unauthenticated. Each entry carries only the headline, the start and the expected duration.

List Public Maintenance Windows › Responses

The upcoming maintenance windows. An empty array means none is planned.

An upcoming maintenance window, as published to anyone with no account at all. Carries only what a maintenance banner has to render.
title
​string · required

The headline to show.

id
​string · uuid · required

A stable key for deduplicating a poll or remembering a dismissal.

scheduled_at
​string · date-time · required

When the maintenance is scheduled to begin.

expected_duration_minutes
​integer | null · int32

How long it is expected to last, if staff said.


Report Client Error

POST
/api/v2/public/client-errors

Records one client-side crash from a browser, for the platform's own diagnostics. Deliberately unauthenticated: the crashes worth hearing about include the ones that happen before, or instead of, a caller being able to sign in. Answers 204 unconditionally -- a crash reporter that returns an error makes the crash worse -- so a success here means the report was accepted, never that it was stored. message is truncated to 2000 characters and stack to 8000; an over-long report is shortened, never rejected. Rate limited per source address.

Report Client Error › Request Body

One crash, as the browser saw it. Field-for-field identical to `/v1`'s `ReportClientErrorBody`, which is what `dashboard`'s BFF (`app/api/client-errors/route.ts`) already sends: this route is a transport replacement for a deleted one, so a shape change here would have been a second, silent breakage on top of the one it is fixing.
error_id
​string · required

The reporter's own correlation id for this crash, echoed back to the user so a support conversation can name it. Caller-supplied and caller-shaped; see this module's doc comment for why it is not a key.

message
​string · required

The error message. Truncated to 2000 characters on the way in.

digest
​string | null

Next.js's build-time error digest, when the crash came from a server component and the framework withheld the real message from the browser. Absent for a plain client-side throw.

stack
​string | null

The stack trace. Truncated to 8000 characters on the way in.

url
​string | null

The page the crash happened on.

user_agent
​string | null

The browser, as the browser describes itself.

Report Client Error › Responses

Accepted. Returned even if the report failed to persist, and even if it was truncated.

No data returned

Get Deployment Capabilities

GET
/api/v2/public/capabilities

Says which optional capabilities this deployment runs. A partner who hosts their own kernel may leave registry, payment providers, object storage pools, the unit log and metrics stores, Domain Connect, mail and similar unconfigured; a capability answering false is absent here. Its routes refuse with 501 capability-not-available, its products are not in the catalog, and clients must not render its UI. A pool or processor that cannot be read at this moment reports false.

Get Deployment Capabilities › Responses

200

What this deployment runs

What this deployment runs. A partner hosting their own kernel may leave any of these unconfigured; a `false` means the capability is absent here: its routes answer `501 capability-not-available`, its products are not listed, and a client must not offer its UI.
container_registry
​boolean · required

Customer container registries. Registry products are not listed when false.

domain_connect
​boolean · required

Domain Connect one-click DNS setup.

mail
​boolean · required

Transactional email. Without it no mail is ever sent (verification, password reset and notifications included).

mollie
​boolean · required

Mollie card checkout for invoices.

nowpayments
​boolean · required

NOWPayments crypto checkout.

object_storage_buckets
​boolean · required

Customer object-storage buckets. Bucket products are not listed when false.

paypal
​boolean · required

PayPal checkout (wallet top-ups and invoice payment).

unit_log_store
​boolean · required

Stored unit log history. Live tail is unaffected.

unit_metrics_store
​boolean · required

Stored unit metrics history.

warden
​boolean · required

The Warden edge protection listener.

web_push
​boolean · required

Web Push notifications.