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 ExpensesLiabilities: Accounts Payable, Credit Cards, Payroll Liabilities, Short-Term Loans, Other Current Liabilities, Long-Term Loans, Other LiabilitiesEquity: EquityIncome: Income, Other IncomeExpenses: COGS, Operating Expenses, Other Expenses, Tax Expenses
Returns the entity's chart of accounts, archived accounts included and flagged with isDisabled. Results are paged with limit/offset.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
1000200
400
401
404
429
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
}
}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.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
Human-facing account code.
Account group to place the new account in. The group must share the account's type.
201
400
401
404
429
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"
}
}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.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
201
400
401
404
429
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"
}
]
}Returns a single account of the entity's chart of accounts.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
200
400
401
404
429
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"
}
}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.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
Account group to move the account into. Pass null to remove the account from its group. The group must share the account's type.
200
400
401
404
429
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"
}
}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.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
200
400
401
404
429
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"
}
}Restores (enables) a previously archived account of the entity's chart of accounts.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
200
400
401
404
429
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"
}
}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.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
Account whose data moves to the target and is then deleted.
Account that survives the merge and absorbs the source.
200
400
401
404
409
429
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"
}
}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.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
200
No content
400
401
404
409
429
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.
Returns the entity's account groups ordered as displayed in the chart of accounts. Results are paged with limit/offset.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
1000200
400
401
404
429
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
}
}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.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
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.
Account type of the group. Only accounts of the same type can be placed inside it.
201
400
401
404
429
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"
}
}Returns a single account group of the entity.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
200
400
401
404
429
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"
}
}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.
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
New parent of the group. Pass null to move the group to the top level. The parent must share the group's type.
200
400
401
404
429
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"
}
}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).
Organization access token issued by Kick, sent as Authorization: Bearer kick_org_....
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.
200
No content
400
401
404
429
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?
