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:writeWorkspace-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.
Call the tool without
confirmationToken→ receive apreviewobject describing the action and a fresh tokenRe-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 stringentityId— positive integer (not a UUID)transactionId,financialAccountId,financialDocumentId— positive integerruleId,groupId,categoryId,counterpartyId,classId,accountId,journalEntryId— UUID v7 string
Tool selection patterns
Resolve a workspace/client name to an ID
workspaces_search → workspaces_get
Bootstrap orientation for a workspace
workspace_context_get
Resolve a transaction by description/date/amount
transactions_find → transactions_get
Find both sides of a transfer
transactions_suggested_matches → transactions_match_transfer
Find a category/class/counterparty by name
*_search (not *_list)
Audit what changed and possibly undo
activity_list → activity_details_get → activity_revert
Transactions
transactions_find
transactions_findGET /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
transactions_getGET /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
transactions_statisticsGET /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
transactions_suggested_matchesGET /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
transactions_similar_idsGET /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
transactions_updatePATCH /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
transactions_bulk_updatePOST /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
transactions_update_splitsPUT /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
transactions_bulk_unsplitPOST /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
transactions_match_transferPOST /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
transactions_unmatch_transferDELETE /transactions/:financialTransactionId/match-transfer · write · destructive · confirm
Remove an existing transfer match from a transaction.
transactions_link_document
transactions_link_documentPOST /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
transactions_detach_document_matchPOST /transactions/:financialTransactionId/detach/:matchId · write · destructive · confirm
Detach a financial document match from a transaction.
manual_transactions_create
manual_transactions_createPOST /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
transactions_delete_mark_for_deletionDELETE /delete-transaction/soft/:transactionId · write · destructive · confirm
Mark a transaction for deletion without finalizing. Reversible.
transactions_delete_bulk_mark_for_deletion
transactions_delete_bulk_mark_for_deletionPOST /delete-transaction/soft/bulk · write · destructive · confirm
Bulk soft-delete.
transactions_delete_cancel_deletion
transactions_delete_cancel_deletionPOST /delete-transaction/restore/:transactionId · write · destructive · confirm
Restore a soft-deleted transaction.
transactions_delete_finalize_deletion
transactions_delete_finalize_deletionDELETE /delete-transaction/hard/:transactionId · write · destructive · confirm
Permanently delete a soft-deleted transaction. Irreversible.
Documents
documents_search
documents_searchGET /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
documents_get_metadataGET /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
documents_request_uploadPOST /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
documents_confirm_uploadPOST /financial-document/mcp-confirm-upload · write · idempotent
Step 2 of upload. Triggers extraction and classification.
documents_download
documents_downloadPOST /financial-document/mcp-download · read · idempotent
Returns a presigned download URL. URL expires after a few minutes.
Rules
rules_groups_list
rules_groups_listGET /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
rules_accounting_defaultsGET /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
rules_normalized_descriptionsGET /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
rules_matching_transactionsPOST /rule-groups/:workspaceId/get-matching-transactions · read · idempotent
Preview transactions matching a rule payload before creating it.
rules_matching_transfers
rules_matching_transfersPOST /rule-groups/:workspaceId/get-matching-transfer-transactions · read · idempotent
Preview transfer matches for a transfer rule payload.
rules_applied_transactions
rules_applied_transactionsPOST /rule-groups/:workspaceId/rule/:ruleId/applied-transactions · read · idempotent
Transactions currently affected by an existing rule.
rules_applied_transfers
rules_applied_transfersPOST /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
rules_createPOST /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
rules_updatePATCH /rule-groups/:workspaceId/rule/:ruleId · write · destructive · confirm
Update conditions, actions, group, order, enabled state, or note on an existing rule.
rules_update_note
rules_update_notePATCH /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
rules_change_orderPATCH /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
rules_deleteDELETE /rule-groups/:workspaceId/rule/:ruleId · write · destructive · confirm
rules_groups_create
rules_groups_createPOST /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
rules_groups_updatePATCH /rule-groups/:workspaceId/group/:groupId · write · destructive · confirm
rules_groups_delete
rules_groups_deleteDELETE /rule-groups/:workspaceId/group/:groupId · write · destructive · confirm
Categories
categories_list
categories_listGET /category/:workspaceId · read · idempotent
List categories for catalog browsing. Use categories_search for name-to-id resolution before category mutations.
categories_search
categories_searchGET /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
categories_list_globalGET /category/global · read · idempotent
categories_statistics
categories_statisticsGET /category/:workspaceId/statistics · read · idempotent
Bounded transaction statistics grouped by category. Useful before changing, deleting, or auditing categories.
categories_create
categories_createPOST /category/:workspaceId · write · non-destructive · confirm
categories_update
categories_updatePATCH /category/:workspaceId/:categoryId · write · destructive · confirm
categories_delete
categories_deleteDELETE /category/:workspaceId/:categoryId · write · destructive · confirm
Counterparties
counterparties_list
counterparties_listGET /counterparty/:workspaceId · read · idempotent
counterparties_create
counterparties_createPOST /counterparty · write · non-destructive · confirm
Search existing counterparties first to avoid duplicates.
counterparties_update
counterparties_updatePATCH /counterparty/:workspaceId/:counterpartyId · write · destructive · confirm
counterparties_delete
counterparties_deleteDELETE /counterparty/:workspaceId/:counterpartyId · write · destructive · confirm
counterparties_merge
counterparties_mergePOST /counterparty/:workspaceId/merge · write · destructive · confirm
Merge a duplicate into the canonical counterparty to keep.
counterparties_copy_global
counterparties_copy_globalPOST /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
classes_listGET /class/:workspaceId · read · idempotent
classes_search
classes_searchGET /class/:workspaceId/search · read · idempotent
classes_statistics
classes_statisticsGET /class/:workspaceId/statistics · read · idempotent
classes_transaction_counts
classes_transaction_countsGET /class/:workspaceId/transactions-count · read · idempotent
Use before deleting or reorganizing classes to check usage.
classes_create
classes_createPOST /class/:workspaceId · write · non-destructive · confirm
classes_update
classes_updatePATCH /class/:workspaceId/:id · write · destructive · confirm
classes_delete
classes_deleteDELETE /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:
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
reports_profit_loss_getGET /accounting-reports/profit-loss
reports_balance_sheet_get
reports_balance_sheet_getGET /accounting-reports/balance-sheet
Common accounting inputs.
reports_cash_flow_statement_get
reports_cash_flow_statement_getGET /accounting-reports/cash-flow-statement
Common accounting inputs (single comparison only).
reports_trial_balance_get
reports_trial_balance_getGET /accounting-reports/trial-balance
Common accounting inputs + pagination: limit (1–250, default 100), cursor (offset), fields (["key", "label", "values"]), search?.
reports_account_transactions_get
reports_account_transactions_getGET /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
reports_chart_of_accounts_getGET /accounting-reports/chart-of-accounts/:workspaceId
Optional: ledgerId, availableClassifications (AccountClass[]), pagination fields, search.
reports_expenses_by_vendor_get
reports_expenses_by_vendor_getGET /accounting-reports/expenses-by-vendor
Common accounting inputs + pagination (limit, cursor, fields, search).
reports_owner_cash_flow_get
reports_owner_cash_flow_getGET /owner-reports/cash-flow
Multi-entity owner cash flow.
Optional: accountIds, category, classes, classFilterType.
reports_top_transactions_get
reports_top_transactions_getGET /owner-reports/cash-flow/top-transactions
Chart of Accounts
accounts_list
accounts_listGET /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
accounts_get_for_workspaceGET /accounting/accounts/workspace/:workspaceId · read · idempotent
Flattened account catalog across entities. Default fields include entityId.
accounts_create
accounts_createPOST /accounting/accounts/create/:workspaceId · write · non-destructive · confirm
accounts_update
accounts_updatePATCH /accounting/accounts/:entityId/:id · write · destructive · confirm
accounts_bulk_update
accounts_bulk_updatePATCH /accounting/accounts/bulk-update · write · destructive · confirm
accounts_bulk_disable
accounts_bulk_disablePOST /accounting/accounts/bulk-disable · write · destructive · confirm
accounts_bulk_enable
accounts_bulk_enablePOST /accounting/accounts/bulk-enable · write · non-destructive · confirm
Same payload shape as accounts_bulk_disable.
accounts_bulk_delete
accounts_bulk_deletePOST /accounting/accounts/bulk-delete · write · destructive · confirm
Same payload shape as accounts_bulk_disable.
accounts_merge
accounts_mergePOST /accounting/accounts/:entityId/merge · write · destructive · confirm
Source is merged into target — balances and transactions move to target.
account_groups_create
account_groups_createPOST /accounting/account-groups/:workspaceId · write · non-destructive · confirm
class: Assets · Liabilities · Equity · Income · Expenses
account_groups_update
account_groups_updatePATCH /accounting/account-groups/:workspaceId/:id · write · destructive · confirm
account_groups_delete
account_groups_deleteDELETE /accounting/account-groups/:workspaceId/:id · write · destructive · confirm
Ledger Setup
ledgers_list
ledgers_listGET /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
ledgers_get_for_entityGET /accounting/ledgers/:entityId · read · idempotent
ledgers_create_for_entity
ledgers_create_for_entityPUT /accounting/ledgers/:entityId · write · non-destructive · confirm
Available only when accrual mode is enabled.
basis: cash · accruals
Journal Entries & Manual Journals
journal_entries_get
journal_entries_getGET /accounting/journal-entries/:entityId/:id · read · idempotent
manual_journals_list
manual_journals_listGET /accounting/journal-entries/manual/:entityId · read · idempotent
manual_journals_create
manual_journals_createPOST /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
manual_journals_bulk_createPOST /accounting/journal-entries/manual/:entityId/bulk · write · destructive · confirm
Atomic 1–25 manual journals.
manual_journals_update
manual_journals_updatePUT /accounting/journal-entries/manual/:entityId/:journalEntryId · write · destructive · confirm
Full replacement — pass the complete updated entry.
manual_journals_delete
manual_journals_deleteDELETE /accounting/journal-entries/manual/:entityId/:journalEntryId · write · destructive · confirm
For recurring journals, optionally pass payload: { recurringRuleUpdateType: "..." | null }.
Opening Balances
opening_balances_list
opening_balances_listGET /accounting/opening-balance/:entityId · read · idempotent
opening_balances_get
opening_balances_getGET /accounting/opening-balance/:entityId/:accountId · read · idempotent
opening_balances_upsert
opening_balances_upsertPOST /accounting/opening-balance/:entityId/:accountId · write · destructive · confirm
opening_balances_bulk_set
opening_balances_bulk_setPOST /accounting/opening-balance/:entityId/bulk · write · destructive · confirm
opening_balances_remove
opening_balances_removeDELETE /accounting/opening-balance/:entityId/:accountId · write · destructive · confirm
Entities & Workspace
financial_accounts_list
financial_accounts_listGET /user/workspaces/:workspaceId/entities · read · idempotent
Connected bank and payment accounts with entity assignments.
entities_search
entities_searchGET /entity/search · read · idempotent
Matches entityName and workspaceName. Optionally narrow by workspaceIds or organizationId.
entities_create
entities_createPOST /entity · write · non-destructive · confirm
Requires UNLIMITED_ENTITIES premium feature.
entities_update
entities_updatePATCH /entity/:entityId · write · destructive · confirm
entities_get_address
entities_get_addressGET /entity/:entityId/address · read · idempotent
entities_update_address
entities_update_addressPUT /entity/address · write · destructive · confirm
Replaces the full address.
entities_save_tax_locations
entities_save_tax_locationsPOST /entity/tax-location · write · destructive · confirm
Replaces the saved tax-location set.
workspaces_list
workspaces_listGET /workspaces/list · read · idempotent
Lists workspaces the authenticated credential can access. Organization membership scopes results but does not add unassigned workspaces.
workspaces_search
workspaces_searchGET /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
workspaces_getGET /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
workspace_context_getGET /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
organization_clients_createPOST /organization-client/:organizationId · write · non-destructive · confirm
Create a new client workspace under an accountant organization.
Tasks
tasks_list
tasks_listGET /tasks/:workspaceId · read · idempotent
tasks_create
tasks_createPOST /tasks/:workspaceId · write · non-destructive · confirm
Task type is fixed to question.
tasks_update
tasks_updatePATCH /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
activity_listGET /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
activity_logs_listGET /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
activity_details_getGET /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
activity_revertPOST /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
transactions_find{ search/filters } → resolve idtransactions_get{ transactionId } → confirm detailscategories_search{ search: "Travel" } → resolve categoryIdtransactions_update{ transactionId, payload: { categoryId } } → previewtransactions_update{ ..., confirmationToken } → execute
Match a transfer
transactions_find→ resolve origin idtransactions_suggested_matches{ transactionId } → find target candidatestransactions_match_transfer{ originTransactionId, payload: { targetTransactionId } } → previewtransactions_match_transfer{ ..., confirmationToken } → execute
Create a categorization rule
rules_groups_list{ workspaceId } → resolve groupIdcategories_search→ resolve categoryIdrules_matching_transactionswith proposed conditions/actions → preview which transactions would matchrules_create{ ..., payload } → previewrules_create{ ..., confirmationToken } → execute
Run a P&L
workspace_context_get{ workspaceId } → resolve entityId and ledgerIdreports_profit_loss_get{ entityId, ledgerId, startDate, endDate, cycle: "month" }
Undo recent bulk change
activity_list{ workspaceId, filters } → find the batchactivity_details_get→ confirm scopeactivity_revert→ preview, then execute with token
For a user-facing summary of available capabilities, see → Available Tools.
Last updated
Was this helpful?
