# POST /api/v1/transactions/batch/invert-amounts

> Batch invert transaction amounts

- **Tag:** transactions
- **Operation ID:** `invert_transactions_amounts_api_v1_transactions_batch_invert_amounts_post`

## Description

Invert the sign of transaction amounts for multiple transactions. Useful for fixing bank accounts with inverted sign conventions. Also updates the source account setting to remember this preference for future syncs.

## Authentication

Bearer token in `Authorization` header.
Required header: `x-business-id: <business uuid>`.

## Request body

Schema: `TransactionBulkInvertAmountRequest`

- `transaction_ids` (array · string · required) — Array of transaction UUIDs to invert.

## Responses

### 201 — Successful Response

Schema: `TransactionListResponse`

- `items` (array · TransactionListItemResponse · required) → `TransactionListItemResponse` — List of items
  - `id` (string · required) — Unique identifier (UUID7).
  - `amount` (integer · required) — Amount in cents. Positive = deposit/income, negative = withdrawal/expense.
  - `currency` (string) — Currency code (USD, CAD, AUD, EUR, or GBP).
  - `datetime` (string · date · required) — The date the transaction occurred.
  - `counterparty` (string) — Clean counterparty/merchant name extracted from bank data.
  - `description` (string) — Transaction memo/description (cleaned).
  - `meta` (object) — Additional metadata (raw Plaid description in raw_plaid_description).
  - `categorization_method` (string) — How categorized: 'manual', 'rule', 'ai', or null if uncategorized.
  - `posted_status` (string) — Bank status: 'pending' or 'posted'.
  - `review_status` (string) — Review status: 'unreviewed', 'reviewed', 'flagged'.
  - `source` (string) — Transaction origin: 'manual', 'plaid', or 'bulk_upload'. Determines if the transaction can be deleted.
  - `opposing_line_entry_ids` (array · string) — Linked line entry UUIDs for categorization.
  - `personal` (boolean) — True if marked as personal (non-business) expense.
  - `journal_entry_id` (string) — Linked journal entry UUID.
  - `teal_id` (string) — External Teal accounting system ID.
  - `teal_ledger_id` (string) — Teal ledger ID.
  - `teal_source_account_id` (string) — Teal source account ID.
  - `ledger_id` (string) — Bank account (ledger) UUID.
  - `ledger_name` (string) — Bank account (ledger) name for display.
  - `ledger_type` (string) — Ledger account type: asset, liability, equity, revenue, or expense.
  - `business_id` (string) — Business UUID.
  - `reconciled` (boolean) — True if reconciled with bank statement.
  - `invoice_ids` (array · string) — Invoice UUIDs linked via payments (from invoice_payments junction table).
  - `bill_ids` (array · string) — Bill UUIDs linked via payments (from bill_payments junction table).
  - `created_at` (string · date-time) — Record creation timestamp.
  - `updated_at` (string · date-time) — Last update timestamp.
  - `comment_count` (integer) — Number of comments on this transaction.
  - `journal_entry` (JournalEntryResponse) — Full journal entry details if categorized.
  - `opposing_line_entries` (array · OpposingLineEntryResponse) — Opposing line entries showing the category/account(s) this transaction was posted to. Empty if uncategorized.
- `total` (integer) — Total number of items (null when not calculated for performance)
- `limit` (integer) — Pagination limit
- `next_cursor` (string) — Cursor for next page
- `prev_cursor` (string) — Cursor for previous page
- `has_next` (boolean · required) — Whether there are more items
- `has_prev` (boolean · required) — Whether there are previous items

### 400 — Bad Request - Invalid input

### 401 — Unauthorized - Authentication required

### 403 — Forbidden - Insufficient permissions

### 404 — Not Found - Resource does not exist

### 422 — Validation Error

Schema: `HTTPValidationError`

- `detail` (array · ValidationError) → `ValidationError`
  - `loc` (array · string | integer · required)
  - `msg` (string · required)
  - `type` (string · required)
  - `input` (object)
  - `ctx` (object)

## Code samples

### cURL

```bash
curl -X POST 'https://api.ondayzero.com/api/v1/transactions/batch/invert-amounts' \
  -H 'Authorization: Bearer dz_your_token' \
  -H 'x-business-id: YOUR_BUSINESS_ID' \
  -H 'Content-Type: application/json' \
  -d '{
  "transaction_ids": []
}'
```

### JavaScript

```javascript
const response = await fetch('https://api.ondayzero.com/api/v1/transactions/batch/invert-amounts', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer dz_your_token',
    'x-business-id': 'YOUR_BUSINESS_ID',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  "transaction_ids": []
}),
});
const data = await response.json();
```

### Python

```python
import httpx

headers = {
    "Authorization": "Bearer dz_your_token",
    "x-business-id": "YOUR_BUSINESS_ID",
}

payload = {
  "transaction_ids": []
}

response = httpx.post("https://api.ondayzero.com/api/v1/transactions/batch/invert-amounts", headers=headers, json=payload)
data = response.json()
```

## See also

- HTML version: https://www.ondayzero.com/docs/reference/transactions/invert-transactions-amounts
- OpenAPI slice: https://www.ondayzero.com/docs/reference/transactions/invert-transactions-amounts/openapi.json
- Other endpoints in **transactions**: https://www.ondayzero.com/docs/reference/transactions
