---
title: "Create Organization Budget"
method: POST
path: "/v1/organizations/me/budgets"
tags: ["organization-budgets"]
---

# Create Organization Budget

`POST /v1/organizations/me/budgets`

Define a budget owned by this organization. Owners and admins only.

## Request body

- OrganizationBudgetCreate — Create one budget owned by the caller's organization.
  - `budget_duration_sec` integer, nullable — Seconds between resets, counted from the last one. Mutually exclusive with reset_alignment
  - `max_budget` number, nullable — Maximum spend in USD over one period; null caps nothing
  - `name` string, nullable — Admin-facing label for the budget
  - `request_limit` integer, nullable — Maximum requests over one period; null caps nothing. Independent of max_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
  - `token_limit` integer, nullable — Maximum tokens over one period; null caps nothing. Independent of max_budget

## Response `201`

Successful Response

- OrganizationBudgetPublic — One of the organization's budgets, and how much of its own config names it. Carries no spend rollup. ``BudgetResponse`` on the deployment surface sums ``users.spend`` over the gateway's ``users`` table, which is deployment-wide and has no tenancy column, so the same figure here would be a cross-tenant read. What an organization's own spend is, is a question for Usage. ``ceiling_count`` is the organization-relevant fact instead: how many of its ceilings this budget currently holds, which is what makes a delete refuse.
  - `budget_duration_sec` integer, nullable, required
  - `budget_id` string, required
  - `ceiling_count` integer, required
  - `created_at` string, required
  - `max_budget` number, nullable, required
  - `name` string, nullable, required
  - `organization_id` string, uuid, required
  - `request_limit` integer, nullable, required
  - `reset_alignment` string, nullable, required
  - `token_limit` integer, nullable, required
  - `updated_at` string, required

## Other responses

- `422` — Validation Error

## Changes

- **2026-09-02** `1be78e895028` — 4 info
  - added the new optional request property `request_limit`
  - added the new optional request property `token_limit`
  - added the required property `request_limit` to the response with the `201` status
  - added the required property `token_limit` to the response with the `201` status
- **2026-08-31** `1a5cf829e593` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/mozilla-ai/apis/otari/changes/v1/organizations/me/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/80c117c36f36?raw)
