COUNTCOUNT
Sign Up
Chart of AccountsCreate account

Create account

POST/partners/chart-of-accounts

Creates a new chart-of-accounts entry.

Requires `name` and `subTypeId`. The high-level `type` is derived server-side from `subTypeId` — do not send `type`. For New Zealand workspaces, `taxes` (numeric tax ids) may be required.

HMAC signature + Bearer access token
Try this request

Request body

namestringrequired

Display name for the account.

subTypeIdintegerrequired

Numeric AccountSubType id from an existing account in the target bucket (`subType.id` on list rows).

accountNumberstring

Optional account number or code.

currencystring

ISO 4217 currency. Defaults to the workspace currency.

descriptionstring

Free-text description.

colorstring

Hex color for UI display.

parentAccountIdinteger

Numeric id of the parent account when creating a sub-account.

institutionIdinteger

Institution id for connected feed accounts.

taxesarray

Array of numeric tax ids (required for NZ workspaces).

statusenum

Account status. Defaults to active.

One of: active, inactive

Responses

201Account created successfully.
400Validation failed — missing name/subTypeId or invalid sub-type.
401Missing or invalid HMAC signature, expired timestamp, or invalid Bearer token. Troubleshoot
403The credential does not have access to this workspace or resource. Troubleshoot
429Rate limit exceeded (100 requests per minute per clientId). Retry after the Retry-After header. Troubleshoot
POSThttps://api.getcount.com/partners/chart-of-accounts
Request
import crypto from 'node:crypto';

const BASE_URL = 'https://api.getcount.com';
const CLIENT_ID = process.env.COUNT_CLIENT_ID;
const CLIENT_SECRET = process.env.COUNT_CLIENT_SECRET;
const ACCESS_TOKEN = process.env.COUNT_ACCESS_TOKEN;

const method = 'POST';
const signingPath = '/chart-of-accounts';
const timestamp = Math.floor(Date.now() / 1000).toString();
const body = {
  "name": "Petty Cash",
  "subTypeId": 1,
  "accountNumber": "1010",
  "currency": "USD",
  "status": "active"
};
const bodyString = JSON.stringify(body);

const bodyHash = crypto.createHash('sha256').update(bodyString).digest('hex');
const baseString = `${method}:${signingPath}:${timestamp}:${bodyHash}`;
const signature = crypto.createHmac('sha256', CLIENT_SECRET).update(baseString).digest('hex');

const response = await fetch(`${BASE_URL}/partners/chart-of-accounts`, {
  method,
  headers: {
    'x-client-id': CLIENT_ID,
    'x-timestamp': timestamp,
    'x-signature': signature,
    'Content-Type': 'application/json',
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
  body: bodyString,
});

console.log(await response.json());
Response · 201
{
  "status": "success",
  "message": "Success on creating account.",
  "data": {
    "account": {
      "id": "c8d9e0f1-a2b3-4567-cdef-789012345678",
      "name": "Operating Bank Account",
      "accountNumber": "1000",
      "type": "Assets",
      "status": "active",
      "currency": "USD",
      "description": "Primary business checking account",
      "color": "#4A90D9",
      "subType": {
        "id": 1,
        "type": "Assets",
        "name": "Bank",
        "anchorTier": null
      },
      "institution": {
        "name": "Chase",
        "logoUrl": null
      },
      "subAccounts": [],
      "createdAt": "2026-01-15T10:30:00.000Z",
      "updatedAt": "2026-01-28T14:22:30.000Z"
    }
  }
}