# How to Connect to KashFlow

This guide will help you connect your KashFlow account to Apideck's Unified API. KashFlow is a UK-based cloud accounting software designed for small businesses, offering comprehensive financial management features. Through KashFlow's SOAP API, you can read your accounting data including customers, suppliers, invoices, credit notes, payments, journal entries, ledger accounts, tax rates and currencies.

The connection uses your KashFlow username and password: there is no OAuth authorization screen. Before those credentials work, API access has to be switched on in your KashFlow account, because it is off by default.

## Prerequisites

Before you begin, make sure you have:

- An active KashFlow account on the **Business package**. KashFlow makes the API available free of charge to users on that package, whether the account is a free trial or a paid subscription, so a free trial account is sufficient for testing. Accounts on other packages do not get API access. KashFlow will also issue a dedicated developer test account on request: email KashFlow support at support@kashflow.com with your username, confirmation that "enable support to access this account" stays ticked, and confirmation that the account is for API testing only.
- Access to **Apps → API Settings** in KashFlow, so you can enable API access and check which password mode the account uses.
- Your KashFlow username and the password that matches that mode (see [Choose your password mode](#step-2-choose-your-password-mode)).

## How to Enable API Access in KashFlow

API access is disabled on a new KashFlow account. On a Business-package account, turning it on is a checkbox on the account you already have, at no extra charge.

### Step 1: Turn on the API

1. Log in to your KashFlow account.
2. Click **Apps** in the top menu and choose **API Settings**.
3. Tick the box for **Enable SOAP API**.
4. Click **Update** to save.

KashFlow's own walkthrough is at [Enable the KashFlow API](https://www.kashflow.com/developers/enable-api/).

![KashFlow API Settings](https://res.cloudinary.com/apideck/image/upload/v1767162921/docs/connectors/kashflow/kashflow-api-settings.png)

Ticking **Enable SOAP API** and clicking **Update** is the whole procedure. The screen carries several other controls that an Apideck connection does not use: **Enable Remote Login**, **Enable AutoAuth**, the **User Name** box, and **Restrict Access to specific IP addresses**.

Leave **Restrict Access to specific IP addresses** unticked (it is off by default). When that box is ticked, KashFlow accepts API calls only from the addresses on the list and refuses every other address, so an otherwise-correct connection fails.

### Step 2: Choose your password mode

KashFlow lets you pick which password the API accepts, and this is the single most common cause of a failed connection. On the **API Settings** page, check which mode the account is set to:

- **Same password as web login**: the API accepts your normal KashFlow web login password.
- **Separate API password**: the API accepts only a dedicated password you set here, and rejects the web login password.

Whichever radio button is selected, note the password you will need. If you are not sure, select **Separate API password**, type the password you want to use, and click **Update**. The value is then unambiguous, and that is the password you enter below.

## Configure in Apideck

### Step 1: Enter your connection settings

In Vault, enter:

- **Username**: the username of the KashFlow user the connection should authenticate as. [KashFlow's SOAP API documentation](https://www.kashflow.com/developers/soap-api/introduction/) states that an application needs "the username and password for the customer's KashFlow account", so this is the username that logs in to the account, not a display name. Vault describes the field as "the username of your Web Services User", which is that same KashFlow user.
- **Password**: the password that matches the mode from Step 2 above. That is your dedicated API password when **Separate API password** is selected, otherwise the same password as your KashFlow web login.

### Step 2: Connect your account

Click **Save**. The connection is authorized immediately and you can start using the integration.

## Notes

- The connection is read-only. Apideck reads customers, suppliers, invoices, credit notes, payments, journal entries, ledger accounts, tax rates and currencies out of KashFlow; it does not create, change, or delete anything in your books.
- One connection covers one KashFlow account. If you keep several KashFlow accounts, create a separate connection for each.
- The credentials are the account's own login credentials, so changing that password in KashFlow also breaks the connection. Update the password in Vault after any change. Using a **Separate API password** avoids this, since routine login password changes then leave the connection untouched.

## Troubleshooting

### Authentication error when saving the connection

KashFlow returns a success status even when it rejects your credentials, and carries the real error inside the response. Apideck normalises this, so a rejected login reaches you as an ordinary authentication error rather than a silent empty result. Work through these in order:

1. **Check the password mode first.** Sending your web login password while the account is set to **Separate API password** fails every time, and is by far the most frequent cause. Open **Apps → API Settings** in KashFlow, confirm the mode, and re-enter the matching password in Vault.
2. **Check the username.** Use the username that logs in to the KashFlow account, not a display name.
3. **Confirm the API is still enabled.** See [API access appears to be disabled](#api-access-appears-to-be-disabled) below.
4. **Check your web login password has not expired** if the account is set to **Same password as web login**. Reset it in KashFlow, then update the password in Vault.
5. **Check the IP restriction.** On the API Settings page, **Restrict Access to specific IP addresses** should be unticked. While it is ticked, KashFlow refuses every call from an address that is not on the list.

### API access appears to be disabled

1. Confirm the account is on the **Business package**. KashFlow makes the API available to users on that package, trial or paid; on another package there is nothing to enable, and moving to Business is the prerequisite for everything below.
2. Log in to KashFlow.
3. Go to **Apps → API Settings**.
4. Make sure the **Enable SOAP API** checkbox is ticked.
5. Click **Update** to save the change.
6. Try connecting again in Apideck.

### Still stuck

Contact [Apideck Support](https://help.apideck.com/en/articles/7774658) with the connection's error message and the password mode your KashFlow account uses.

## Additional Resources

- [KashFlow SOAP API documentation](https://www.kashflow.com/developers/soap-api/)
- [Enable the KashFlow API](https://www.kashflow.com/developers/enable-api/)
- [Apideck KashFlow connector documentation](https://developers.apideck.com/connectors/kashflow)
