Skip to main content

Overview

The Public Members API allows organization administrators to programmatically manage organization membership.
All endpoints require organization-scoped authentication. See Public API Overview for authentication details.

List Members

Retrieve all members of the organization.
GET /public/members

Response

object
string
Always “list”
data
array
required
Array of member objects

Member Object

id
string
required
Member’s unique identifier
userId
string
User account ID (null if invited but not accepted)
email
string
required
Member’s email address
name
string
Member’s display name
type
number
required
Member role (0=Owner, 1=Admin, 2=User, 3=Manager, 4=Custom)
status
number
required
Status (0=Invited, 1=Accepted, 2=Confirmed, -1=Revoked)
twoFactorEnabled
boolean
required
Whether member has 2FA enabled
collections
array
Collections assigned to member

Get Member

Retrieve details of a specific member.
GET /public/members/{id}
id
string
required
Member ID
curl -X GET "https://api.bitwarden.com/public/members/{id}" \
  -H "Authorization: Bearer {org_api_token}"

Get Member Group IDs

Retrieve the groups a member belongs to.
GET /public/members/{id}/group-ids
id
string
required
Member ID

Response

Returns an array of group IDs:
[
  "group-guid-1",
  "group-guid-2"
]

Invite Member

Invite a new user to the organization.
curl -X POST "https://api.bitwarden.com/public/members" \
  -H "Authorization: Bearer {org_api_token}" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "type": 2,
    "accessAll": false,
    "collections": [
      {
        "id": "collection-guid",
        "readOnly": false,
        "hidePasswords": false
      }
    ],
    "groups": ["group-guid"]
  }'

Request Body

email
string
required
Email address to invite
type
number
required
Member role (0=Owner, 1=Admin, 2=User, 3=Manager, 4=Custom)
externalId
string
External identifier for directory sync
accessAll
boolean
default:"false"
Grant access to all collections
collections
array
Collection access assignments
groups
array
Group IDs to add member to

Collection Assignment Object

id
string
required
Collection ID
readOnly
boolean
default:"false"
Read-only access
hidePasswords
boolean
default:"false"
Hide password fields

Update Member

Update member’s role, permissions, or assignments.
PUT /public/members/{id}
id
string
required
Member ID

Request Body

All fields from Create Member - provide complete member object.
curl -X PUT "https://api.bitwarden.com/public/members/{id}" \
  -H "Authorization: Bearer {org_api_token}" \
  -H "Content-Type: application/json" \
  -d '{
    "type": 1,
    "accessAll": true,
    "collections": [],
    "groups": []
  }'
You must provide the complete member object, including all collections and groups. Omitted collections/groups will be removed.

Update Member Groups

Update only the groups a member belongs to.
PUT /public/members/{id}/group-ids
id
string
required
Member ID
groupIds
array
required
Complete array of group IDs
{
  "groupIds": [
    "group-guid-1",
    "group-guid-2"
  ]
}

Remove Member

Permanently remove a member from the organization.
DELETE /public/members/{id}
id
string
required
Member ID to remove
curl -X DELETE "https://api.bitwarden.com/public/members/{id}" \
  -H "Authorization: Bearer {org_api_token}"
This permanently removes the member. They will lose access to all shared items.

Reinvite Member

Resend invitation email to a member.
POST /public/members/{id}/reinvite
id
string
required
Member ID

Revoke Member

Revoke a member’s access (soft delete).
POST /public/members/{id}/revoke
id
string
required
Member ID
Revoked members can be restored later without re-invitation.

Restore Member

Restore a revoked member’s access.
POST /public/members/{id}/restore
id
string
required
Member ID

Member Types

TypeValuePermissions
Owner0Full administrative access
Admin1Administrative access
User2Standard user
Manager3Manage assigned collections
Custom4Custom permission set

Member Status

StatusValueDescription
Invited0Invitation sent, not accepted
Accepted1User accepted, not confirmed
Confirmed2Fully active member
Revoked-1Access suspended

Bulk Operations Example

Invite Multiple Users

const users = [
  { email: '[email protected]', type: 2 },
  { email: '[email protected]', type: 2 },
  { email: '[email protected]', type: 3 }
];

for (const user of users) {
  await fetch('https://api.bitwarden.com/public/members', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${orgToken}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      ...user,
      accessAll: false,
      collections: [],
      groups: [defaultGroupId]
    })
  });
  
  // Respect rate limits
  await new Promise(r => setTimeout(r, 1000));
}

Sync from CSV

import csv
import requests
import time

with open('members.csv') as f:
    reader = csv.DictReader(f)
    
    for row in reader:
        requests.post(
            'https://api.bitwarden.com/public/members',
            headers={'Authorization': f'Bearer {org_token}'},
            json={
                'email': row['email'],
                'type': int(row['type']),
                'accessAll': False,
                'collections': [],
                'externalId': row['employee_id']
            }
        )
        
        # Rate limiting
        time.sleep(1)

Build docs developers (and LLMs) love