---
title: "Create Budget"
method: POST
path: "/v1/budgets"
tags: ["budgets"]
---

# Create Budget

`POST /v1/budgets`

Create a new budget.

## Request body

- CreateBudgetRequest — Request model for creating a new budget.
  - `budget_duration_sec` integer, nullable — Budget duration in seconds (e.g., 86400 for daily, 604800 for weekly)
  - `max_budget` number, nullable — Maximum spending limit
  - `name` string, nullable — Admin-facing label for the budget
  - `reset_alignment` 'calendar_day' | 'calendar_week' | 'calendar_month', nullable — Reset on a UTC calendar boundary instead of a fixed number of seconds, which is the only way to express a calendar month. Mutually exclusive with budget_duration_sec

## Response `200`

Successful Response

- BudgetResponse — Response model for budget information. ``max_budget`` is the per-user spending limit, and multiple users can share one budget, so the usage rollup is an aggregate over the users assigned to this budget: how many there are and their combined ``spend`` / ``reserved``. Assigning users to a budget is done through the users API (dashboard support lands with user management), so a fresh gateway reports zeros here.
  - `budget_duration_sec` integer, nullable, required
  - `budget_id` string, required
  - `created_at` string, required
  - `max_budget` number, nullable, required
  - `name` string, nullable, required
  - `organization_id` string, uuid, nullable, required
  - `reset_alignment` string, nullable, required
  - `total_reserved` number
  - `total_spend` number
  - `updated_at` string, required
  - `user_count` integer

## Other responses

- `422` — Validation Error

## Changes

- **2026-09-02** `aaeeb1258b20` — 1 info
  - added the required property `organization_id` to the response with the `200` status
- **2026-08-24** `961e73dbaf8b` — 1 warning
  - the `max_budget/anyOf[subschema #1]/` request property's max was set to `999999999999.00`
- **2026-08-21** `e0dee1efa501` — 1 warning, 2 info
  - the `max_budget/anyOf[subschema #1]/` request property's max was set to `999999999999.00`
  - added the new optional request property `reset_alignment`
  - added the required property `reset_alignment` to the response with the `200` status
- **2026-08-21** `2f89238cc674` — 1 breaking, 1 warning
  - removed the required property `reset_alignment` from the response with the `200` status
  - removed the request property `reset_alignment`
- **2026-08-21** `875cef5dd6a8` — 1 warning, 2 info
  - the `max_budget/anyOf[subschema #1]/` request property's max was set to `999999999999.00`
  - added the new optional request property `reset_alignment`
  - added the required property `reset_alignment` to the response with the `200` status

[Full history](https://skmtc.dev/mozilla-ai/apis/otari/changes/v1/budgets/post.md)

---

[API](https://skmtc.dev/mozilla-ai/apis/otari.md) · [All operations](https://skmtc.dev/mozilla-ai/apis/otari/llms.txt) · [OpenAPI document](https://skmtc.dev/mozilla-ai/apis/otari/revisions/be434013dd3d?raw)
