---
title: "Approve a draft import batch's exact decisions (#2642)"
method: POST
path: "/accountant/companies/{customerId}/integrations/quickbooks/import-batches/{batchId}/approve"
tags: ["Accountants"]
---

# Approve a draft import batch's exact decisions (#2642)

`POST /accountant/companies/{customerId}/integrations/quickbooks/import-batches/{batchId}/approve`

## Request

- Base URL: `https://api.medianfi.com/api/v1`
- URL: `https://api.medianfi.com/api/v1/accountant/companies/{customerId}/integrations/quickbooks/import-batches/{batchId}/approve`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

`manifestSha256` must equal the hash recomputed from the current item decisions, cutoff and mappings (409 otherwise). Every item marked `post` or `duplicate` is re-validated; an opening balance must be postable. Decisions freeze on approval. The preparer may approve.

## Request body

- QuickBooksManifestInput
  - `manifestSha256` string, required

## Response `200`

The approved batch

- object
  - `success` true, required
  - `data` QuickBooksImportBatch, required
    - `id` string, uuid, required
    - `companyId` string, uuid, required
    - `entityId` string, uuid, required
    - `connectionId` string, uuid, required
    - `realmId` string, required
    - `kind` 'opening_balance' | 'activity', required
    - `cutoffId` string, uuid, required
    - `sourceRunId` string, uuid, nullable, required
    - `trialBalanceSnapshotId` string, uuid, nullable, required
    - `trueUpOfBatchId` string, uuid, nullable, required
    - `dateFrom` string, date, required
    - `dateTo` string, date, required
    - `status` 'draft' | 'approved' | 'posting' | 'posted' | 'failed' | 'cancelled', required
    - `manifestSha256` string, nullable, required
    - `preparedByUserId` string, uuid, required
    - `approvedByUserId` string, uuid, nullable, required
    - `approvedAt` string, date-time, nullable, required
    - `postedByUserId` string, uuid, nullable, required
    - `postedAt` string, date-time, nullable, required
    - `cancelledByUserId` string, uuid, nullable, required
    - `cancelledAt` string, date-time, nullable, required
    - `errorCode` string, nullable, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required

## Other responses

- `401`: Authentication required
- `403`: Insufficient permissions or not a company member
- `404`: Resource not found
- `409`: Manifest mismatch, batch not a draft, cutoff changed, or another opening balance is live
- `422`: Validation error, or items that cannot post as decided (listed in the problem's `invalid`)

---

[API](https://skmtc.dev/medianfi/apis/median-api.md) · [All operations](https://skmtc.dev/medianfi/apis/median-api/llms.txt) · [OpenAPI document](https://skmtc.dev/medianfi/apis/median-api/revisions/20090ea32b0d?raw)
