---
title: "Remove a project budget"
method: DELETE
path: "/public-api/v1/projects/{project_id}/budget"
tags: ["Projects"]
---

# Remove a project budget

`DELETE /public-api/v1/projects/{project_id}/budget`

## Request

- Base URL: `https://app.hellobonsai.com`
- URL: `https://app.hellobonsai.com/public-api/v1/projects/{project_id}/budget`
- Auth: one of:
  - OAuth 2
    - Authorization code: `https://app.hellobonsai.com/oauth/authorize`
    - Token URL: `https://app.hellobonsai.com/oauth/token`
  - HTTP bearer

Stops tracking a project's budget. The budget and its cycles are
removed, the project reads back with `budget: null`, and the response
hands back the budget's final state, `current_cycle` included, so you
can log what went. Start a new one with
`POST /public-api/v1/projects/{id}/budget`.

Removing a budget needs permission to change the project and see its
budget, but not a plan that includes budgets, so a company that moved to
a plan without them can still remove the ones it has. A project without
a `start_date` returns `422`; set one with
`PATCH /public-api/v1/projects/{id}` first.

A project the token cannot see returns `404`, and so does one with no
budget. A project it can see returns `403` when the token may not change
the project or see its budget.

## Response `200`

The budget was removed. Its final state is in `data`.

- object
  - `data` ProjectBudget, required: A ceiling on what a project may consume — money or hours — and how often it resets.
    - `id` integer, required: Unique identifier for the budget.
    - `amount` string, required: The budget ceiling as a decimal string — an amount in the project currency when `calculation_mode` is `fee`, a number of hours when it is `time`.
    - `over_budget_notification_threshold` string, required: Percentage of the budget that triggers the alert, as a decimal string.
    - `calculation_mode` 'fee' | 'time', required: What the budget is measured in: `fee` for money, `time` for hours.
    - `calculation_base` 'billable_time' | 'non_billable_time' | 'billable_and_non_billable_time' | 'billable_time_and_expenses' | 'expenses', required: What counts against the budget: logged time (`billable_time`, `non_billable_time`, `billable_and_non_billable_time`), billable time plus expenses (`billable_time_and_expenses`), or expenses alone (`expenses`).
    - `expenses_calculation_base` 'billable' | 'non_billable' | 'all', required: Which expenses count, when `calculation_base` includes them: `billable`, `non_billable` or `all`.
    - `reset_frequency` 'never' | 'weekly' | 'monthly' | 'quarterly', required: How often the budget starts over. `never` runs one cycle for the life of the project; the rest open a fresh cycle every `weekly`, `monthly` or `quarterly` period from the project start date.
    - `over_budget_notification` 'enabled' | 'disabled', required: Whether Bonsai alerts the project team when spending passes `over_budget_notification_threshold`.
    - `current_cycle` ProjectBudgetCycle, required: One run of a budget: the window it covers and how much of the budget it has used.
      - `opening_date` string, date, required: First day the cycle counts.
      - `closing_date` string, date, nullable, required: Last day the cycle counts, or `null` when the budget never resets and the project is open-ended.
      - `consumed_amount` string, required: How much of the budget this cycle has used, as a decimal string, in the same unit as the budget `amount`.
      - `consumed_percentage` integer, required: How much of the budget this cycle has used, as a whole percentage. Exceeds 100 once the budget is over.
  - `meta` Meta, required: Metadata returned alongside every single-resource response.
    - `request_id` string, required: Identifier for this request. Quote it when contacting support about a specific call.

## Other responses

- `401`: The access token is missing, expired or invalid.
- `403`: This token can see the project but may not change it or see its budget.
- `404`: No project with that `id` that this token can see, or the project has no budget. Sample projects return `404` too.
- `422`: The project has no `start_date`, which its budget needs; set one with `PATCH /public-api/v1/projects/{id}`, then remove the budget.
- `429`: Rate limit exceeded. Wait at least `Retry-After` seconds before trying again.

---

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