---
title: "Create a firm-managed company"
method: POST
path: "/companies"
tags: ["Partner API"]
---

# Create a firm-managed company

`POST /companies`

## Request

- Base URL: `https://ledgerhq.pro/api/v1`
- URL: `https://ledgerhq.pro/api/v1/companies`
- Auth: one of:
  - HTTP bearer and API key in header `x-organization-id`
  - HTTP bearer and API key in header `x-organization-id`

Creates a client company under the caller's firm workspace. Requires firm owner/admin access (agent API keys and firm-anchored OAuth tokens qualify). By default the company is seeded with the standard chart of accounts and is immediately ready for imports, opening balances, and bank reconciliation setup; pass setupMode 'import' to leave the chart empty for a QuickBooks financials import to provision.

## Request body

- object
  - `name` string, required: Company or individual name
  - `slug` string: Optional URL-safe slug. Derived from the name (with a uniqueness suffix) when omitted; explicit slugs return 409 on conflict.
  - `firmOrganizationId` string, uuid: Firm workspace to create the company under. Defaults to the credential's firm.
  - `setupMode` 'fresh' | 'import': 'fresh' (default) seeds the standard chart of accounts; 'import' leaves the chart empty for a QuickBooks financials import.
  - `owner` object, required
    - `name` string, required
    - `email` string, email, required
    - `mobilePhone` string, required: Equal owner's cell phone; normalized to E.164

## Response `201`

Created company

- object
  - `data` PartnerCompany
    - `id` string, uuid
    - `name` string
    - `slug` string
    - `type` 'company' | 'firm'
    - `firmId` string, uuid, nullable
    - `defaultCurrency` string
    - `country` string, nullable
    - `countryCode` string, nullable
    - `ytdRevenue` integer: Integer cents. Example: 1250 means $12.50.
    - `ytdProfit` integer: Integer cents. Example: 1250 means $12.50.
    - `unpostedFeedCount` integer
    - `unpostedFeedTotal` integer: Integer cents. Example: 1250 means $12.50.
    - `uncodedFeedCount` integer
    - `uncodedFeedTotal` integer: Integer cents. Example: 1250 means $12.50.
    - `disconnectedItemCount` integer: Live Plaid Items for this company that are disconnected or have broken/disconnected health. Demo Items are excluded.
    - `unmappedAccountCount` integer: Import-enabled live Plaid accounts not mapped to a ledger bank account. Demo Items are excluded.
    - `bankFeedAlert` boolean: True when disconnectedItemCount or unmappedAccountCount is greater than zero.
    - `status` 'active'
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `default`: Structured partner API error

---

[API](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api.md) · [All operations](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api/revisions/9a8269f0a586?raw)
