---
title: "Add budget owner"
method: POST
path: "/v1/businesses/{client_id}/budgets/{budget_id}/owners"
tags: ["Budget Owners"]
---

# Add budget owner

`POST /v1/businesses/{client_id}/budgets/{budget_id}/owners`

## Request

- Base URL: `https://public.letsweel.com`
- URL: `https://public.letsweel.com/v1/businesses/{client_id}/budgets/{budget_id}/owners`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/letsweel/apis/weel-openapi/docs/v1/businesses/:client_id/budgets/:budget_id/owners/post.ts> (a function with typed inputs; its response is checked against the schema)

Adds a user (or pending invite) as an owner of the budget. Provide
exactly one of `user` or `invite`. If an invite has already been
accepted, the response will contain `user` rather than `invite`.

If the same user or invite was previously removed from this budget,
the original record is reinstated rather than a new one created — the
returned `id` will match the original owner's `id`.

## Path parameters

- `client_id` integer, required
- `budget_id` string, required

## Request body

- union: Provide exactly one of `user` or `invite`. If the invite has already been accepted by the time the request is processed, the response will contain `user` rather than `invite`.
  - object
    - `user` object, required: An accepted user in this business.
      - `id` integer, required: The user's ID.
    - `invite` object: A pending invite in this business.
      - `id` string, required: The invite's ID.
  - object
    - `user` object: An accepted user in this business.
      - `id` integer, required: The user's ID.
    - `invite` object, required: A pending invite in this business.
      - `id` string, required: The invite's ID.

## Response `201`

Created

- BudgetOwner
  - `id` string: The ID of the budget owner.
  - `user` SubUser, nullable
    - `id` integer: The ID of the user.
    - `first_name` string: The first name of the user.
    - `last_name` string: The last name of the user.
    - `name` string: The full name of the user or the display name if the user has set one.
  - `invite` Invite
    - `id` integer: The ID of the invite.
    - `email` string, email: The email address the invite was sent to.
    - `role_id` string, uuid: The ID of the role assigned to the invitee.
    - `role` string: The name of the role assigned to the invitee.
    - `payment_types` PaymentType[]: The payment types the invitee will have access to.
    - `used` boolean: Whether the invite has been accepted.
    - `created` string, date-time: The date and time the invite was created in UTC.
    - `updated` string, date-time: The date and time the invite was last updated in UTC.
  - `is_deleted` boolean: Whether the budget owner has been removed from the budget.
  - `created` string, date-time: The date and time when the budget owner was created in UTC.
  - `updated` string, date-time: The date and time when the budget owner was last updated in UTC.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found

## Changes

- **2026-09-23** `4c7e73b7c4e9`: 1 warning
  - added the new `external_expenses` enum value to the `invite/payment_types/items/` response property for the response status `201`

[Operation history](https://skmtc.dev/letsweel/apis/weel-openapi/changes/v1/businesses/:client_id/budgets/:budget_id/owners/post.md)

---

[API](https://skmtc.dev/letsweel/apis/weel-openapi.md) - [All operations](https://skmtc.dev/letsweel/apis/weel-openapi/llms.txt) - [OpenAPI document](https://skmtc.dev/letsweel/apis/weel-openapi/revisions/b1e30cdf67f3?raw)
