MethodPathSummaryAuth
GET/v1/user-configsList per-user stream defaultsAPI keySession
POST/v1/user-configsCreate a per-user stream defaultAPI keySession
GET/v1/user-configs/effectiveResolve the stream defaults a new forward draft is prefilled withAPI keySession
DELETE/v1/user-configs/{id}Delete a per-user stream defaultAPI keySession

Contract file:api/control-l4-forward.openapi.yaml

Operation details

GET /v1/user-configs

List per-user stream defaults

operationId
listUserConfigs
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • 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

All of:streams.read

Description (from the contract)

type must be stream. Tenant principals see only their own rows; platform principals see all rows in the selected scope.

Parameters

listUserConfigs Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoCaller-stable request identity; invalid or absent values are replaced by middleware.
typequerystringYes—
pagequeryintegerNo—
limitqueryintegerNo—
searchquerystringNo—

Responses

listUserConfigs Responses
StatusDescription
200Stable page ordered oldest first; display_id is the row ordinal.

Fields:items: array<StreamUserConfig> total: integer(int64) page: integer limit: integer

400Stable invalid request or validation error.
401Authentication is missing or invalid.
403The authenticated principal lacks the required permission or owner scope.
500Internal operation failure without publication or activation claims.

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.
  • 500 Outcome unknown: read back by ID or list first, then decide whether to retry with the original Idempotency-Key.

↑ Back to list

POST /v1/user-configs

Create a per-user stream default

operationId
createUserConfig
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • 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

All of:streams.manage

Description (from the contract)

The scope is global, or a forwarding group that must exist in the same scope. New forwards resolve these defaults when the field is omitted.

Parameters

createUserConfig Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoCaller-stable request identity; invalid or absent values are replaced by middleware.
Idempotency-KeyheaderstringYesReuse is accepted only for the exact same actor, operation, and normalized input.

Request body

application/json · Required:Yes

createUserConfig Request body
NameTypeRequiredDescription
target_scope_idstring(uuid)NoRequired for platform principals; tenant principals may omit it or use their current scope.
owner_idstring(uuid)NoRequired for platform principals; tenant principals may omit it or use their current user.
setting_namestring: proxy_protocol / listen_protocol / balance_wayYes—
setting_valuestringYes—
scope_namestring: global / groupYes—
group_idstring(uuid)NoRequired exactly when scope_name is group, and must exist in the same scope.

Responses

createUserConfig Responses
StatusDescription
201Default committed, or an exact idempotent replay returned.

Fields:id: string(uuid) display_id: string scope_id: string(uuid) owner: StreamOwner | null setting_name: string: proxy_protocol / listen_protocol / balance_way setting_value: string scope_name: string: global / group group: StreamGroupReference | null created_at: string(date-time)

400Stable invalid request or validation error.
401Authentication is missing or invalid.
403The authenticated principal lacks the required permission or owner scope.
409Revision, idempotency, name, or listener-port conflict.
415Exactly one Content-Type field parsing as application/json is required.
500Internal operation failure without publication or activation claims.

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.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 500 Outcome unknown: read back by ID or list first, then decide whether to retry with the original Idempotency-Key.

↑ Back to list

GET /v1/user-configs/effective

Resolve the stream defaults a new forward draft is prefilled with

operationId
getEffectiveUserConfigs
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • 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

All of:streams.read

Description (from the contract)

type must be stream. The same resolution as creating a forward: the owner's global defaults, overridden by those of the given groups. Tenant principals resolve their own; platform principals must give target_scope_id and owner_id of a tenant member.

Parameters

getEffectiveUserConfigs Parameters
NameInTypeRequiredDescription
X-Request-IDheaderstringNoCaller-stable request identity; invalid or absent values are replaced by middleware.
typequerystringYes—
target_scope_idquerystring(uuid)No—
owner_idquerystring(uuid)No—
group_idqueryarray<string(uuid)>No—

Responses

getEffectiveUserConfigs Responses
StatusDescription
200Effective defaults.

Fields:protocol: string: tcp / udp / null | null: tcp / udp / null proxy_protocol_inbound: boolean | null balance_way: string: rr / ip_hash / null | null: rr / ip_hash / null

400Stable invalid request or validation error.
401Authentication is missing or invalid.
403The authenticated principal lacks the required permission or owner scope.
500Internal operation failure without publication or activation claims.

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.
  • 500 Outcome unknown: read back by ID or list first, then decide whether to retry with the original Idempotency-Key.

↑ Back to list

DELETE /v1/user-configs/{id}

Delete a per-user stream default

operationId
deleteUserConfig
Auth
  • API key: header Authorization: CdncaKey <key_id>.<secret>. Effective permissions are the key scopes intersected with the owner’s current permissions.
  • 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

All of:streams.manage

Parameters

deleteUserConfig Parameters
NameInTypeRequiredDescription
idpathstring(uuid)YesExact per-user stream default identity.
X-Request-IDheaderstringNoCaller-stable request identity; invalid or absent values are replaced by middleware.
Idempotency-KeyheaderstringYesReuse is accepted only for the exact same actor, operation, and normalized input.

Responses

deleteUserConfig Responses
StatusDescription
204Default deleted.
400Stable invalid request or validation error.
401Authentication is missing or invalid.
403The authenticated principal lacks the required permission or owner scope.
404No visible stream matches the exact immutable stream identity.
409Revision, idempotency, name, or listener-port conflict.
500Internal operation failure without publication or activation claims.

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.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 500 Outcome unknown: read back by ID or list first, then decide whether to retry with the original Idempotency-Key.

↑ Back to list