---
title: "Сохранить новую версию бюджета без создания учётных фактов"
method: POST
path: "/api/v1/finance/project-budgets"
tags: ["Finance reports"]
---

# Сохранить новую версию бюджета без создания учётных фактов

`POST /api/v1/finance/project-budgets`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/finance/project-budgets`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)
  - HTTP bearer

expected_version реализует compare-and-swap: ревизия, которую клиент видел последней, 0 для первого бюджета; expected_revision принимается как синоним, оба имени с разными значениями — 400.

## Headers

- `X-Tenant` string, required

## Request body

- union
  - object
    - `project_id` string, uuid, required
    - `company_id` string, uuid, required
    - `date` string, date, required
    - `currency` string, required
    - `expected_version` integer, required: Ревизия бюджета, которую клиент видел последней; 0 — бюджета ещё нет (compare-and-swap). Каноническое имя поля оптимистичной блокировки; чужая правка отдаётся 409
    - `expected_revision` integer: Синоним expected_version. Оба имени в одном запросе с разными значениями — отказ 400, а не выбор одного из них
    - `note` string
    - `lines` FinanceProjectBudgetLine[], required
      - `item_id` string, uuid, required
      - `amount` string, required: Положительная сумма или ноль; знак определяется статьёй
  - object
    - `project_id` string, uuid, required
    - `company_id` string, uuid, required
    - `date` string, date, required
    - `currency` string, required
    - `expected_version` integer: Ревизия бюджета, которую клиент видел последней; 0 — бюджета ещё нет (compare-and-swap). Каноническое имя поля оптимистичной блокировки; чужая правка отдаётся 409
    - `expected_revision` integer, required: Синоним expected_version. Оба имени в одном запросе с разными значениями — отказ 400, а не выбор одного из них
    - `note` string
    - `lines` FinanceProjectBudgetLine[], required
      - `item_id` string, uuid, required
      - `amount` string, required: Положительная сумма или ноль; знак определяется статьёй

## Response `201`

Новая версия бюджета

- FinanceProjectBudget
  - `id` string, uuid, required
  - `project_id` string, uuid, required
  - `company_id` string, uuid, required
  - `date` string, date, required
  - `currency` string, required
  - `revision` integer, required
  - `note` string, required
  - `lines` FinanceProjectBudgetLine[], required
    - `item_id` string, uuid, required
    - `amount` string, required: Положительная сумма или ноль; знак определяется статьёй
  - `created_at` string, date-time, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `409`: Бюджет уже изменён другим пользователем

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/3c60ded179f2?raw)
