---
title: "KashFlow Integration"
description: "IRIS KashFlow is British bookkeeping software for small businesses. Agents manage customers and suppliers, create and email invoices, convert quotes, record receipts and bank transactions, and apply credit notes."
url: https://flowrunner.ai/integrations/kashflow
date_modified: 2026-09-04T14:53:04-07:00
---

# KashFlow

[Accounting](https://flowrunner.ai/integrations/category/finance-accounting)

IRIS KashFlow is British bookkeeping software for small businesses. Agents manage customers and suppliers, create and email invoices, convert quotes, record receipts and bank transactions, and apply credit notes.

44 actions · Basic auth · available

[KashFlow website](https://www.kashflow.com/) · [Platform Documentation](https://www.kashflow.com/developers/) · Capability data verified 2026-08-24

1.  A scheduled sync runs against the orders and records that changed since the last pass
2.  List Customers Modified Since catches address book changes without reading the whole register
3.  Get Invoice reads the current invoice in full, including every line
4.  The intended change is diffed against what came back, field by field and line by line
5.  Add Invoice Payment records money that has already settled, which needs no full replacement
6.  Any change that would rewrite fields nobody meant to touch is queued with the diff attached
7.  A person reads the diff and approves before Update Invoice sends the whole object back

## What This Integration Enables

IRIS KashFlow is British bookkeeping software with a long history, and its supported API is SOAP. That single fact shapes everything a sensible automation does here. There is no query language, so filters are separate methods that cannot be combined: invoices by date range, invoices for a customer, unpaid, overdue, and most recent are five different calls. There is no partial update, so Update Customer, Update Supplier, and Update Invoice each take a complete object, and a field you leave out can be cleared while sending lines replaces every line. Customer and supplier listings return everything with no paging at all. FlowRunner handles the XML so nothing in a flow ever sees an envelope, but the semantics stay what they are, and pretending otherwise is how integrations against this product go wrong.

Agents maintain customers and suppliers, raise and email invoices, add and remove individual lines, record payments, convert quotes, book purchase receipts, move money through bank accounts, apply credit notes, and read the account overview, aged debtor, aged creditor, and balance sheet reports. Where an operation is not named here, Call SOAP Method reaches the rest of the service by name. The [human-in-the-loop](https://flowrunner.ai/concepts/human-in-the-loop) gate on this page is built directly on the whole record update, because that is the specific way this API destroys data while reporting success.

### Without FlowRunner

**Sync jobs that quietly overwrite**: A partial update is written as if it were partial, and the fields left out are lost

**Nominal codes chosen by habit**: A line's charge type is set from memory and the sale books to the wrong account without complaint

**Whole registers pulled every run**: Customer and supplier lists are read end to end because there is no obvious alternative

### With FlowRunner

**Read, diff, then write**: Every update starts from the current record, and the change is shown as a difference before it is sent

**Codes read from the chart**: Charge types and pay accounts come from the account list rather than from a hard coded constant

**Incremental where the API allows it**: The modified-since read carries the address book sync, and date filtered reads carry the documents

## Use Case Scenarios

### Storefront sales into UK books, without clobbering the record

Orders from [Shopify](https://flowrunner.ai/integrations/shopify) and card takings from [Square](https://flowrunner.ai/integrations/square) become KashFlow invoices. For a genuinely new order the agent calls Create Invoice with its lines, picking each line's charge type from List Nominal Codes rather than a constant, because that code decides which account the line books to and a wrong one produces a clean invoice posted to the wrong place. For an amendment it never sends a partial object. It reads the invoice with Get Invoice, applies the change locally, and either uses Add Invoice Line and Delete Invoice Line for a line level edit or takes the header only route when the change is a date or a reference. The full replacement is reserved for changes that genuinely restate the document.

### Quotes that convert exactly once

Sales sends quotes and some of them are accepted twice, in the sense that two people tell the finance mailbox about the same acceptance. The vendor evidently knows this, because Is Still Quote exists for no other purpose than to answer whether a quote has already become an invoice. The agent calls it before every conversion. When the answer is yes it calls Convert Quote To Invoice, records the reference in [Slack](https://flowrunner.ai/integrations/slack), and leaves the quote in place rather than deleting it, so the original scope stays readable. When the answer is no it reports the invoice that already exists instead of raising a second one.

### Aged debt in front of the people who can act on it

On a schedule the agent calls Get Report for the aged debtors view and List Invoices with the overdue filter, then reads Get Bank Balance across the accounts from List Bank Accounts. It writes the position into [Google Sheets](https://flowrunner.ai/integrations/google-sheets) and posts the movements into a channel, with each overdue invoice linked to the customer record it belongs to. Because the filters are separate methods that cannot be combined, the agent runs them in sequence and assembles the view locally rather than pretending KashFlow can answer a compound question it has no method for.

## Human-in-Loop Highlight

Update Invoice is the operation on this connector that needs a person, and the reason is that KashFlow does not have a partial update. The call takes the complete invoice. A field the agent did not include can be cleared, and sending a lines collection replaces every line the invoice had, so an update that means to change one price and instead sends one line does not modify the invoice. It reduces the invoice to that line. Nothing errors. The document comes back looking exactly like what was sent, which is the problem. So the agent reads the invoice first with Get Invoice, computes the difference between what exists and what it is about to send, and stops whenever that difference touches anything the workflow did not intend: "Updating invoice 10488 to change the unit price on line two. The object I would send drops lines three and four, which are still on the record, and clears the customer reference. Send as is, or use the header only route?" A person answers. For the routine case, where only a date or a reference changes, the header only path runs unattended, because a gate that fires on every save is a gate people learn to click through.

Agent processes routinely

Detects exception requiring judgment

Clear match Continues automatically

Ambiguous Routes to human via preferred channel

Human decides

Agent resumes with decision

## Agent Capabilities

44 actions

### Customers

8

-   **List Customers** Lists every customer on the account. There is no paging, so a large account returns a large answer.
-   **Get Customer** Reads one customer, found by its identifier, its code, an email address, or a postcode.
-   **Search Customers** Searches customers by free text across their details. The alternative to reading the whole register.
-   **List Customers Modified Since** Lists the customers changed since a date, which is the only sync primitive the address book has.
-   **Create Customer** Creates a customer on the account. Worth setting a code you control, because some methods address a customer by code rather than by identifier.
-   **Update Customer** Updates a customer. KashFlow takes a whole customer object, so read the record first and send it back with your change applied.
-   **Delete Customer** Deletes a customer from the account.
-   **Manage Customer Attribute** Reads or sets the VAT number or currency of a customer, addressed by customer code rather than identifier because KashFlow's own methods work that way.

### Suppliers

5

-   **List Suppliers** Lists every supplier on the account.
-   **Get Supplier** Reads one supplier, by its identifier or its code.
-   **Create Supplier** Creates a supplier on the account.
-   **Update Supplier** Updates a supplier. KashFlow takes a whole supplier object, so read the record first and send it back with your change applied.
-   **Delete Supplier** Deletes a supplier from the account.

### Invoices

11

-   **List Invoices** Lists invoices by date range, by customer, or the unpaid, overdue, or most recent ones. Each of those is its own method, so only one filter applies at a time.
-   **Get Invoice** Reads one invoice with its line items, by its printed number or by its internal identifier. The two are different things and mixing them reads the wrong record.
-   **Create Invoice** Creates an invoice together with its line items.
-   **Update Invoice** Updates an invoice. KashFlow takes the whole invoice including its lines, which is why this operation carries this page's human gate. A header only route exists for changes that do not touch lines.
-   **Delete Invoice** Deletes an invoice from the account.
-   **Add Invoice Line** Adds a line item to an invoice. The safe way to extend a document without restating it.
-   **Delete Invoice Line** Removes a line item from an invoice.
-   **Add Invoice Payment** Records a payment against an invoice. The pay account is a bank account's nominal code.
-   **Email Invoice** Emails an invoice to a recipient. This reaches the customer and cannot be recalled.
-   **Attach File To Invoice** Attaches a file to an invoice.
-   **Apply Credit Note To Invoice** Applies a credit note to an invoice.

### Quotes

5

-   **List Quotes** Lists the quotes, either all of them or those for one customer.
-   **Get Quote** Reads one quote, by its number or its internal identifier.
-   **Convert Quote To Invoice** Turns a quote into an invoice, optionally deleting the quote afterwards.
-   **Is Still Quote** Reports whether a quote is still a quote or has already been converted. The idempotency check to run before any conversion.
-   **Delete Quote** Deletes a quote from the account.

### Purchases

5

-   **List Receipts** Lists purchase receipts, which are KashFlow's purchase invoices, either all of them, the most recent, or those for one supplier.
-   **Get Receipt** Reads one purchase receipt with its lines.
-   **Create Receipt** Creates a purchase receipt. KashFlow models a purchase with the same object as a sale, so the supplier travels in the customer field.
-   **Add Receipt Payment** Records a payment against a purchase receipt.
-   **Delete Receipt** Deletes a purchase receipt from the account.

### Banking

5

-   **List Bank Accounts** Lists the bank accounts. The nominal code on each is what a payment's account field takes.
-   **Get Bank Balance** Reads the balance of a bank account at a date.
-   **List Bank Transactions** Lists the transactions on a bank account.
-   **Create Bank Transaction** Records a transaction on a bank account. Money in and money out are separate fields rather than a signed amount.
-   **Delete Bank Transaction** Deletes a transaction from a bank account.

### Reference and Reports

4

-   **List Products** Lists the products on the account.
-   **List Nominal Codes** Lists the chart of accounts, which is where a document line's charge type comes from. The source of truth a flow should read rather than hard code.
-   **List Projects** Lists the projects on the account.
-   **Get Report** Reads one of the reports: the account overview, aged debtors, aged creditors, or the balance sheet.

### Advanced

1

-   **Call SOAP Method** Calls any KashFlow SOAP method by name, for the parts of the service this connector does not name individually. The credentials are added for you, and the method name is case sensitive.

## Frequently Asked Questions

### What can FlowRunner do with KashFlow?

FlowRunner agents can run List Customers, Get Customer, and Search Customers in KashFlow, plus 41 more actions.

### Does connecting KashFlow to FlowRunner require OAuth?

No. KashFlow connects to FlowRunner with basic authentication (a username and password), no OAuth flow required.

### Can KashFlow trigger a FlowRunner workflow automatically?

KashFlow doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

**Work at KashFlow?** This integration exposes KashFlow to AI agents on every FlowRunner plan, including through MCP, at no cost to you. [See what FlowRunner offers integration partners](https://flowrunner.ai/integrations/partners), including how to keep this page current.

---
Markdown version of https://flowrunner.ai/integrations/kashflow. Site index: https://flowrunner.ai/llms.txt
