# Add budget owner

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.

Endpoint: POST /v1/businesses/{client_id}/budgets/{budget_id}/owners
Version: v1
Security: BearerAuth

## Path parameters:

  - `client_id` (integer, required)
    The ID of the business.
    Example: 123

  - `budget_id` (string, required)
    The ID of the budget.

## Request fields (application/json):

  - `user` (object)
    An accepted user in this business.

  - `user.id` (integer, required)
    The user's ID.
    Example: 123

  - `invite` (object)
    A pending invite in this business.

  - `invite.id` (string, required)
    The invite's ID.
    Example: "e33b7c61-5124-4ba0-b238-e4c573133715"

## Response 201 fields (application/json):

  - `id` (string)
    The ID of the budget owner.
    Example: "e33b7c61-5124-4ba0-b238-e4c573133715"

  - `user` (object,null)
    The user for the budget owner. Only present once the underlying invite has been accepted.

  - `user.id` (integer)
    The ID of the user.
    Example: 123

  - `user.first_name` (string)
    The first name of the user.
    Example: "John"

  - `user.last_name` (string)
    The last name of the user.
    Example: "Doe"

  - `user.name` (string)
    The full name of the user or the display name if the user has set one.
    Example: "John Doe"

  - `invite` (object)
    The pending invite for the budget owner. Only present while the user has not yet accepted their invite.

  - `invite.id` (integer)
    The ID of the invite.
    Example: 99

  - `invite.email` (string)
    The email address the invite was sent to.
    Example: "jane.doe@example.com"

  - `invite.role_id` (string)
    The ID of the role assigned to the invitee.
    Example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

  - `invite.role` (string)
    The name of the role assigned to the invitee.
    Example: "Team Member"

  - `invite.payment_types` (array)
    The payment types the invitee will have access to.
    Enum: "bills", "cards", "reimbursements"

  - `invite.used` (boolean)
    Whether the invite has been accepted.

  - `invite.created` (string)
    The date and time the invite was created in UTC.
    Example: "2026-05-01T00:00:00Z"

  - `invite.updated` (string)
    The date and time the invite was last updated in UTC.
    Example: "2026-05-01T00:00:00Z"

  - `is_deleted` (boolean)
    Whether the budget owner has been removed from the budget.

  - `created` (string)
    The date and time when the budget owner was created in UTC.
    Example: "2024-01-01T00:00:00Z"

  - `updated` (string)
    The date and time when the budget owner was last updated in UTC.
    Example: "2024-01-01T00:00:00Z"


## Response 400 fields

## Response 401 fields

## Response 403 fields

## Response 404 fields
