---
title: "Turn on QuickBooks invoices and bills for a customer (#2642)"
method: POST
path: "/accountant/companies/{customerId}/integrations/quickbooks/arap-enablement"
tags: ["Accountants"]
---

# Turn on QuickBooks invoices and bills for a customer (#2642)

`POST /accountant/companies/{customerId}/integrations/quickbooks/arap-enablement`

## Request

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

Runs the one-time subledger conversion on this company's Median books and only turns invoices and bills on when it passes: enter dual_read, convert (re-tags business-event journal entries' provenance; lines and amounts never change), validate INV-1..9 against a pre-conversion snapshot, stamp that validation, then set ar_ap_items_enabled. Idempotent and resumable: an enabled company returns `already_enabled`; a converted but unvalidated company resumes at validation. A failed or incomplete check returns 200 with `outcome: validation_failed` and the failing checks, and leaves the company in dual_read with invoices and bills off. Requires a verified QuickBooks connection. Never changes immediate AP journal entries or Stripe invoice sync. Takes no body.

## Response `200`

Result of the attempt (check `outcome`)

- object
  - `success` true, required
  - `data` QuickBooksArApEnablementResult, required
    - `outcome` 'enabled' | 'already_enabled' | 'validation_failed' | 'conversion_refused', required
    - `status` QuickBooksArApEnablementStatus, required
      - `state` 'off' | 'dual_read' | 'single_write' | 'rolled_back', required: The company's subledger conversion state
      - `arApItemsEnabled` boolean, required: True when invoices and bills can post
      - `converted` boolean, required: A conversion run completed in the current cycle
      - `validated` boolean, required: That run passed INV-1..9 and is stamped
      - `quickBooksConnected` boolean, required
      - `canEnable` boolean, required
      - `reason` string, nullable, required: Why canEnable is false
    - `failures` object[], required: Failed or skipped integrity checks (validation_failed) or refusal reasons (conversion_refused, code CONVERSION_REFUSED)
      - `code` string, required
      - `detail` string, required
      - `skipped` boolean, required

## Other responses

- `401`: Authentication required
- `403`: Insufficient permissions or not a company member
- `422`: QuickBooks is not connected (QUICKBOOKS_LEDGER_NOT_CONNECTED), or the conversion state changed concurrently

---

[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)
