---
title: "Add or update a budget member"
method: PUT
path: "/v3/spend/budgets/{budgetId}/members/{userId}"
tags: ["budgets"]
---

# Add or update a budget member

`PUT /v3/spend/budgets/{budgetId}/members/{userId}`

## Request

- Base URL: `https://gateway.stage.bill.com/connect`
- URL: `https://gateway.stage.bill.com/connect/v3/spend/budgets/{budgetId}/members/{userId}`
- Auth: none declared

Add a new user member to an existing budget. You can also update details about an existing user member assigned to the budget.

## Path parameters

- `budgetId` string, required: BILL-generated ID or UUID of the budget
- `userId` string, required: BILL-generated ID or UUID of the user

## Headers

- `apiToken` string, nullable: Access token for Spend & Expense API authentication

## Request body

- BudgetMemberUpsertRequestDto: Add a budget member
  - `limit` number: Funds assigned to the user in the current budget period. **Note**: This field is required with `shareBudgetFunds` is set as `false`.
  - `recurringLimit` number: Funds assigned to the user in all future budget periods. **Note**: This field is required when `shareBudgetFunds` is set as `false`.
  - `role` 'MEMBER' | 'OWNER' | 'OBSERVER': Budget user role
  - `shareBudgetFunds` boolean: Set as `true` to share all the budget funds with the user. **Note**: You cannot set this field as `true` when either `limit` or `recurringLimit` is set.

## Response `200`

Add or update a budget member response

- BudgetMemberResponseDto: Budget members response.
  - `userId` string: BILL-generated ID of the user
  - `userUuid` string: BILL-generated UUID of the user
  - `spent` number: Total amount spent by the user in the current budget period
  - `limit` number: Funds assigned to the user in the current budget period
  - `recurringLimit` number: Funds assigned to the user in all future budget periods
  - `recurring` boolean: Set as `true` if the user receives the `recurringLimit` funds in all future budget periods.
  - `budgetRole` 'MEMBER' | 'OWNER' | 'OBSERVER': Budget user role
  - `name` string: User display name
  - `retired` boolean: Set as `true` if the budget member is retired
  - `shareBudgetFunds` boolean: Set as `true` if all the budget funds are shared with the user

## Other responses

- `4XX`: List of errors.
- `5XX`: List of errors.

---

[API](https://skmtc.dev/bill/apis/bill-v3-api.md) - [All operations](https://skmtc.dev/bill/apis/bill-v3-api/llms.txt) - [OpenAPI document](https://skmtc.dev/bill/apis/bill-v3-api/revisions/54edddceb0a5?raw)
