Deep-copies a budget’s settings and live boxes/expenses into a new owned, unshared budget (unallocatedAmount resets to 0). Does not copy account links, accounts, transactions, or investments — same as Duplicate in the app.
POST
/v1/duplicate_budgetBody
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| idempotencyKey | string | Yes | — | Client-generated key (1–128 chars: letters, digits, . _ : -). Same key + same body replays; different body returns 409. Prefer Idempotency-Key HTTP header when calling the Tools API. |
| budgetId | string | Yes | — | Source budget to duplicate (must be accessible). |
| name | string | No | — | Name for the copy. Defaults to source name + (Copy). |
Response data
| Field | Type | Description |
|---|---|---|
| id | string | New budget id. |
| name | string | Name of the copy. |
| sourceBudgetId | string | Id of the budget that was duplicated. |
| boxes | array | Created boxes with nested expenses (ids/names). |