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| Status | Description |
|---|
200 | Mountable pages. Fields:items: array<PluginUIPage> |
|---|
401 | Authentication failed or the session is invalid. |
|---|
503 | A 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| Status | Description |
|---|
200 | The installation signing key. Fields:installation_id: string(uuid) key_id: string algorithm: any public_key: string signature_domain: any |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
503 | A 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| Name | In | Type | Required | Description |
|---|
plugin_id | path | string | Yes | — |
|---|
Request body
application/json · Required:Yes
proxyPluginUIRequest Request body| Name | Type | Required | Description |
|---|
method | any | Yes | — |
|---|
path | string | Yes | — |
|---|
query | string | No | — |
|---|
body | any | No | JSON body (not with GET) |
|---|
page_id | string | Yes | — |
|---|
site_id | string(uuid) | No | — |
|---|
Responses
proxyPluginUIRequest Responses| Status | Description |
|---|
200 | The plugin backend answer (status and JSON body only). Fields:status: integer body: any |
|---|
400 | The request body or parameters are invalid. |
|---|
401 | Authentication failed or the session is invalid. |
|---|
403 | The authenticated principal is not allowed to perform the action. |
|---|
404 | The requested resource was not found. |
|---|
429 | plugin_ui_rate_limited |
|---|
502 | plugin_ui_backend_unavailable |
|---|
503 | A 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