For the complete documentation index, see llms.txt. This page is also available as Markdown.

Chart of Accounts

Read an entity's chart of accounts, create, rename, archive, restore, merge, or delete the accounts in it, and organize them into account groups.

A chart of accounts belongs to a single entity, so every endpoint is nested under the entity uuid. Listing returns archived accounts too, flagged with isDisabled. Every account also carries a groupId pointing at the account group it sits in, null when it is ungrouped.

An account's type, class, and code are fixed once it exists, so the update route only renames. Retiring an account works one of three ways: delete it outright, which is refused with 409 once it carries journal entries, archive it with the disable route, which keeps it available to resolve historical postings, or merge it into another account with the merge route, which moves its activity before deleting it.

Merging moves journal entry lines, transactions, and every other reference from the source account to the target account, then permanently deletes the source. Both accounts must belong to the entity and share a class. A merge blocked by the accounts' state, such as a locked period, an opening balance on both accounts, or a source account linked to a connected financial account, returns 409 with the list of blockers, each carrying a stable code and a human-readable message.

Creation takes a type and never a class, because Kick derives the classification from the type it is given:

  • Assets: Cash, Accounts Receivable, Inventory, Other Current Assets, Investments, Fixed Assets, Intangible Assets, Other Assets, Prepaid Expenses

  • Liabilities: Accounts Payable, Credit Cards, Payroll Liabilities, Short-Term Loans, Other Current Liabilities, Long-Term Loans, Other Liabilities

  • Equity: Equity

  • Income: Income, Other Income

  • Expenses: COGS, Operating Expenses, Other Expenses, Tax Expenses

List chart of accounts

get

Returns the entity's chart of accounts, archived accounts included and flagged with isDisabled. Results are paged with limit/offset.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
Query parameters
limitinteger · min: 1 · max: 100OptionalDefault: 100
offsetinteger · nullableOptionalDefault: 0
Responses
200

200

application/json
get/platform/v1/entities/{entityId}/chart-of-accounts
GET /api/platform/v1/entities/{entityId}/chart-of-accounts HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": [
    {
      "class": "Assets",
      "code": "text",
      "createdAt": "2026-01-01T00:00:00.000Z",
      "financialAccountId": "123e4567-e89b-12d3-a456-426614174000",
      "groupId": "123e4567-e89b-12d3-a456-426614174000",
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "isDisabled": true,
      "name": "text",
      "type": "Cash"
    }
  ],
  "pagination": {
    "limit": 1,
    "offset": 1,
    "total": 1
  }
}

Create an account

post

Creates a custom account in the entity's chart of accounts. A supplied code is honored only for workspaces on a custom chart of accounts; otherwise Kick allocates the next available code. Pass groupId to place the account in an account group of the same type.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Body
codestring · min: 1 · max: 20Optional

Human-facing account code.

groupIdstring · uuidOptional

Account group to place the new account in. The group must share the account's type.

namestring · min: 1 · max: 200Required
typestring · enumRequiredPossible values:
Responses
201

201

application/json
post/platform/v1/entities/{entityId}/chart-of-accounts
POST /api/platform/v1/entities/{entityId}/chart-of-accounts HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 92

{
  "code": "text",
  "groupId": "123e4567-e89b-12d3-a456-426614174000",
  "name": "text",
  "type": "Cash"
}
{
  "account": {
    "class": "Assets",
    "code": "text",
    "createdAt": "2026-01-01T00:00:00.000Z",
    "financialAccountId": "123e4567-e89b-12d3-a456-426614174000",
    "groupId": "123e4567-e89b-12d3-a456-426614174000",
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "isDisabled": true,
    "name": "text",
    "type": "Cash"
  }
}

Create accounts in bulk

post

Creates up to 100 custom accounts in the entity's chart of accounts in a single transaction. The operation is atomic: if any account fails validation, none are created.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Body
Responses
201

201

application/json
post/platform/v1/entities/{entityId}/chart-of-accounts/bulk
POST /api/platform/v1/entities/{entityId}/chart-of-accounts/bulk HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 107

{
  "accounts": [
    {
      "code": "text",
      "groupId": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "type": "Cash"
    }
  ]
}
{
  "data": [
    {
      "class": "Assets",
      "code": "text",
      "createdAt": "2026-01-01T00:00:00.000Z",
      "financialAccountId": "123e4567-e89b-12d3-a456-426614174000",
      "groupId": "123e4567-e89b-12d3-a456-426614174000",
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "isDisabled": true,
      "name": "text",
      "type": "Cash"
    }
  ]
}

Retrieve an account

get

Returns a single account of the entity's chart of accounts.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
accountIdstring · uuidRequired
Responses
200

200

application/json
get/platform/v1/entities/{entityId}/chart-of-accounts/{accountId}
GET /api/platform/v1/entities/{entityId}/chart-of-accounts/{accountId} HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "account": {
    "class": "Assets",
    "code": "text",
    "createdAt": "2026-01-01T00:00:00.000Z",
    "financialAccountId": "123e4567-e89b-12d3-a456-426614174000",
    "groupId": "123e4567-e89b-12d3-a456-426614174000",
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "isDisabled": true,
    "name": "text",
    "type": "Cash"
  }
}

Update an account

patch

Renames an account of the entity's chart of accounts and/or moves it into an account group of the same type (groupId: null removes it from its group). An account's type, class and code are fixed once it exists.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
accountIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Body
groupIdstring · uuid · nullableOptional

Account group to move the account into. Pass null to remove the account from its group. The group must share the account's type.

namestring · min: 1 · max: 200Optional
Responses
200

200

application/json
patch/platform/v1/entities/{entityId}/chart-of-accounts/{accountId}
PATCH /api/platform/v1/entities/{entityId}/chart-of-accounts/{accountId} HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 64

{
  "groupId": "123e4567-e89b-12d3-a456-426614174000",
  "name": "text"
}
{
  "account": {
    "class": "Assets",
    "code": "text",
    "createdAt": "2026-01-01T00:00:00.000Z",
    "financialAccountId": "123e4567-e89b-12d3-a456-426614174000",
    "groupId": "123e4567-e89b-12d3-a456-426614174000",
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "isDisabled": true,
    "name": "text",
    "type": "Cash"
  }
}

Archive an account

post

Archives (disables) an account of the entity's chart of accounts. Archiving is how an account with journal entries is retired, since it cannot be deleted.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
accountIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Responses
200

200

application/json
post/platform/v1/entities/{entityId}/chart-of-accounts/{accountId}/disable
POST /api/platform/v1/entities/{entityId}/chart-of-accounts/{accountId}/disable HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "account": {
    "class": "Assets",
    "code": "text",
    "createdAt": "2026-01-01T00:00:00.000Z",
    "financialAccountId": "123e4567-e89b-12d3-a456-426614174000",
    "groupId": "123e4567-e89b-12d3-a456-426614174000",
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "isDisabled": true,
    "name": "text",
    "type": "Cash"
  }
}

Restore an account

post

Restores (enables) a previously archived account of the entity's chart of accounts.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
accountIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Responses
200

200

application/json
post/platform/v1/entities/{entityId}/chart-of-accounts/{accountId}/enable
POST /api/platform/v1/entities/{entityId}/chart-of-accounts/{accountId}/enable HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "account": {
    "class": "Assets",
    "code": "text",
    "createdAt": "2026-01-01T00:00:00.000Z",
    "financialAccountId": "123e4567-e89b-12d3-a456-426614174000",
    "groupId": "123e4567-e89b-12d3-a456-426614174000",
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "isDisabled": true,
    "name": "text",
    "type": "Cash"
  }
}

Merge two accounts

post

Merges the source account into the target account: journal entry lines, transactions and every other reference move to the target, then the source account is permanently deleted. Both accounts must belong to the entity. A merge blocked by the accounts' state (e.g. different classes, a locked period, or a source account linked to a financial account) returns 409 with the list of blockers.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Body
sourceAccountIdstring · uuidRequired

Account whose data moves to the target and is then deleted.

targetAccountIdstring · uuidRequired

Account that survives the merge and absorbs the source.

Responses
200

200

application/json
post/platform/v1/entities/{entityId}/chart-of-accounts/merge
POST /api/platform/v1/entities/{entityId}/chart-of-accounts/merge HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 115

{
  "sourceAccountId": "123e4567-e89b-12d3-a456-426614174000",
  "targetAccountId": "123e4567-e89b-12d3-a456-426614174000"
}
{
  "account": {
    "class": "Assets",
    "code": "text",
    "createdAt": "2026-01-01T00:00:00.000Z",
    "financialAccountId": "123e4567-e89b-12d3-a456-426614174000",
    "groupId": "123e4567-e89b-12d3-a456-426614174000",
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "isDisabled": true,
    "name": "text",
    "type": "Cash"
  }
}

Delete an account

delete

Permanently deletes an account of the entity's chart of accounts. An account with journal entries cannot be deleted (409); archive it with the disable route instead.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
accountIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Responses
200

200

No content

delete/platform/v1/entities/{entityId}/chart-of-accounts/{accountId}
DELETE /api/platform/v1/entities/{entityId}/chart-of-accounts/{accountId} HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

Account Groups

Account groups organize an entity's chart of accounts into a hierarchy. A group has a fixed account type, and everything attached to it must share that type: its parent group, its child groups, and the accounts inside it. Groups nest through parentGroupId (null means top level) up to five levels deep, and a group's name must be unique among siblings of the same type. Listing returns the groups in the order the chart of accounts displays them, parents before their children.

Because the type is fixed once a group exists, the update route only renames the group or moves it under a different parent (null re-roots it at the top level). A move that would create a cycle or exceed the nesting depth is rejected. Deleting a group never deletes what is inside it: its child groups and member accounts are lifted to the deleted group's parent, or to the top level when the group had none.

Groups do not have their own membership routes. An account is placed into a group through the chart of accounts endpoints above: pass groupId when creating an account, or set it on the update route, where null removes the account from its group. The group must share the account's type.

List account groups

get

Returns the entity's account groups ordered as displayed in the chart of accounts. Results are paged with limit/offset.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
Query parameters
limitinteger · min: 1 · max: 100OptionalDefault: 100
offsetinteger · nullableOptionalDefault: 0
Responses
200

200

application/json
get/platform/v1/entities/{entityId}/account-groups
GET /api/platform/v1/entities/{entityId}/account-groups HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "data": [
    {
      "createdAt": "2026-01-01T00:00:00.000Z",
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "parentGroupId": "123e4567-e89b-12d3-a456-426614174000",
      "type": "Cash"
    }
  ],
  "pagination": {
    "limit": 1,
    "offset": 1,
    "total": 1
  }
}

Create an account group

post

Creates an account group in the entity's chart of accounts. Pass parentGroupId to nest under an existing group of the same account type; names must be unique among siblings of the same type.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Body
namestring · min: 1 · max: 80Required
parentGroupIdstring · uuid · nullableOptional

Parent to nest the new group under. Omit or pass null to create a top-level group. The parent must share the group's type.

typestring · enumRequired

Account type of the group. Only accounts of the same type can be placed inside it.

Possible values:
Responses
201

201

application/json
post/platform/v1/entities/{entityId}/account-groups
POST /api/platform/v1/entities/{entityId}/account-groups HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 84

{
  "name": "text",
  "parentGroupId": "123e4567-e89b-12d3-a456-426614174000",
  "type": "Cash"
}
{
  "group": {
    "createdAt": "2026-01-01T00:00:00.000Z",
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "name": "text",
    "parentGroupId": "123e4567-e89b-12d3-a456-426614174000",
    "type": "Cash"
  }
}

Retrieve an account group

get

Returns a single account group of the entity.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
groupIdstring · uuidRequired
Responses
200

200

application/json
get/platform/v1/entities/{entityId}/account-groups/{groupId}
GET /api/platform/v1/entities/{entityId}/account-groups/{groupId} HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "group": {
    "createdAt": "2026-01-01T00:00:00.000Z",
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "name": "text",
    "parentGroupId": "123e4567-e89b-12d3-a456-426614174000",
    "type": "Cash"
  }
}

Update an account group

patch

Renames the group and/or moves it under a different parent (null re-roots it at the top level). A group's account type is fixed once it exists; moves that would create a cycle or exceed the nesting depth are rejected.

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
groupIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Body
namestring · min: 1 · max: 80Optional
parentGroupIdstring · uuid · nullableOptional

New parent of the group. Pass null to move the group to the top level. The parent must share the group's type.

Responses
200

200

application/json
patch/platform/v1/entities/{entityId}/account-groups/{groupId}
PATCH /api/platform/v1/entities/{entityId}/account-groups/{groupId} HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 70

{
  "name": "text",
  "parentGroupId": "123e4567-e89b-12d3-a456-426614174000"
}
{
  "group": {
    "createdAt": "2026-01-01T00:00:00.000Z",
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "name": "text",
    "parentGroupId": "123e4567-e89b-12d3-a456-426614174000",
    "type": "Cash"
  }
}

Delete an account group

delete

Deletes the account group. Its accounts and child groups are not deleted: they are lifted to the deleted group's parent (or to the top level when the group had none).

Authorizations
AuthorizationstringRequired

Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....

Path parameters
entityIdstring · uuidRequired
groupIdstring · uuidRequired
Header parameters
Idempotency-Keystring · min: 1 · max: 255Optional

A unique key that makes the request idempotent. Retrying with the same key within 24 hours replays the original response (marked with Idempotent-Replayed: true) instead of executing again.

Responses
200

200

No content

delete/platform/v1/entities/{entityId}/account-groups/{groupId}
DELETE /api/platform/v1/entities/{entityId}/account-groups/{groupId} HTTP/1.1
Host: use.kick.co
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

Last updated

Was this helpful?