MethodPathSummaryAuth
GET/v1/plugin-ui/pagesList the ui_page plugin pages this principal may openSession
GET/v1/plugin-ui/signing-keyThe installation public key plugin backends verify proxied calls withSession
POST/v1/plugin-ui/{plugin_id}/proxyCall a ui_page plugin's own backend on behalf of one of its pagesSession

Contract file:api/openapi/v1/control.yaml

Operation details

GET /v1/plugin-ui/pages

List the ui_page plugin pages this principal may open

operationId
listPluginUIPages
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Any authenticated session. Only plugins enabled on this installation (and still served by the license service) are listed, filtered by the page role (platform scope = admin), its required_permission (no platform.admin fallback) and its required_module (lease). The web app mounts each page in <iframe sandbox="allow-scripts allow-forms"> on the plugin origin.

Responses

listPluginUIPages Responses
StatusDescription
200Mountable pages.

Fields:items: array<PluginUIPage>

401Authentication failed or the session is invalid.
503A required dependency is unavailable.

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/plugin-ui/signing-key

The installation public key plugin backends verify proxied calls with

operationId
getPluginUISigningKey
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Requires plugin_installations.read or plugin_installations.manage (any scope) or platform.admin in the platform scope. Public material only: the administrator hands public_key to a ui_page plugin backend so it can verify X-Cdnca-Plugin-Signature; key_id equals X-Cdnca-Plugin-Key-Id. 503 plugin_ui_proxy_unavailable when this installation has no key configured.

Responses

getPluginUISigningKey Responses
StatusDescription
200The installation signing key.

Fields:installation_id: string(uuid) key_id: string algorithm: any public_key: string signature_domain: any

401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
503A required dependency is unavailable.

What to do on failure

  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/plugin-ui/{plugin_id}/proxy

Call a ui_page plugin's own backend on behalf of one of its pages

operationId
proxyPluginUIRequest
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

The contract has no separate permission annotation; see the description below and the 403 response.

Description (from the contract)

Any authenticated session that may open page_id. The control plane forwards method/path/query/body to the plugin's declared api_base_url (public addresses only, no redirects, JSON only) without the user's session or token; it adds X-Cdnca-Plugin-Context (base64url JSON, schema cdnca.plugin-ui-context/v1, 60 s), X-Cdnca-Plugin-Signature (Ed25519 by the installation key over "cdnca-plugin-ui-proxy/v1\n" + METHOD + "\n" + path?query + "\n" + hex(sha256(body)) + "\n" + context) and X-Cdnca-Plugin-Key-Id. site_id must be a site the caller can access. Writes and refusals are audited as plugin.ui_page.proxy. 120 calls per minute per user and plugin.

Parameters

proxyPluginUIRequest Parameters
NameInTypeRequiredDescription
plugin_idpathstringYes—

Request body

application/json · Required:Yes

proxyPluginUIRequest Request body
NameTypeRequiredDescription
methodanyYes—
pathstringYes—
querystringNo—
bodyanyNoJSON body (not with GET)
page_idstringYes—
site_idstring(uuid)No—

Responses

proxyPluginUIRequest Responses
StatusDescription
200The plugin backend answer (status and JSON body only).

Fields:status: integer body: any

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
404The requested resource was not found.
429plugin_ui_rate_limited
502plugin_ui_backend_unavailable
503A required dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 429 Rate limited: wait, then retry with lower concurrency.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list