---
title: "Batch update ACLs"
method: POST
path: "/v1/acl/batch_update"
tags: ["Acls"]
---

# Batch update ACLs

`POST /v1/acl/batch_update`

## Request

- Base URL: `https://api.braintrust.dev`
- URL: `https://api.braintrust.dev/v1/acl/batch_update`
- Auth: one of:
  - HTTP bearer
  - none

Batch update ACLs. This operation is idempotent, so adding ACLs which already exist will have no effect, and removing ACLs which do not exist will have no effect.

## Request body

- AclBatchUpdateRequest
  - `add_acls` AclItem[], nullable
    - `object_type` 'organization' | 'project' | 'experiment' | 'dataset' | 'prompt' | 'prompt_session' | 'group' | 'role' | 'org_member' | 'project_log' | 'org_project' | 'org_audit_logs' | 'project_group' | 'project_group_projects' | 'ai_secret' | 'org_ai_secret' | 'org_account', required: The object type that the ACL applies to
    - `object_id` string, uuid, required: The id of the object the ACL applies to
    - `user_id` string, uuid, nullable: Id of the user the ACL applies to. Exactly one of `user_id` and `group_id` will be provided
    - `group_id` string, uuid, nullable: Id of the group the ACL applies to. Exactly one of `user_id` and `group_id` will be provided
    - `permission` 'create' | 'read' | 'update' | 'delete' | 'create_acls' | 'read_acls' | 'update_acls' | 'delete_acls': Each permission permits a certain type of operation on an object in the system Permissions can be assigned to to objects on an individual basis, or grouped into roles
    - `restrict_object_type` 'organization' | 'project' | 'experiment' | 'dataset' | 'prompt' | 'prompt_session' | 'group' | 'role' | 'org_member' | 'project_log' | 'org_project' | 'org_audit_logs' | 'project_group' | 'project_group_projects' | 'ai_secret' | 'org_ai_secret' | 'org_account': The object type that the ACL applies to
    - `role_id` string, uuid, nullable: Id of the role the ACL grants. Exactly one of `permission` and `role_id` will be provided
  - `remove_acls` AclItem[], nullable
    - `object_type` 'organization' | 'project' | 'experiment' | 'dataset' | 'prompt' | 'prompt_session' | 'group' | 'role' | 'org_member' | 'project_log' | 'org_project' | 'org_audit_logs' | 'project_group' | 'project_group_projects' | 'ai_secret' | 'org_ai_secret' | 'org_account', required: The object type that the ACL applies to
    - `object_id` string, uuid, required: The id of the object the ACL applies to
    - `user_id` string, uuid, nullable: Id of the user the ACL applies to. Exactly one of `user_id` and `group_id` will be provided
    - `group_id` string, uuid, nullable: Id of the group the ACL applies to. Exactly one of `user_id` and `group_id` will be provided
    - `permission` 'create' | 'read' | 'update' | 'delete' | 'create_acls' | 'read_acls' | 'update_acls' | 'delete_acls': Each permission permits a certain type of operation on an object in the system Permissions can be assigned to to objects on an individual basis, or grouped into roles
    - `restrict_object_type` 'organization' | 'project' | 'experiment' | 'dataset' | 'prompt' | 'prompt_session' | 'group' | 'role' | 'org_member' | 'project_log' | 'org_project' | 'org_audit_logs' | 'project_group' | 'project_group_projects' | 'ai_secret' | 'org_ai_secret' | 'org_account': The object type that the ACL applies to
    - `role_id` string, uuid, nullable: Id of the role the ACL grants. Exactly one of `permission` and `role_id` will be provided

## Response `200`

A success status

- AclBatchUpdateResponse
  - `added_acls` Acl[], required
    - `id` string, uuid, required: Unique identifier for the acl
    - `object_type` 'organization' | 'project' | 'experiment' | 'dataset' | 'prompt' | 'prompt_session' | 'group' | 'role' | 'org_member' | 'project_log' | 'org_project' | 'org_audit_logs' | 'project_group' | 'project_group_projects' | 'ai_secret' | 'org_ai_secret' | 'org_account', required: The object type that the ACL applies to
    - `object_id` string, uuid, required: The id of the object the ACL applies to
    - `user_id` string, uuid, nullable: Id of the user the ACL applies to. Exactly one of `user_id` and `group_id` will be provided
    - `group_id` string, uuid, nullable: Id of the group the ACL applies to. Exactly one of `user_id` and `group_id` will be provided
    - `permission` 'create' | 'read' | 'update' | 'delete' | 'create_acls' | 'read_acls' | 'update_acls' | 'delete_acls': Each permission permits a certain type of operation on an object in the system Permissions can be assigned to to objects on an individual basis, or grouped into roles
    - `restrict_object_type` 'organization' | 'project' | 'experiment' | 'dataset' | 'prompt' | 'prompt_session' | 'group' | 'role' | 'org_member' | 'project_log' | 'org_project' | 'org_audit_logs' | 'project_group' | 'project_group_projects' | 'ai_secret' | 'org_ai_secret' | 'org_account': The object type that the ACL applies to
    - `role_id` string, uuid, nullable: Id of the role the ACL grants. Exactly one of `permission` and `role_id` will be provided
    - `_object_org_id` string, uuid, required: The organization the ACL's referred object belongs to
    - `created` string, date-time, nullable: Date of acl creation
  - `removed_acls` Acl[], required
    - `id` string, uuid, required: Unique identifier for the acl
    - `object_type` 'organization' | 'project' | 'experiment' | 'dataset' | 'prompt' | 'prompt_session' | 'group' | 'role' | 'org_member' | 'project_log' | 'org_project' | 'org_audit_logs' | 'project_group' | 'project_group_projects' | 'ai_secret' | 'org_ai_secret' | 'org_account', required: The object type that the ACL applies to
    - `object_id` string, uuid, required: The id of the object the ACL applies to
    - `user_id` string, uuid, nullable: Id of the user the ACL applies to. Exactly one of `user_id` and `group_id` will be provided
    - `group_id` string, uuid, nullable: Id of the group the ACL applies to. Exactly one of `user_id` and `group_id` will be provided
    - `permission` 'create' | 'read' | 'update' | 'delete' | 'create_acls' | 'read_acls' | 'update_acls' | 'delete_acls': Each permission permits a certain type of operation on an object in the system Permissions can be assigned to to objects on an individual basis, or grouped into roles
    - `restrict_object_type` 'organization' | 'project' | 'experiment' | 'dataset' | 'prompt' | 'prompt_session' | 'group' | 'role' | 'org_member' | 'project_log' | 'org_project' | 'org_audit_logs' | 'project_group' | 'project_group_projects' | 'ai_secret' | 'org_ai_secret' | 'org_account': The object type that the ACL applies to
    - `role_id` string, uuid, nullable: Id of the role the ACL grants. Exactly one of `permission` and `role_id` will be provided
    - `_object_org_id` string, uuid, required: The organization the ACL's referred object belongs to
    - `created` string, date-time, nullable: Date of acl creation

## Other responses

- `400`: The request was unacceptable, often due to missing a required parameter
- `401`: No valid API key provided
- `403`: The API key doesn’t have permissions to perform the request
- `429`: Too many requests hit the API too quickly. We recommend an exponential backoff of your requests
- `500`: Something went wrong on Braintrust's end. (These are rare.)

## Changes

- **2026-10-30** `8f5039399f77`: 70 breaking, 58 info
  - the request property `add_acls` became not nullable
  - the request property `add_acls/items/group_id` became not nullable
  - the request property `add_acls/items/permission` became not nullable
  - the request property `add_acls/items/restrict_object_type` became not nullable
  - …124 more
- **2026-10-03** `877ab1fd2a22`: 4 warning, 4 info
  - added the new `project_group_projects` enum value to the `added_acls/items/object_type` response property for the response status `200`
  - added the new `project_group_projects` enum value to the `added_acls/items/restrict_object_type` response property for the response status `200`
  - added the new `project_group_projects` enum value to the `removed_acls/items/object_type` response property for the response status `200`
  - added the new `project_group_projects` enum value to the `removed_acls/items/restrict_object_type` response property for the response status `200`
  - …4 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/braintrustdata/apis/braintrust-api/changes/v1/acl/batch_update/post.md)

---

[API](https://skmtc.dev/braintrustdata/apis/braintrust-api.md) - [All operations](https://skmtc.dev/braintrustdata/apis/braintrust-api/llms.txt) - [OpenAPI document](https://skmtc.dev/braintrustdata/apis/braintrust-api/revisions/19184ec94018?raw)
