Skip to content

Proxy permissions define how the Hoody proxy layer authenticates incoming requests and routes them to container programs. A permissions file is a JSON document containing authentication groups (JWT, password, IP, or token), per-group program access rules, and a default deny/allow policy. Project-level permissions apply to every container in the project; container-level permissions override or extend them. Use these endpoints to read, replace, or surgically update these documents. Write operations require an If-Match: file:v precondition header (read the current file_version via GET first) — the server returns 428 if the header is absent and 412 if the version is stale.

GET /api/v1/projects/{id}/proxy/permissions

Section titled “GET /api/v1/projects/{id}/proxy/permissions”

Retrieve the complete proxy access control configuration for a project, including authentication groups, program permissions, and default policy.

NameInTypeRequiredDescription
idpathstringYesProject ID
const { data } = await client.api.proxyPermissionsProject.get({ id: "507f1f77bcf86cd799439011" });
{
"statusCode": 200,
"message": "Project proxy permissions retrieved successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/projects/{id}/proxy/permissions

Section titled “PATCH /api/v1/projects/{id}/proxy/permissions”

Replace the entire proxy permissions configuration for a project. Requires If-Match: file:v (428 when absent, 412 when stale).

NameInTypeRequiredDescription
idpathstringYesProject ID
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
projectstringYesProject ID (must match path :id)
groupsobjectYesAuthentication groups. Key is group name, value is group config.
permissionsobjectYesPer-group program permissions. Key is group name, value is map of program → access rule.
defaultstringNoDefault access policy when no rules match. One of "allow", "deny". Defaults to "deny".
enable_proxybooleanNoEnable or disable the proxy. Defaults to true.

The groups values may include the following auth-type-specific fields:

  • JWT (type: "jwt"): secret, algorithm ("HS256" | "RS256" | "ES256"), sources (e.g. ["header:Authorization"]), claims (optional required claim values).
  • Password (type: "password"): username, password, salt, algorithm ("sha256").
  • IP (type: "ip"): range (IPv4 CIDR).
  • Token (type: "token"): header + value, or cookie + value, or param + value.

The permissions values are access rules per program name (terminal, files, ui, exec, etc.). See the note above for the access rule grammar.

await client.api.proxyPermissionsProject.replace({
id: "507f1f77bcf86cd799439011",
ifMatch: "file:v3",
data: {
project: "507f1f77bcf86cd799439011",
groups: {
admin: { type: "jwt", algorithm: "HS256", secret: "shhh", sources: ["header:Authorization"] }
},
permissions: {
admin: { terminal: [1, 2], files: true }
},
default: "deny",
enable_proxy: true
}
});
{
"statusCode": 200,
"message": "Project proxy permissions updated successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {
"admin": { "type": "jwt", "algorithm": "HS256" }
},
"permissions": {
"admin": { "terminal": true, "files": true }
},
"default": "deny",
"enable_proxy": true
}
}

PATCH /api/v1/projects/{id}/proxy/permissions/default

Section titled “PATCH /api/v1/projects/{id}/proxy/permissions/default”

Update the default access policy ("allow" or "deny") that applies when a request does not match any authentication group rules.

NameInTypeRequiredDescription
idpathstringYesProject ID
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
defaultstringYesDefault access policy for unmatched requests. One of "allow", "deny".
await client.api.proxyPermissionsProject.updateDefault({
id: "507f1f77bcf86cd799439011",
ifMatch: "file:v3",
data: { default: "deny" }
});
{
"statusCode": 200,
"message": "Default policy updated successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/projects/{id}/proxy/permissions/state

Section titled “PATCH /api/v1/projects/{id}/proxy/permissions/state”

Enable or disable the proxy entirely for a project. When disabled, the proxy layer is bypassed and all access control is removed regardless of configured rules.

NameInTypeRequiredDescription
idpathstringYesProject ID
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
enable_proxybooleanYesEnable or disable the proxy entirely
await client.api.proxyPermissionsProject.updateState({
id: "507f1f77bcf86cd799439011",
ifMatch: "file:v3",
data: { enable_proxy: true }
});
{
"statusCode": 200,
"message": "Proxy state updated successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny",
"enable_proxy": false
}
}

DELETE /api/v1/projects/{id}/proxy/permissions

Section titled “DELETE /api/v1/projects/{id}/proxy/permissions”

Remove all proxy access control configuration from a project, reverting it to open access with a default "allow" policy. This clears all authentication groups and permission rules.

NameInTypeRequiredDescription
idpathstringYesProject ID
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
await client.api.proxyPermissionsProject.delete({
id: "507f1f77bcf86cd799439011",
ifMatch: "file:v3"
});
{
"statusCode": 200,
"message": "Project proxy permissions deleted successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "allow"
}
}

PATCH /api/v1/projects/{id}/proxy/permissions/groups/{groupName}/ip

Section titled “PATCH /api/v1/projects/{id}/proxy/permissions/groups/{groupName}/ip”

Set or replace an IP-based authentication group for a project.

NameInTypeRequiredDescription
idpathstringYesProject ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
rangestringYesIPv4 CIDR range. Format: IP/mask (mask 0-32). Example: "192.168.1.0/24".
await client.api.proxyPermissionsProject.setIpGroup({
id: "507f1f77bcf86cd799439011",
groupName: "office",
ifMatch: "file:v3",
data: { range: "192.168.1.0/24" }
});
{
"statusCode": 200,
"message": "IP authentication group configured successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/projects/{id}/proxy/permissions/groups/{groupName}/jwt

Section titled “PATCH /api/v1/projects/{id}/proxy/permissions/groups/{groupName}/jwt”

Set or replace a JWT-based authentication group for a project.

NameInTypeRequiredDescription
idpathstringYesProject ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
secretstringYesJWT secret key. For HS256: any string. For RS256/ES256: PEM-encoded public key.
algorithmstringYesOne of "HS256", "RS256", "ES256".
sourcesarrayYesToken source locations. Each item matches ^(header|cookie):Name$. Example: ["header:Authorization"].
claimsobjectNoRequired JWT claims that must be present and match exactly. Values must be string, number, or boolean.
await client.api.proxyPermissionsProject.setJwtGroup({
id: "507f1f77bcf86cd799439011",
groupName: "admin",
ifMatch: "file:v3",
data: {
secret: "super-secret-key",
algorithm: "HS256",
sources: ["header:Authorization"],
claims: { role: "admin" }
}
});
{
"statusCode": 200,
"message": "JWT authentication group configured successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/projects/{id}/proxy/permissions/groups/{groupName}/password

Section titled “PATCH /api/v1/projects/{id}/proxy/permissions/groups/{groupName}/password”

Set or replace a password-based authentication group for a project.

NameInTypeRequiredDescription
idpathstringYesProject ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
usernamestringYesUsername for authentication. Must match exactly what the client provides.
passwordstringYesPlaintext (will be hashed) or pre-hashed SHA256(salt+password) in lowercase hex.
saltstringYesSalt for password hashing. Should be unique per user/group.
algorithmstringNoHashing algorithm. Currently only "sha256".
await client.api.proxyPermissionsProject.setPasswordGroup({
id: "507f1f77bcf86cd799439011",
groupName: "users",
ifMatch: "file:v3",
data: {
username: "admin",
password: "s3cret",
salt: "randomsalt123",
algorithm: "sha256"
}
});
{
"statusCode": 200,
"message": "Password authentication group configured successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/projects/{id}/proxy/permissions/groups/{groupName}/token

Section titled “PATCH /api/v1/projects/{id}/proxy/permissions/groups/{groupName}/token”

Set or replace a static-token authentication group for a project. The request body must specify exactly one token location: header+value, cookie+value, or param+value.

NameInTypeRequiredDescription
idpathstringYesProject ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first

The body uses a oneOf schema. Supply exactly one of these shapes:

ShapeFields
Headerheader (string, required), value (string, required)
Cookiecookie (string, required), value (string, required)
Query paramparam (string, required), value (string, required)
await client.api.proxyPermissionsProject.setTokenGroup({
id: "507f1f77bcf86cd799439011",
groupName: "api-clients",
ifMatch: "file:v3",
data: { header: "X-API-Key", value: "tok_live_abc123" }
});
{
"statusCode": 200,
"message": "Token authentication group configured successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

DELETE /api/v1/projects/{id}/proxy/permissions/groups/{groupName}

Section titled “DELETE /api/v1/projects/{id}/proxy/permissions/groups/{groupName}”

Remove an authentication group from a project. This deletes only the group entry; any program permissions that reference the group name are left in place.

NameInTypeRequiredDescription
idpathstringYesProject ID
groupNamepathstringYesGroup name to remove
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
await client.api.proxyPermissionsProject.removeAuthGroup({
id: "507f1f77bcf86cd799439011",
groupName: "office",
ifMatch: "file:v3"
});
{
"statusCode": 200,
"message": "Authentication group removed successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/projects/{id}/proxy/permissions/permissions/{groupName}

Section titled “PATCH /api/v1/projects/{id}/proxy/permissions/permissions/{groupName}”

Set a single program access rule for a project’s authentication group. The access value defines which ports/instances are allowed.

NameInTypeRequiredDescription
idpathstringYesProject ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
programstringYesProgram name to set the access rule for (e.g. http, terminal, ssh, files, exec, services, notifications).
accessboolean | number | array | stringYesAccess rule. See the access-rule grammar at the top of this page.
await client.api.proxyPermissionsProject.setGroup({
id: "507f1f77bcf86cd799439011",
groupName: "admin",
ifMatch: "file:v3",
data: { program: "http", access: true }
});
{
"statusCode": 200,
"message": "Group program permission set successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

DELETE /api/v1/projects/{id}/proxy/permissions/permissions/{groupName}

Section titled “DELETE /api/v1/projects/{id}/proxy/permissions/permissions/{groupName}”

Remove all program permissions for a project’s group in a single call.

NameInTypeRequiredDescription
idpathstringYesProject ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
await client.api.proxyPermissionsProject.removeGroup({
id: "507f1f77bcf86cd799439011",
groupName: "admin",
ifMatch: "file:v3"
});
{
"statusCode": 200,
"message": "All group permissions removed successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

DELETE /api/v1/projects/{id}/proxy/permissions/permissions/{groupName}/{program}

Section titled “DELETE /api/v1/projects/{id}/proxy/permissions/permissions/{groupName}/{program}”

Remove a single program permission from a project’s group.

NameInTypeRequiredDescription
idpathstringYesProject ID
groupNamepathstringYesGroup name
programpathstringYesProgram name (e.g. http, ssh, files)
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
await client.api.proxyPermissionsProject.removeProgram({
id: "507f1f77bcf86cd799439011",
groupName: "admin",
program: "http",
ifMatch: "file:v3"
});
{
"statusCode": 200,
"message": "Program permission removed successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"groups": {},
"permissions": {},
"default": "deny"
}
}

GET /api/v1/containers/{id}/proxy/permissions

Section titled “GET /api/v1/containers/{id}/proxy/permissions”

Retrieve the complete proxy access control configuration for a single container.

NameInTypeRequiredDescription
idpathstringYesContainer ID
const { data } = await client.api.proxyPermissionsContainer.get({ id: "507f1f77bcf86cd799439012" });
{
"statusCode": 200,
"message": "Container proxy permissions retrieved successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/containers/{id}/proxy/permissions

Section titled “PATCH /api/v1/containers/{id}/proxy/permissions”

Replace the container proxy permissions configuration. Requires If-Match: file:v (428 when absent, 412 when stale).

NameInTypeRequiredDescription
idpathstringYesContainer ID
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
projectstringYesProject ID owning this container
containerstringYesContainer ID (must match path :id)
groupsobjectYesAuthentication groups. Key is group name, value is group config.
permissionsobjectYesPer-group program permissions. Key is group name, value is map of program → access rule.
defaultstringNoDefault access policy. One of "allow", "deny". Defaults to "deny".
enable_proxybooleanNoEnable or disable the proxy. Defaults to true.
hooksobjectNoPer-service proxy hooks. Keys are service names; values are first-match-wins arrays of { match, script, timeout? } rules. Max 8 per service, 32 per file total. Reject-listed services: logs, proxy, workspaces.

The groups value structure and permissions value structure are the same as the project-level replace endpoint (see above). The access rule grammar is documented at the top of this page.

await client.api.proxyPermissionsContainer.replace({
id: "507f1f77bcf86cd799439012",
ifMatch: "file:v2",
data: {
project: "507f1f77bcf86cd799439011",
container: "507f1f77bcf86cd799439012",
groups: {
admin: { type: "jwt" }
},
permissions: {
admin: { terminal: [1, 2], files: true }
},
default: "deny"
}
});
{
"statusCode": 200,
"message": "Container proxy permissions updated successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/containers/{id}/proxy/permissions/default

Section titled “PATCH /api/v1/containers/{id}/proxy/permissions/default”

Update the container’s default access policy.

NameInTypeRequiredDescription
idpathstringYesContainer ID
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
defaultstringYesDefault access policy for unmatched requests. One of "allow", "deny".
await client.api.proxyPermissionsContainer.updateDefault({
id: "507f1f77bcf86cd799439012",
ifMatch: "file:v2",
data: { default: "allow" }
});
{
"statusCode": 200,
"message": "Default policy updated successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "allow"
}
}

PATCH /api/v1/containers/{id}/proxy/permissions/state

Section titled “PATCH /api/v1/containers/{id}/proxy/permissions/state”

Enable or disable the proxy for a single container.

NameInTypeRequiredDescription
idpathstringYesContainer ID
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
enable_proxybooleanYesEnable or disable the proxy entirely
await client.api.proxyPermissionsContainer.updateState({
id: "507f1f77bcf86cd799439012",
ifMatch: "file:v2",
data: { enable_proxy: true }
});
{
"statusCode": 200,
"message": "Proxy state updated successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny",
"enable_proxy": true
}
}

DELETE /api/v1/containers/{id}/proxy/permissions

Section titled “DELETE /api/v1/containers/{id}/proxy/permissions”

Delete the container’s proxy permissions document. The container reverts to a default "allow" policy with the proxy enabled.

NameInTypeRequiredDescription
idpathstringYesContainer ID
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
await client.api.proxyPermissionsContainer.delete({
id: "507f1f77bcf86cd799439012",
ifMatch: "file:v2"
});
{
"statusCode": 200,
"message": "Container proxy permissions deleted successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "allow"
}
}

PATCH /api/v1/containers/{id}/proxy/permissions/groups/{groupName}/ip

Section titled “PATCH /api/v1/containers/{id}/proxy/permissions/groups/{groupName}/ip”

Set or replace an IP-based authentication group for a container.

NameInTypeRequiredDescription
idpathstringYesContainer ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
rangestringYesIPv4 CIDR range. Format: IP/mask (mask 0-32). Example: "10.0.0.0/8".
await client.api.proxyPermissionsContainer.setIpGroup({
id: "507f1f77bcf86cd799439012",
groupName: "office",
ifMatch: "file:v2",
data: { range: "10.0.0.0/8" }
});
{
"statusCode": 200,
"message": "IP authentication group configured successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/containers/{id}/proxy/permissions/groups/{groupName}/jwt

Section titled “PATCH /api/v1/containers/{id}/proxy/permissions/groups/{groupName}/jwt”

Set or replace a JWT-based authentication group for a container.

NameInTypeRequiredDescription
idpathstringYesContainer ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
secretstringYesJWT secret key. For HS256: any string. For RS256/ES256: PEM-encoded public key.
algorithmstringYesOne of "HS256", "RS256", "ES256".
sourcesarrayYesToken source locations. Each item matches ^(header|cookie):Name$.
claimsobjectNoRequired JWT claims that must be present and match exactly. Values must be string, number, or boolean.
await client.api.proxyPermissionsContainer.setJwtGroup({
id: "507f1f77bcf86cd799439012",
groupName: "admin",
ifMatch: "file:v2",
data: {
secret: "container-secret",
algorithm: "HS256",
sources: ["cookie:jwt_token"]
}
});
{
"statusCode": 200,
"message": "JWT authentication group configured successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/containers/{id}/proxy/permissions/groups/{groupName}/password

Section titled “PATCH /api/v1/containers/{id}/proxy/permissions/groups/{groupName}/password”

Set or replace a password-based authentication group for a container.

NameInTypeRequiredDescription
idpathstringYesContainer ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
usernamestringYesUsername for authentication.
passwordstringYesPlaintext (will be hashed) or pre-hashed SHA256(salt+password) in lowercase hex.
saltstringYesSalt for password hashing.
algorithmstringNoHashing algorithm. Currently only "sha256".
await client.api.proxyPermissionsContainer.setPasswordGroup({
id: "507f1f77bcf86cd799439012",
groupName: "users",
ifMatch: "file:v2",
data: {
username: "deployer",
password: "p@ssw0rd!",
salt: "container-salt-xyz",
algorithm: "sha256"
}
});
{
"statusCode": 200,
"message": "Password authentication group configured successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/containers/{id}/proxy/permissions/groups/{groupName}/token

Section titled “PATCH /api/v1/containers/{id}/proxy/permissions/groups/{groupName}/token”

Set or replace a static-token authentication group for a container. The request body must specify exactly one token location.

NameInTypeRequiredDescription
idpathstringYesContainer ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first

The body uses a oneOf schema. Supply exactly one of these shapes:

ShapeFields
Headerheader (string, required), value (string, required)
Cookiecookie (string, required), value (string, required)
Query paramparam (string, required), value (string, required)
await client.api.proxyPermissionsContainer.setTokenGroup({
id: "507f1f77bcf86cd799439012",
groupName: "external-api",
ifMatch: "file:v2",
data: { header: "X-Container-Token", value: "tok_container_xyz" }
});
{
"statusCode": 200,
"message": "Token authentication group configured successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}

DELETE /api/v1/containers/{id}/proxy/permissions/groups/{groupName}

Section titled “DELETE /api/v1/containers/{id}/proxy/permissions/groups/{groupName}”

Remove an authentication group from a container.

NameInTypeRequiredDescription
idpathstringYesContainer ID
groupNamepathstringYesGroup name to remove
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
await client.api.proxyPermissionsContainer.removeAuthGroup({
id: "507f1f77bcf86cd799439012",
groupName: "office",
ifMatch: "file:v2"
});
{
"statusCode": 200,
"message": "Authentication group removed successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}

PATCH /api/v1/containers/{id}/proxy/permissions/permissions/{groupName}

Section titled “PATCH /api/v1/containers/{id}/proxy/permissions/permissions/{groupName}”

Set a single program access rule for a container’s authentication group.

NameInTypeRequiredDescription
idpathstringYesContainer ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
FieldTypeRequiredDescription
programstringYesProgram name (e.g. http, terminal, ssh, files, exec, services, notifications).
accessboolean | number | array | stringYesAccess rule. See the access-rule grammar at the top of this page.
await client.api.proxyPermissionsContainer.setGroup({
id: "507f1f77bcf86cd799439012",
groupName: "admin",
ifMatch: "file:v2",
data: { program: "http", access: [80, 443] }
});
{
"statusCode": 200,
"message": "Group program permission set successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}

DELETE /api/v1/containers/{id}/proxy/permissions/permissions/{groupName}

Section titled “DELETE /api/v1/containers/{id}/proxy/permissions/permissions/{groupName}”

Remove all program permissions for a container’s group.

NameInTypeRequiredDescription
idpathstringYesContainer ID
groupNamepathstringYesGroup name
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
await client.api.proxyPermissionsContainer.removeGroup({
id: "507f1f77bcf86cd799439012",
groupName: "admin",
ifMatch: "file:v2"
});
{
"statusCode": 200,
"message": "All group permissions removed successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}

DELETE /api/v1/containers/{id}/proxy/permissions/permissions/{groupName}/{program}

Section titled “DELETE /api/v1/containers/{id}/proxy/permissions/permissions/{groupName}/{program}”

Remove a single program permission from a container’s group.

NameInTypeRequiredDescription
idpathstringYesContainer ID
groupNamepathstringYesGroup name
programpathstringYesProgram name (e.g. http, ssh, files)
if-matchheaderstringNofile:v ETag precondition — read current file_version from GET first
await client.api.proxyPermissionsContainer.removeProgram({
id: "507f1f77bcf86cd799439012",
groupName: "admin",
program: "http",
ifMatch: "file:v2"
});
{
"statusCode": 200,
"message": "Program permission removed successfully",
"data": {
"project": "507f1f77bcf86cd799439011",
"container": "507f1f77bcf86cd799439012",
"groups": {},
"permissions": {},
"default": "deny"
}
}