---
title: "Update organization members"
method: PUT
path: "/v2/organizations/{organization_id}/update_members"
tags: ["members"]
---

# Update organization members

`PUT /v2/organizations/{organization_id}/update_members`

## Request

- Base URL: `https://api.hubstaff.com`
- URL: `https://api.hubstaff.com/v2/organizations/{organization_id}/update_members`
- Auth: OAuth 2
  - Authorization code: `https://account.hubstaff.com/authorizations/new`
  - Token URL: `https://account.hubstaff.com/access_tokens` scopes: `hubstaff:read`, `hubstaff:write`
- TypeScript: <https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/docs/v2/organizations/:organization_id/update_members/put.ts> (a function with typed inputs; its response is checked against the schema)

Updates organization members.

Returns {success: true} on success.

Only pass in the members you want to change.

Available roles:
- user - Member role determined by project membership
- manager - Organization manager
- owner - Organization owner
- remove - Removes user from organization (and all projects/teams)

Limits: Specify full limits config. Missing limits will be removed. Empty "limits" removes all limits.

Projects: Specify project memberships to change. Available project roles: viewer, user, manager, remove.

Metadata: Only specify keys to change. Non-existent keys are created. Use null to remove a key.

Key requirements:
- 2-30 characters
- Lowercase letters, numbers, and underscores only

Value requirements:
- Valid UTF-8 string
- Maximum 200 characters

Batch size: Up to 150 members per request. Larger requests are rejected with HTTP 400 and code "too_many_members".

## Path parameters

- `organization_id` integer, required

## Request body

- PutV2OrganizationsOrganizationIdUpdateMembers: Update organization members
  - `members` object[], required
    - `user_id` integer, required: User ID
    - `role` 'user' | 'manager' | 'owner' | 'remove': Role for the user.
    - `trackable` boolean
    - `view_only` boolean: View-only member flag.
    - `first_name` string
    - `last_name` string
    - `payment` object
      - `rate_type` 'hourly' | 'fixed_amount'
      - `pay_rate` number, float: A pay rate to set for the user, used for 'hourly' or 'fixed_amount' rate_types
      - `pay_period` 'none' | 'weekly' | 'twice_per_month' | 'biweekly' | 'monthly': A pay period to set for the user. Required if timesheet_approval is true
      - `timesheet_approval` boolean: Require timesheet approval for the user
      - `period_week_day` integer: When pay_period is set: day of the week when the pay period starts (0 Monday through 6 Sunday). Required for weekly or biweekly pay periods when the organization uses custom pay period dates.
      - `period_start_day` integer: When pay_period is set: day of the month when the pay period starts. Required for monthly or twice_per_month pay periods when the organization uses custom pay period dates.
      - `period_second_start_day` integer: When pay_period is set: day of the month when the second period starts for twice_per_month (31 = last day of the month). Required for that pay period when the organization uses custom pay period dates.
      - `period_anchor_date` string, date: When pay_period is set: anchor date for biweekly periods when the organization uses custom pay period dates.
    - `limits` object
      - `limits_by_shifts` boolean
      - `daily_limit` number, float: The daily limit, number of hours
      - `weekly_limit` number, float: The weekly limit, number of hours
      - `expected_per_week` number, float: The expected weekly limit, number of hours
      - `current_daily_limit` number, float: Overrides the daily limit for today
      - `current_weekly_limit` number, float: Overrides the weekly limit for this week
      - `dow_limit` string[]: The days when member is allowed to track time
      - `dow_expected` string[]: The days when member is expected to track time
    - `metadata` object[]: Member metadata. See the update_members endpoint for further details
      - `key` string, required: The metadata key
      - `value` string, required: The value for the metadata key
    - `projects` object[]
      - `project_id` integer, required: Project ID
      - `role` 'viewer' | 'user' | 'manager' | 'remove', required: User role in project

## Response `200`

Updated successfully

## Other responses

- `400`: Invalid parameters
- `401`: Unauthorized
- `403`: API access is only for organizations on an active plan
- `404`: Could not find record
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api.md) - [All operations](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/revisions/c6b90e4e4bdc?raw)
