Tool Reference

Complete technical reference for the Kick MCP tool surface; endpoints, auth, conventions, inputs, and tool-by-tool detail.

Complete technical reference for the Kick MCP tool surface. Every tool executes through the Kick REST API under the same auth, workspace, permission, and audit checks as the web app.


Auth & Transport

Endpoint:  https://use.kick.co/mcp
Auth:      Authorization: Bearer kick_pat_...
OAuth:     https://use.kick.co/.well-known/oauth-protected-resource
Scopes:    mcp:read · mcp:write

Workspace-scoped PATs auto-inject their bound workspace. User-scoped PATs and OAuth tokens must pass workspaceId in inputs where required.


Conventions

Confirmation flow (write tools)

All write tools are preview-first.

  1. Call the tool without confirmationToken → receive a preview object describing the action and a fresh token

  2. Re-call with the same input plus the returned confirmationToken → mutation executes

// preview response
{ "preview": { "action": "transactions_update", "confirmationToken": "...", "summary": "Update transaction 12345.", "input": { ... } } }

Never invent or reuse a token. Each preview issues a new token bound to the exact input.

List output

fields projects which columns appear in rows. nextCursor is null when there's no more data.

Pagination types

  • Page cursor — 1-based string ("1", "2"...). Used by most list endpoints.

  • Offset cursor — 0-based string ("0", "100"...). Used by accounting, rule transactions, and similar endpoints.

Common ID types

  • workspaceId — UUID v7 string

  • entityId — positive integer (not a UUID)

  • transactionId, financialAccountId, financialDocumentId — positive integer

  • ruleId, groupId, categoryId, counterpartyId, classId, accountId, journalEntryId — UUID v7 string

Tool selection patterns

Goal
Reach for

Resolve a workspace/client name to an ID

workspaces_searchworkspaces_get

Bootstrap orientation for a workspace

workspace_context_get

Resolve a transaction by description/date/amount

transactions_findtransactions_get

Find both sides of a transfer

transactions_suggested_matchestransactions_match_transfer

Find a category/class/counterparty by name

*_search (not *_list)

Audit what changed and possibly undo

activity_listactivity_details_getactivity_revert


Transactions

transactions_find

GET /transactions · read · idempotent

Find transactions in a workspace with pagination, filters, sorting, and projected fields. Use before transaction mutations to resolve numeric transaction IDs and surface date, amount, description, counterparty, and category context.

filters is the same object used by the transaction table — reviewState, status, categoryIds, counterpartyIds, financialAccountIds, search, amountMin, amountMax, and more.

reviewState: REVIEWED · UNREVIEWED · status: pending · completed · failed


transactions_get

GET /transactions/:id · read · idempotent

Get one transaction by numeric ID when full transaction details are needed after transactions_find. Use before sensitive updates or deletes to confirm human-readable date, amount, description, accounts, category, counterparty, and split details.


transactions_statistics

GET /transactions/statistics · read · idempotent

Aggregate counts and totals using the same filter semantics as transactions_find. Use for counts, totals, or review summaries before fetching detailed transaction rows.


transactions_suggested_matches

GET /transactions/:id/suggested-matches · read · idempotent

Suggested transfer-match candidates within the matching date window. Use this before transactions_match_transfer when the user has not identified both sides of a transfer pair. Supports limit/cursor and field projection.


transactions_similar_ids

GET /transactions/:id/similar · read · idempotent

List similar transaction IDs. The underlying similarity API returns IDs only — fields is restricted to ["id"]. Offset cursor; default limit 100, max 500.


transactions_update

PATCH /transactions/:id · write · destructive · confirm

Update bookkeeping fields on one transaction (memo, category, class, counterparty, entity, review state). Requires a numeric transaction id — search transactions first when only a description, amount, or date is known.

Payload fields: memo, categoryId, classId, counterpartyId, entityId, reviewState ("REVIEWED" | "UNREVIEWED").


transactions_bulk_update

POST /transactions/:workspaceId/bulk-update · write · destructive · confirm

Apply bookkeeping updates to multiple Kick transactions in a workspace. Use only after the target transaction IDs and intended changes are clear and human-readable details have been reviewed.


transactions_update_splits

PUT /transactions/:id/splits/v2 · write · destructive · confirm

Replace split lines for one transaction. Use when allocating one transaction across multiple entities, categories, amounts, classes, counterparties, or accounts. Requires a non-empty payload.splits array.


transactions_bulk_unsplit

POST /transactions/:workspaceId/bulk-unsplit · write · destructive · confirm

Restore one or more split transactions back to their unsplit parent state. Only run after reviewing the split lines that will be removed.


transactions_match_transfer

POST /transactions/:originTransactionId/match-transfer · write · destructive · confirm

Match two transactions as a transfer pair. Use transactions_suggested_matches first when the user has not identified both transaction IDs. Show both dates, amounts, descriptions, and accounts before confirmation.


transactions_unmatch_transfer

DELETE /transactions/:financialTransactionId/match-transfer · write · destructive · confirm

Remove an existing transfer match from a transaction.


POST /transactions/link · write · destructive · confirm

Link a financial document to a transaction. Use when both the document ID and transaction ID are known, or after document and transaction lookup.


transactions_detach_document_match

POST /transactions/:financialTransactionId/detach/:matchId · write · destructive · confirm

Detach a financial document match from a transaction.


manual_transactions_create

POST /manual-transaction · write · destructive · confirm

Create one or more manual transactions in Kick. For user-approved bookkeeping entries not imported from a connected financial account.


Transaction deletion lifecycle

Soft delete → cancel (restore) or finalize (hard delete). All four steps are confirmation-gated.

transactions_delete_mark_for_deletion

DELETE /delete-transaction/soft/:transactionId · write · destructive · confirm

Mark a transaction for deletion without finalizing. Reversible.

transactions_delete_bulk_mark_for_deletion

POST /delete-transaction/soft/bulk · write · destructive · confirm

Bulk soft-delete.

transactions_delete_cancel_deletion

POST /delete-transaction/restore/:transactionId · write · destructive · confirm

Restore a soft-deleted transaction.

transactions_delete_finalize_deletion

DELETE /delete-transaction/hard/:transactionId · write · destructive · confirm

Permanently delete a soft-deleted transaction. Irreversible.


Documents

GET /financial-document · read · idempotent

Search financial documents in a workspace by filename and metadata filters. Use to resolve numeric financialDocumentId before attaching documents to transactions or manual journal entries. Does not search OCR text, return file bytes, or expose download URLs directly.


documents_get_metadata

GET /financial-document/:financialDocumentId · read · idempotent

Safe metadata for one financial document by numeric ID. Same numeric ID used in Kick /documents/:id URLs and document-linking tools. Metadata only — no file bytes, storage paths, or download URLs.


documents_request_upload

POST /financial-document/mcp-upload-url · write · non-destructive

Step 1 of upload. Returns a presigned upload URL, a curl command, and an uploadToken. After uploading the file with the returned curl, call documents_confirm_upload.


documents_confirm_upload

POST /financial-document/mcp-confirm-upload · write · idempotent

Step 2 of upload. Triggers extraction and classification.


documents_download

POST /financial-document/mcp-download · read · idempotent

Returns a presigned download URL. URL expires after a few minutes.


Rules

rules_groups_list

GET /rule-groups/:workspaceId · read · idempotent

List rule groups and compact rule summaries. Use to resolve rule and group IDs before rule mutations, and to show rule order, group names, and default status.

Result extends listResult with { counterparties: [{id, name, workspaceId}], normalizedDescriptions, transactionCounts }.


rules_accounting_defaults

GET /rule-groups/:workspaceId/accounting-default-rules · read · idempotent

Get the single accounting-defaults rule group for a workspace. Always returns exactly one group.


rules_normalized_descriptions

GET /rule-groups/:workspaceId/normalized-descriptions · read · idempotent

Normalized transaction descriptions used by rule conditions. Use to find stable description values before creating description-based rules.


rules_matching_transactions

POST /rule-groups/:workspaceId/get-matching-transactions · read · idempotent

Preview transactions matching a rule payload before creating it.


rules_matching_transfers

POST /rule-groups/:workspaceId/get-matching-transfer-transactions · read · idempotent

Preview transfer matches for a transfer rule payload.


rules_applied_transactions

POST /rule-groups/:workspaceId/rule/:ruleId/applied-transactions · read · idempotent

Transactions currently affected by an existing rule.


rules_applied_transfers

POST /rule-groups/:workspaceId/rule/:ruleId/applied-transfer-transactions · read · idempotent

Transfers currently affected by an existing transfer rule. Result includes mode: "allow" | "disallow".


rules_create

POST /rule-groups/:workspaceId/rule · write · non-destructive · confirm

Create a transaction rule in a rule group. Resolve group, category, class, counterparty, or account IDs with the corresponding search/list tools first.

conditionType: counterparty · category · suggested_category · description_is · description_includes · description_does_not_include · amount · date · financial_accounts · subaccounts · entity · date_proximity · class · similar_to · amount_is_round

actionType: category · entity · account_id · account_name · accrual_account_id · accrual_account_name · class · memo · counterparty · split · transfer_matching


rules_update

PATCH /rule-groups/:workspaceId/rule/:ruleId · write · destructive · confirm

Update conditions, actions, group, order, enabled state, or note on an existing rule.


rules_update_note

PATCH /rule-groups/:workspaceId/rule/:ruleId/note · write · non-destructive · confirm

Update only the internal note on a rule. Pass null to clear.


rules_change_order

PATCH /rule-groups/:workspaceId/rule/:ruleId/order · write · destructive · confirm

Move a rule to an absolute execution order. Execution order determines which rule wins.


rules_delete

DELETE /rule-groups/:workspaceId/rule/:ruleId · write · destructive · confirm


rules_groups_create

POST /rule-groups/:workspaceId/group · write · non-destructive · confirm

Create a rule group. Choose an order that does not conflict with existing groups.

type: transaction · accounting · transfer · split


rules_groups_update

PATCH /rule-groups/:workspaceId/group/:groupId · write · destructive · confirm


rules_groups_delete

DELETE /rule-groups/:workspaceId/group/:groupId · write · destructive · confirm


Categories

categories_list

GET /category/:workspaceId · read · idempotent

List categories for catalog browsing. Use categories_search for name-to-id resolution before category mutations.


GET /category/:workspaceId/search · read · idempotent

Search standard plus workspace-custom categories by label, path, parent label, or taxonomy. If multiple plausible rows are returned, ask the user to choose using path, scope, and workspaceId.


categories_list_global

GET /category/global · read · idempotent


categories_statistics

GET /category/:workspaceId/statistics · read · idempotent

Bounded transaction statistics grouped by category. Useful before changing, deleting, or auditing categories.


categories_create

POST /category/:workspaceId · write · non-destructive · confirm


categories_update

PATCH /category/:workspaceId/:categoryId · write · destructive · confirm


categories_delete

DELETE /category/:workspaceId/:categoryId · write · destructive · confirm


Counterparties

counterparties_list

GET /counterparty/:workspaceId · read · idempotent


counterparties_create

POST /counterparty · write · non-destructive · confirm

Search existing counterparties first to avoid duplicates.


counterparties_update

PATCH /counterparty/:workspaceId/:counterpartyId · write · destructive · confirm


counterparties_delete

DELETE /counterparty/:workspaceId/:counterpartyId · write · destructive · confirm


counterparties_merge

POST /counterparty/:workspaceId/merge · write · destructive · confirm

Merge a duplicate into the canonical counterparty to keep.


counterparties_copy_global

POST /counterparty/copy-global-to-local · write · destructive · confirm

Copy a global template into the workspace with optional field overrides.


Classes

Classes require the CLASSES premium feature.

classes_list

GET /class/:workspaceId · read · idempotent


GET /class/:workspaceId/search · read · idempotent


classes_statistics

GET /class/:workspaceId/statistics · read · idempotent


classes_transaction_counts

GET /class/:workspaceId/transactions-count · read · idempotent

Use before deleting or reorganizing classes to check usage.


classes_create

POST /class/:workspaceId · write · non-destructive · confirm


classes_update

PATCH /class/:workspaceId/:id · write · destructive · confirm


classes_delete

DELETE /class/:workspaceId/:id · write · destructive · confirm


Reports

All report tools are read · idempotent.

Common accounting report inputs

Used by P&L, Balance Sheet, Cash Flow, Trial Balance:

Field
Type
Required
Notes

entityId

integer

yes

numeric entity ID, not workspaceId

ledgerId

uuid string

yes

from ledgers_list

startDate

yyyy-MM-dd

yes

endDate

yyyy-MM-dd

yes

cycle

enum

no

week · month · quarter · year · entity · class · subclass

comparison

enum

no

comparison period selector

comparisonDiff

enum

no

difference display mode

comparisons

enum[] (max 2)

no

P&L and Balance Sheet only

comparisonDiffs

enum[] (max 2)

no

ratioTypes

enum[] (max 2)

no

adds ratio columns

classes

string[]

no

class IDs

classFilterType

enum

no

how to apply class filter

counterpartiesIds

uuid[]

no

withEmptyOrUnverifiedCounterparty

boolean

no


reports_profit_loss_get

GET /accounting-reports/profit-loss


reports_balance_sheet_get

GET /accounting-reports/balance-sheet

Common accounting inputs.


reports_cash_flow_statement_get

GET /accounting-reports/cash-flow-statement

Common accounting inputs (single comparison only).


reports_trial_balance_get

GET /accounting-reports/trial-balance

Common accounting inputs + pagination: limit (1–250, default 100), cursor (offset), fields (["key", "label", "values"]), search?.


reports_account_transactions_get

GET /accounting-reports/account-transactions

Journal entry rows for one or more accounts.

Optional filters: classifications (AccountClass[]), sourceTypes (JournalEntrySourceFilter[]), minAmount, maxAmount, pnlBalanceSince, plus class and counterparty filters.


reports_chart_of_accounts_get

GET /accounting-reports/chart-of-accounts/:workspaceId

Optional: ledgerId, availableClassifications (AccountClass[]), pagination fields, search.


reports_expenses_by_vendor_get

GET /accounting-reports/expenses-by-vendor

Common accounting inputs + pagination (limit, cursor, fields, search).


reports_owner_cash_flow_get

GET /owner-reports/cash-flow

Multi-entity owner cash flow.

Optional: accountIds, category, classes, classFilterType.


reports_top_transactions_get

GET /owner-reports/cash-flow/top-transactions


Chart of Accounts

accounts_list

GET /accounting/accounts/:entityId · read · idempotent

List chart-of-accounts rows for one entity.

Optional: accountCodes (integer[] max 100), search, ledgerBasis ("cash" | "accruals", accrual mode only).


accounts_get_for_workspace

GET /accounting/accounts/workspace/:workspaceId · read · idempotent

Flattened account catalog across entities. Default fields include entityId.


accounts_create

POST /accounting/accounts/create/:workspaceId · write · non-destructive · confirm


accounts_update

PATCH /accounting/accounts/:entityId/:id · write · destructive · confirm


accounts_bulk_update

PATCH /accounting/accounts/bulk-update · write · destructive · confirm


accounts_bulk_disable

POST /accounting/accounts/bulk-disable · write · destructive · confirm


accounts_bulk_enable

POST /accounting/accounts/bulk-enable · write · non-destructive · confirm

Same payload shape as accounts_bulk_disable.


accounts_bulk_delete

POST /accounting/accounts/bulk-delete · write · destructive · confirm

Same payload shape as accounts_bulk_disable.


accounts_merge

POST /accounting/accounts/:entityId/merge · write · destructive · confirm

Source is merged into target — balances and transactions move to target.


account_groups_create

POST /accounting/account-groups/:workspaceId · write · non-destructive · confirm

class: Assets · Liabilities · Equity · Income · Expenses


account_groups_update

PATCH /accounting/account-groups/:workspaceId/:id · write · destructive · confirm


account_groups_delete

DELETE /accounting/account-groups/:workspaceId/:id · write · destructive · confirm


Ledger Setup

ledgers_list

GET /accounting/ledgers · read · idempotent

One row per ledger per entity. Ledger APIs don't return entity names — use workspaces_get if you need display names.


ledgers_get_for_entity

GET /accounting/ledgers/:entityId · read · idempotent


ledgers_create_for_entity

PUT /accounting/ledgers/:entityId · write · non-destructive · confirm

Available only when accrual mode is enabled.

basis: cash · accruals


Journal Entries & Manual Journals

journal_entries_get

GET /accounting/journal-entries/:entityId/:id · read · idempotent


manual_journals_list

GET /accounting/journal-entries/manual/:entityId · read · idempotent


manual_journals_create

POST /accounting/journal-entries/manual/:entityId · write · destructive · confirm

Debits must equal credits. Each line uses either debitAmount or creditAmount (the other is null).


manual_journals_bulk_create

POST /accounting/journal-entries/manual/:entityId/bulk · write · destructive · confirm

Atomic 1–25 manual journals.


manual_journals_update

PUT /accounting/journal-entries/manual/:entityId/:journalEntryId · write · destructive · confirm

Full replacement — pass the complete updated entry.


manual_journals_delete

DELETE /accounting/journal-entries/manual/:entityId/:journalEntryId · write · destructive · confirm

For recurring journals, optionally pass payload: { recurringRuleUpdateType: "..." | null }.


Opening Balances

opening_balances_list

GET /accounting/opening-balance/:entityId · read · idempotent


opening_balances_get

GET /accounting/opening-balance/:entityId/:accountId · read · idempotent


opening_balances_upsert

POST /accounting/opening-balance/:entityId/:accountId · write · destructive · confirm


opening_balances_bulk_set

POST /accounting/opening-balance/:entityId/bulk · write · destructive · confirm


opening_balances_remove

DELETE /accounting/opening-balance/:entityId/:accountId · write · destructive · confirm


Entities & Workspace

financial_accounts_list

GET /user/workspaces/:workspaceId/entities · read · idempotent

Connected bank and payment accounts with entity assignments.


GET /entity/search · read · idempotent

Matches entityName and workspaceName. Optionally narrow by workspaceIds or organizationId.


entities_create

POST /entity · write · non-destructive · confirm

Requires UNLIMITED_ENTITIES premium feature.


entities_update

PATCH /entity/:entityId · write · destructive · confirm


entities_get_address

GET /entity/:entityId/address · read · idempotent


entities_update_address

PUT /entity/address · write · destructive · confirm

Replaces the full address.


entities_save_tax_locations

POST /entity/tax-location · write · destructive · confirm

Replaces the saved tax-location set.


workspaces_list

GET /workspaces/list · read · idempotent

Lists workspaces the authenticated credential can access. Organization membership scopes results but does not add unassigned workspaces.


GET /workspaces/list · read · idempotent

Search by workspace name or entity name when the user gives a name instead of a workspaceId. If multiple plausible rows, ask the user to choose using name, id, plan, organizationIds, access.


workspaces_get

GET /workspaces/workspace/:workspaceId · read · idempotent

Full workspace context: entities, members (id, name, email, role), and related metadata. Use before entity, account, report, or transaction operations.


workspace_context_get

GET /workspaces/workspace/:workspaceId/context · read · idempotent

Compact bootstrap context in a single call: access metadata, reportable entities, available ledgers, and account catalog rows with entity names. Use after workspaces_list or workspaces_search before accounting, reporting, or transaction workflows.


Client Onboarding

organization_clients_create

POST /organization-client/:organizationId · write · non-destructive · confirm

Create a new client workspace under an accountant organization.


Tasks

tasks_list

GET /tasks/:workspaceId · read · idempotent


tasks_create

POST /tasks/:workspaceId · write · non-destructive · confirm

Task type is fixed to question.


tasks_update

PATCH /tasks/:workspaceId/:taskId · write · destructive · idempotent · confirm

All payload fields optional — only provided fields are changed.

status: todo · in_progress · blocked · done · cancelled priority: urgent · high · medium · low


Activity & Audit Trail

activity_list

GET /history/:workspaceId/history · read · idempotent

Aggregated activity batches in a workspace. Use to understand recent bookkeeping changes, resolve batch details for activity_details_get, or choose a safe activity_revert target.


activity_logs_list

GET /history/:workspaceId · read · idempotent

Raw audit log rows with actor, resource, change type, and timestamp context. Use when aggregated activity is not enough to explain exactly what changed.


activity_details_get

GET /history/:workspaceId/history/details · read · idempotent

Drill-down rows for one aggregated activity batch. Use after activity_list to show affected resources before considering activity_revert.


activity_revert

POST /history/:workspaceId/history/revert · write · destructive · confirm

Revert a supported activity batch identified from activity_details_get. Not all batches are revertible — check details first.


Typical flows

Recategorize a transaction

  1. transactions_find { search/filters } → resolve id

  2. transactions_get { transactionId } → confirm details

  3. categories_search { search: "Travel" } → resolve categoryId

  4. transactions_update { transactionId, payload: { categoryId } } → preview

  5. transactions_update { ..., confirmationToken } → execute

Match a transfer

  1. transactions_find → resolve origin id

  2. transactions_suggested_matches { transactionId } → find target candidates

  3. transactions_match_transfer { originTransactionId, payload: { targetTransactionId } } → preview

  4. transactions_match_transfer { ..., confirmationToken } → execute

Create a categorization rule

  1. rules_groups_list { workspaceId } → resolve groupId

  2. categories_search → resolve categoryId

  3. rules_matching_transactions with proposed conditions/actions → preview which transactions would match

  4. rules_create { ..., payload } → preview

  5. rules_create { ..., confirmationToken } → execute

Run a P&L

  1. workspace_context_get { workspaceId } → resolve entityId and ledgerId

  2. reports_profit_loss_get { entityId, ledgerId, startDate, endDate, cycle: "month" }

Undo recent bulk change

  1. activity_list { workspaceId, filters } → find the batch

  2. activity_details_get → confirm scope

  3. activity_revert → preview, then execute with token


For a user-facing summary of available capabilities, see → Available Tools.

Last updated

Was this helpful?