> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to FreeAgent

The FreeAgent connector lets your AI agent act in each user's FreeAgent account. Each user signs in to FreeAgent once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 117 tools.

**Authentication:** OAuth 2.0
**Categories:** Accounting & Finance
**Tools:** 117: 57 read, 46 write, 14 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own FreeAgent app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=FREEAGENT)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the FreeAgent connection

   In **AgentKit > Connections**, create a FreeAgent connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   FreeAgent connections use your own OAuth app. Register one with FreeAgent and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the FreeAgent connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'freeagent'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize FreeAgent:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'freeagent_accounting_transactions_list',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "freeagent"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize FreeAgent:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="freeagent_accounting_transactions_list",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'freeagent_accounting_transaction_get',
  toolInput: {
    transaction_id: '<transaction_id>',
  },
  connector: 'freeagent',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="freeagent_accounting_transaction_get",
    tool_input={
        "transaction_id": "<transaction_id>",
    },
    connection_name="freeagent",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `freeagent_accounting_transaction_get`

Get Accounting Transaction · Read-only

Get one FreeAgent accounting transaction by ID.
Returns its date, description, category, nominal code, debit value, source item and foreign currency data.
Use freeagent_accounting_transactions_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `transaction_id` (`string`, required): Numeric ID of the accounting transaction: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/accounting/transactions/123 the ID is 123). Get it from freeagent_accounting_transactions_list.

Example input: `{"transaction_id":"<transaction_id>"}`

### `freeagent_accounting_transactions_list`

List Accounting Transactions · Read-only

List FreeAgent's underlying accounting (ledger) transactions for a period, optionally for one nominal code.
Returns each transaction's url, date, description, category, nominal code, debit value and source item.
The period must be 12 months or less, or within one accounting year; with no dates it covers the current accounting year to date.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `nominal_code` (`string`, optional): Only return transactions for this category nominal code. Example: 285.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.

Example input: `{}`

### `freeagent_attachment_get`

Get Attachment · Read-only

Get one FreeAgent attachment (for example a receipt) by ID.
Returns its file name, content type, size, description and temporary content_src download URLs with their expiry.
Find attachment URLs on expenses, bills and bank transaction explanations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `attachment_id` (`string`, required): Numeric ID of the attachment: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/attachments/123 the ID is 123). Get it from the attachment field of an expense, bill or bank transaction explanation.

Example input: `{"attachment_id":"<attachment_id>"}`

### `freeagent_balance_sheet_get`

Get Balance Sheet · Read-only

Get the FreeAgent balance sheet as at a date.
Returns capital assets, current assets and liabilities, net current assets, total assets and owner's equity.
With no date it is as at today from the start of the current accounting period.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `as_at_date` (`string`, optional): Date to report the balance sheet as at in YYYY-MM-DD format. Example: 2026-03-31.

Example input: `{}`

### `freeagent_bank_account_get`

Get Bank Account · Read-only

Get one FreeAgent bank account by ID.
Returns the account's type, name, currency, balances, bank details and status.
Use freeagent_bank_accounts_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bank_account_id` (`string`, required): Numeric ID of the bank account: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bank_accounts/123 the ID is 123). Get it from freeagent_bank_accounts_list.

Example input: `{"bank_account_id":"<bank_account_id>"}`

### `freeagent_bank_accounts_list`

List Bank Accounts · Read-only

List the company's FreeAgent bank, credit card and PayPal accounts.
Returns each account's url, type, name, currency, current balance and latest activity date.
Use this to find a bank account URL before listing transactions or creating explanations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `view` (`string`, optional): Filter by view. One of: standard_bank_accounts, credit_card_accounts, paypal_accounts. One of: `standard_bank_accounts`, `credit_card_accounts`, `paypal_accounts`.

Example input: `{}`

### `freeagent_bank_transaction_explanation_get`

Get Bank Transaction Explanation · Read-only

Get one FreeAgent bank transaction explanation by ID.
Returns its type, date, amount, category, sales tax, description, lock state and linked records.
Use freeagent_bank_transaction_explanations_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bank_transaction_explanation_id` (`string`, required): Numeric ID of the bank transaction explanation: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bank_transaction_explanations/123 the ID is 123). Get it from freeagent_bank_transaction_explanations_list.

Example input: `{"bank_transaction_explanation_id":"<bank_transaction_explanation_id>"}`

### `freeagent_bank_transaction_explanations_list`

List Bank Transaction Explanations · Read-only

List the explanations recorded against transactions in one FreeAgent bank account, filtered by date range or update time.
Returns each explanation's url, type, date, amount, category, description and linked invoice, bill or user.
Use freeagent_bank_transactions_list to see transactions and how much is still unexplained.
Requires a bank account URL from freeagent_bank_accounts_list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bank_account` (`string`, required): FreeAgent URL of the bank account, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123.
- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.

Example input: `{"bank_account":"<bank_account>"}`

### `freeagent_bank_transaction_get`

Get Bank Transaction · Read-only

Get one FreeAgent bank transaction by ID.
Returns its bank account, date, amount, description, unexplained amount and bank_transaction_explanations.
Use freeagent_bank_transactions_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bank_transaction_id` (`string`, required): Numeric ID of the bank transaction: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bank_transactions/123 the ID is 123). Get it from freeagent_bank_transactions_list.

Example input: `{"bank_transaction_id":"<bank_transaction_id>"}`

### `freeagent_bank_transactions_list`

List Bank Transactions · Read-only

List bank transactions in one FreeAgent bank account, filtered by date range, explained status or update time.
Returns each transaction's url, date, amount, description, unexplained amount and its explanations.
Use view unexplained to find transactions that still need explaining; use freeagent_bank_transaction_explanation_create to explain one.
Requires a bank account URL from freeagent_bank_accounts_list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bank_account` (`string`, required): FreeAgent URL of the bank account, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123.
- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `last_uploaded` (`boolean`, optional): true to return only transactions from the most recently uploaded statement.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.
- `view` (`string`, optional): Filter by view. One of: all, unexplained, explained, manual, imported, marked_for_review. Defaults to all. One of: `all`, `unexplained`, `explained`, `manual`, `imported`, `marked_for_review`.

Example input: `{"bank_account":"<bank_account>"}`

### `freeagent_bill_get`

Get Bill · Read-only

Get one FreeAgent bill by ID, including its items.
Returns the bill's contact, reference, dates, totals, status and bill_items.
Use freeagent_bills_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bill_id` (`string`, required): Numeric ID of the bill: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bills/123 the ID is 123). Get it from freeagent_bills_list.

Example input: `{"bill_id":"<bill_id>"}`

### `freeagent_bills_list`

List Bills · Read-only

List FreeAgent supplier bills, filtered by status view, date range, contact, project or update time.
Returns each bill's url, contact, reference, dates, totals, due value and status.
Use this to see what the company owes suppliers; use freeagent_bill_get for one bill with its items.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact` (`string`, optional): FreeAgent URL of the supplier contact whose bills to list, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `nested_bill_items` (`boolean`, optional): true to include each bill's items in the list.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `project` (`string`, optional): FreeAgent URL of the project whose bills to list, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.
- `view` (`string`, optional): Filter by view. One of: all, open, overdue, open_or_overdue, open_or_overdue_payments, open_or_overdue_refunds, paid, recurring, hire_purchase, cis. Defaults to all. One of: `all`, `open`, `overdue`, `open_or_overdue`, `open_or_overdue_payments`, `open_or_overdue_refunds`, `paid`, `recurring`, `hire_purchase`, `cis`.

Example input: `{}`

### `freeagent_cashflow_get`

Get Cashflow · Read-only

Get FreeAgent's historic cashflow summary for a date range.
Returns money in, money out and balance totals, with monthly breakdowns.
Projected cashflow is not returned, so future dates give totals of 0.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `from_date` (`string`, required): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `to_date` (`string`, required): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.

Example input: `{"from_date":"<from_date>","to_date":"<to_date>"}`

### `freeagent_categories_list`

List Categories · Read-only

List the company's FreeAgent accounting categories, grouped into admin expenses, cost of sales, income and general.
Returns each category's url, description, nominal code and tax settings.
Use this to find category URLs for bills, expenses, invoice items and bank explanations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `sub_accounts` (`boolean`, optional): true to list sub accounts (such as 750-1 for a specific bank account) in place of their top-level accounts.

Example input: `{}`

### `freeagent_category_get`

Get Category · Read-only

Get one FreeAgent accounting category by its nominal code.
Returns the category's url, description, nominal code, group and tax settings.
Use freeagent_categories_list to find nominal codes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `nominal_code` (`string`, required): Nominal code of the category, e.g. 285 (also the number at the end of its FreeAgent URL). Get it from freeagent_categories_list.

Example input: `{"nominal_code":"<nominal_code>"}`

### `freeagent_company_business_categories_list`

List Business Categories · Read-only

List the business categories FreeAgent accepts for a company's business_category setting.
Returns an array of business category names.
Use this only to look up valid business category values.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `freeagent_company_get`

Get Company · Read-only

Get the FreeAgent company's details: name, type, currency, address, accounting dates, and sales tax settings.
Returns the company object.
Use this to learn the company's native currency, sales tax rates and accounting year before creating records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `freeagent_company_tax_timeline_get`

Get Tax Timeline · Read-only

Get the company's upcoming tax events, such as VAT returns, corporation tax and payment deadlines.
Returns timeline items with description, nature, date and amount.
Use this to see what tax filings and payments are due next. Requires the Tax, Accounting & Users permission.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `freeagent_contact_get`

Get Contact · Read-only

Get one FreeAgent contact by ID.
Returns the contact's name, organisation, emails, phone, address, tax settings, balance and status.
Use freeagent_contacts_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): Numeric ID of the contact: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/contacts/123 the ID is 123). Get it from freeagent_contacts_list.

Example input: `{"contact_id":"<contact_id>"}`

### `freeagent_contacts_list`

List Contacts · Read-only

List contacts (clients and suppliers) in FreeAgent, filtered by view and sorted by name or date.
Returns each contact's url, name, organisation, email, address, balance and status.
Use this to find a contact's URL before creating invoices, bills, estimates or projects; use freeagent_contact_get for one contact.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `sort` (`string`, optional): Sort order. One of: name, created_at, updated_at — prefix with a hyphen (e.g. -updated_at) for descending order. Defaults to name. One of: `name`, `created_at`, `updated_at`, `-name`, `-created_at`, `-updated_at`.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.
- `view` (`string`, optional): Filter by view. One of: active, all, clients, suppliers, active_projects, completed_projects, open_clients, open_suppliers, hidden. Defaults to active. One of: `active`, `all`, `clients`, `suppliers`, `active_projects`, `completed_projects`, `open_clients`, `open_suppliers`, `hidden`.

Example input: `{}`

### `freeagent_credit_note_get`

Get Credit Note · Read-only

Get one FreeAgent credit note by ID, including its line items.
Returns the credit note's contact, reference, dates, totals, status and credit_note_items.
Use freeagent_credit_notes_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `credit_note_id` (`string`, required): Numeric ID of the credit note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/credit_notes/123 the ID is 123). Get it from freeagent_credit_notes_list.

Example input: `{"credit_note_id":"<credit_note_id>"}`

### `freeagent_credit_note_pdf_get`

Get Credit Note PDF · Read-only

Get a FreeAgent credit note as a PDF.
Returns JSON with pdf.content holding the base64-encoded PDF file.
Use freeagent_credit_note_get for the data instead of the document.
Requires a credit_note_id from freeagent_credit_notes_list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `credit_note_id` (`string`, required): Numeric ID of the credit note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/credit_notes/123 the ID is 123). Get it from freeagent_credit_notes_list.

Example input: `{"credit_note_id":"<credit_note_id>"}`

### `freeagent_credit_note_reconciliation_get`

Get Credit Note Reconciliation · Read-only

Get one FreeAgent credit note reconciliation by ID.
Returns the invoice and credit note URLs, the amount reconciled, the date and currency.
Use freeagent_credit_note_reconciliations_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `credit_note_reconciliation_id` (`string`, required): Numeric ID of the credit note reconciliation: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/credit_note_reconciliations/123 the ID is 123). Get it from freeagent_credit_note_reconciliations_list.

Example input: `{"credit_note_reconciliation_id":"<credit_note_reconciliation_id>"}`

### `freeagent_credit_note_reconciliations_list`

List Credit Note Reconciliations · Read-only

List FreeAgent credit note reconciliations — credit notes applied against invoices — filtered by date or update time.
Returns each reconciliation's url, invoice, credit note, amount, date and currency.
Use this to see which credit notes have been applied to which invoices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.

Example input: `{}`

### `freeagent_credit_notes_list`

List Credit Notes · Read-only

List FreeAgent credit notes, filtered by status view, contact, project or update time.
Returns each credit note's url, contact, reference, dates, totals, refunded and due values, and status.
Use this to browse credit notes; use freeagent_credit_note_get for one with its items.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact` (`string`, optional): FreeAgent URL of the contact whose credit notes to list, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `nested_credit_note_items` (`boolean`, optional): true to include each credit note's line items in the list.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `project` (`string`, optional): FreeAgent URL of the project whose credit notes to list, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `sort` (`string`, optional): Sort order. One of: created_at, updated_at — prefix with a hyphen (e.g. -updated_at) for descending order. Defaults to created_at. One of: `created_at`, `updated_at`, `-created_at`, `-updated_at`.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.
- `view` (`string`, optional): Filter by status view: all (default), recent_open_or_overdue, open, overdue, open_or_overdue, draft, refunded, or last_N_months (for example last_6_months).

Example input: `{}`

### `freeagent_email_addresses_list`

List Sender Email Addresses · Read-only

List the verified sender email addresses FreeAgent can send invoices, estimates and credit notes from.
Returns an array of addresses formatted as 'Name <email>'.
Use this to pick a valid from value for the send_email tools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `freeagent_estimate_get`

Get Estimate · Read-only

Get one FreeAgent estimate by ID, including its line items.
Returns the estimate's contact, reference, type, dates, totals, status and estimate_items.
Use freeagent_estimates_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_estimate_pdf_get`

Get Estimate PDF · Read-only

Get a FreeAgent estimate as a PDF.
Returns JSON with pdf.content holding the base64-encoded PDF file.
Use freeagent_estimate_get for the estimate data instead of the document.
Requires an estimate_id from freeagent_estimates_list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_estimates_list`

List Estimates · Read-only

List FreeAgent estimates, quotes and proposals, filtered by status view, date range, contact, project or invoice.
Returns each estimate's url, contact, reference, type, dates, totals and status.
Use this to browse estimates; use freeagent_estimate_get for one estimate with its items.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact` (`string`, optional): FreeAgent URL of the contact whose estimates to list, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `invoice` (`string`, optional): FreeAgent URL of the invoice whose estimates to list, as returned in the `url` field by freeagent_invoices_list. Example: https://api.freeagent.com/v2/invoices/123.
- `nested_estimate_items` (`boolean`, optional): true to include each estimate's line items in the list.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `project` (`string`, optional): FreeAgent URL of the project whose estimates to list, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.
- `view` (`string`, optional): Filter by view. One of: all, recent, draft, non_draft, sent, approved, rejected, invoiced. Defaults to all. One of: `all`, `recent`, `draft`, `non_draft`, `sent`, `approved`, `rejected`, `invoiced`.

Example input: `{}`

### `freeagent_expense_get`

Get Expense · Read-only

Get one FreeAgent expense by ID.
Returns the expense's user, category, date, amounts, sales tax, rebilling and mileage details.
Use freeagent_expenses_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `expense_id` (`string`, required): Numeric ID of the expense: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/expenses/123 the ID is 123). Get it from freeagent_expenses_list.

Example input: `{"expense_id":"<expense_id>"}`

### `freeagent_expense_mileage_settings_get`

Get Mileage Settings · Read-only

Get the company's mileage claim settings, including valid engine types and sizes by date and the mileage rates.
Returns the mileage settings object.
Use this before freeagent_expense_create for a mileage claim to pick a valid engine_type and engine_size.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `freeagent_expenses_list`

List Expenses · Read-only

List FreeAgent expense claims, filtered by view, date range, project or update time.
Returns each expense's url, user, category, date, amounts, sales tax and description.
Use this to review claims; use freeagent_expense_get for one expense.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `project` (`string`, optional): FreeAgent URL of the project whose expenses to list, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.
- `view` (`string`, optional): Filter by view. One of: recent, recurring. One of: `recent`, `recurring`.

Example input: `{}`

### `freeagent_invoice_get`

Get Invoice · Read-only

Get one FreeAgent invoice by ID, including its line items.
Returns the invoice's contact, reference, dates, totals, status, payment methods and invoice_items.
Use freeagent_invoices_list to find the ID; use freeagent_invoice_pdf_get for the PDF.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_invoice_pdf_get`

Get Invoice PDF · Read-only

Get a FreeAgent invoice as a PDF.
Returns JSON with pdf.content holding the base64-encoded PDF file.
Use freeagent_invoice_get for the invoice data instead of the document.
Requires an invoice_id from freeagent_invoices_list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_invoice_timeline_get`

Get Invoice Timeline · Read-only

Get the company's invoice timeline of recent invoice events such as payments received.
Returns timeline items with reference, summary, description, date and amount.
Use this for a recent activity feed; use freeagent_invoices_list to list invoices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `freeagent_invoices_list`

List Invoices · Read-only

List FreeAgent sales invoices, filtered by status view, contact, project or update time.
Returns each invoice's url, contact, reference, dates, currency, totals, paid and due values, and status.
Use this to browse or find invoices; use freeagent_invoice_get for one invoice with its items.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact` (`string`, optional): FreeAgent URL of the contact whose invoices to list, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `nested_invoice_items` (`boolean`, optional): true to include each invoice's line items in the list.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `project` (`string`, optional): FreeAgent URL of the project whose invoices to list, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `sort` (`string`, optional): Sort order. One of: created_at, updated_at — prefix with a hyphen (e.g. -updated_at) for descending order. Defaults to created_at. One of: `created_at`, `updated_at`, `-created_at`, `-updated_at`.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.
- `view` (`string`, optional): Filter by status view: all (default), recent_open_or_overdue, open, overdue, open_or_overdue, draft, paid, scheduled_to_email, thank_you_emails, reminder_emails, or last_N_months (for example last_3_months).

Example input: `{}`

### `freeagent_journal_set_get`

Get Journal Set · Read-only

Get one FreeAgent journal set by ID, with its journal entries.
Returns the set's date, description, tag and journal_entries (category and debit value).
Use freeagent_journal_sets_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `journal_set_id` (`string`, required): Numeric ID of the journal set: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/journal_sets/123 the ID is 123). Get it from freeagent_journal_sets_list.

Example input: `{"journal_set_id":"<journal_set_id>"}`

### `freeagent_journal_sets_list`

List Journal Sets · Read-only

List FreeAgent journal sets (balanced groups of manual journal entries), filtered by date range, tag or update time.
Returns each journal set's url, date, description and tag.
Use freeagent_journal_set_get for the entries in one set.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `tag` (`string`, optional): Only return journal sets with this tag.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.

Example input: `{}`

### `freeagent_note_get`

Get Note · Read-only

Get one FreeAgent note by ID.
Returns the note's text, parent contact or project URL, author and timestamps.
Use freeagent_notes_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `note_id` (`string`, required): Numeric ID of the note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/notes/123 the ID is 123). Get it from freeagent_notes_list.

Example input: `{"note_id":"<note_id>"}`

### `freeagent_notes_list`

List Notes · Read-only

List the notes attached to one FreeAgent contact or project.
Returns each note's url, text, parent URL, author and timestamps.
Give exactly one of contact or project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact` (`string`, optional): FreeAgent URL of the contact whose notes to list, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123. Give this or project.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `project` (`string`, optional): FreeAgent URL of the project whose notes to list, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123. Give this or contact.

Example input: `{}`

### `freeagent_price_list_item_get`

Get Price List Item · Read-only

Get one FreeAgent price list item by ID.
Returns its code, description, item type, quantity, price, tax settings and category.
Use freeagent_price_list_items_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `price_list_item_id` (`string`, required): Numeric ID of the price list item: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/price_list_items/123 the ID is 123). Get it from freeagent_price_list_items_list.

Example input: `{"price_list_item_id":"<price_list_item_id>"}`

### `freeagent_price_list_items_list`

List Price List Items · Read-only

List the saved products and services in the FreeAgent price list.
Returns each item's url, code, description, item type, quantity, price and tax settings.
Use this to reuse standard prices on invoices and estimates.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `sort` (`string`, optional): Sort order. One of: created_at, code, updated_at — prefix with a hyphen (e.g. -updated_at) for descending order. Defaults to created_at. One of: `created_at`, `code`, `updated_at`, `-created_at`, `-code`, `-updated_at`.

Example input: `{}`

### `freeagent_profit_and_loss_summary_get`

Get Profit and Loss · Read-only

Get the FreeAgent profit and loss summary for a date range or accounting period.
Returns income, expenses, operating profit, deductions and retained profit in the native currency.
With no parameters it covers the current accounting year to date; the range must be 12 months or less or within one accounting year.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `accounting_period` (`string`, optional): Annual accounting period as start/end years, e.g. 2025/26. Use instead of from_date and to_date.
- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.

Example input: `{}`

### `freeagent_project_get`

Get Project · Read-only

Get one FreeAgent project by ID.
Returns the project's contact, name, status, currency, budget, billing settings, dates and whether it can be deleted.
Use freeagent_projects_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): Numeric ID of the project: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/projects/123 the ID is 123). Get it from freeagent_projects_list.

Example input: `{"project_id":"<project_id>"}`

### `freeagent_projects_list`

List Projects · Read-only

List FreeAgent projects, filtered by status view or contact and sorted by name, contact or date.
Returns each project's url, contact, name, status, currency, budget and billing rate.
Use this to find a project URL for invoices, tasks and timeslips; use freeagent_project_get for one project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact` (`string`, optional): FreeAgent URL of the contact whose projects to list, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `nested` (`boolean`, optional): true to return each project's full contact details instead of a contact URL.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `sort` (`string`, optional): Sort order. One of: name, contact_name, contact_display_name, created_at, updated_at — prefix with a hyphen (e.g. -updated_at) for descending order. Defaults to name. One of: `name`, `contact_name`, `contact_display_name`, `created_at`, `updated_at`, `-name`, `-contact_name`, `-contact_display_name`, `-created_at`, `-updated_at`.
- `view` (`string`, optional): Filter by view. One of: active, completed, cancelled, hidden. One of: `active`, `completed`, `cancelled`, `hidden`.

Example input: `{}`

### `freeagent_recurring_invoice_get`

Get Recurring Invoice · Read-only

Get one FreeAgent recurring invoice template by ID.
Returns its contact, frequency, recurring status, end date, next recurrence date and line items.
Use freeagent_recurring_invoices_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `recurring_invoice_id` (`string`, required): Numeric ID of the recurring invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/recurring_invoices/123 the ID is 123). Get it from freeagent_recurring_invoices_list.

Example input: `{"recurring_invoice_id":"<recurring_invoice_id>"}`

### `freeagent_recurring_invoices_list`

List Recurring Invoices · Read-only

List FreeAgent recurring invoice templates, filtered by status or contact.
Returns each recurring invoice's url, contact, frequency, recurring status, next recurrence date and invoice details.
Use this to see scheduled repeat billing; use freeagent_invoices_list for issued invoices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact` (`string`, optional): FreeAgent URL of the contact whose recurring invoices to list, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `view` (`string`, optional): Filter by view. One of: draft, active, inactive. One of: `draft`, `active`, `inactive`.

Example input: `{}`

### `freeagent_stock_item_get`

Get Stock Item · Read-only

Get one FreeAgent stock item by ID.
Returns its description, opening quantity and balance, cost-of-sale category and stock on hand.
Use freeagent_stock_items_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `stock_item_id` (`string`, required): Numeric ID of the stock item: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/stock_items/123 the ID is 123). Get it from freeagent_stock_items_list.

Example input: `{"stock_item_id":"<stock_item_id>"}`

### `freeagent_stock_items_list`

List Stock Items · Read-only

List the stock items defined in FreeAgent.
Returns each item's url, description, opening quantity and balance, cost-of-sale category and stock on hand.
Use this to find a stock item URL for invoices, bills or price list items.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `sort` (`string`, optional): Sort order. One of: created_at, description, updated_at — prefix with a hyphen (e.g. -updated_at) for descending order. Defaults to created_at. One of: `created_at`, `description`, `updated_at`, `-created_at`, `-description`, `-updated_at`.

Example input: `{}`

### `freeagent_task_get`

Get Task · Read-only

Get one FreeAgent task by ID.
Returns the task's project, name, currency, billable flag, billing rate, status and whether it can be deleted.
Use freeagent_tasks_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`string`, required): Numeric ID of the task: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/tasks/123 the ID is 123). Get it from freeagent_tasks_list.

Example input: `{"task_id":"<task_id>"}`

### `freeagent_tasks_list`

List Tasks · Read-only

List FreeAgent project tasks, filtered by status view, project or update time.
Returns each task's url, project, name, billable flag, billing rate and status.
Use this to find a task URL for timeslips; use freeagent_task_get for one task.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `project` (`string`, optional): FreeAgent URL of the project whose tasks to list, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `sort` (`string`, optional): Sort order: name (default), project, billing_rate, created_at or updated_at. One of: `name`, `project`, `billing_rate`, `created_at`, `updated_at`.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.
- `view` (`string`, optional): Filter by view. One of: all, active, completed, hidden. Defaults to all. One of: `all`, `active`, `completed`, `hidden`.

Example input: `{}`

### `freeagent_timeslip_get`

Get Timeslip · Read-only

Get one FreeAgent timeslip by ID.
Returns its user, project, task, date, hours, comment, billing invoice and any running timer.
Use freeagent_timeslips_list to find the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `timeslip_id` (`string`, required): Numeric ID of the timeslip: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/timeslips/123 the ID is 123). Get it from freeagent_timeslips_list.

Example input: `{"timeslip_id":"<timeslip_id>"}`

### `freeagent_timeslips_list`

List Timeslips · Read-only

List FreeAgent timeslips (logged time), filtered by date range, user, task, project, billing state or update time.
Returns each timeslip's url, user, project, task, date, hours, comment and billing invoice.
Use view unbilled to find time not yet invoiced; use freeagent_timeslip_get for one timeslip.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `nested` (`boolean`, optional): true to return the user, project and task as nested objects instead of URLs.
- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `project` (`string`, optional): FreeAgent URL of the project whose timeslips to list, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `task` (`string`, optional): FreeAgent URL of the task whose timeslips to list, as returned in the `url` field by freeagent_tasks_list. Example: https://api.freeagent.com/v2/tasks/123.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.
- `updated_since` (`string`, optional): Only return records updated on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00.000Z.
- `user` (`string`, optional): FreeAgent URL of the user whose timeslips to list, as returned in the `url` field by freeagent_users_list. Example: https://api.freeagent.com/v2/users/123.
- `view` (`string`, optional): Filter by view. One of: all, unbilled, running. Defaults to all. One of: `all`, `unbilled`, `running`.

Example input: `{}`

### `freeagent_trial_balance_summary_get`

Get Trial Balance · Read-only

Get the FreeAgent trial balance summary for a period.
Returns each category's nominal code, display nominal code, name and total.
With no dates it is for today; with only to_date it runs from the start of that accounting period.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `from_date` (`string`, optional): Start of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-01-01.
- `to_date` (`string`, optional): End of the date range (inclusive) in YYYY-MM-DD format. Example: 2026-03-31.

Example input: `{}`

### `freeagent_user_get`

Get User · Read-only

Get one FreeAgent user by ID.
Returns the user's name, email, role, permission level and payroll profile summary.
Use freeagent_users_list to find the ID; use freeagent_user_me_get for the authorized user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `user_id` (`string`, required): Numeric ID of the user: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/users/123 the ID is 123). Get it from freeagent_users_list.

Example input: `{"user_id":"<user_id>"}`

### `freeagent_user_me_get`

Get Current User · Read-only

Get the profile of the FreeAgent user who authorized this connection.
Returns the user's url, name, email, role and permission level.
Use this to find the current user's URL for expenses and timeslips; use freeagent_user_get for another user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `freeagent_users_list`

List Users · Read-only

List the users in the FreeAgent company, optionally filtered to staff or advisors.
Returns each user's url, name, email, role and permission level.
Use this to find a user's URL for expenses, timeslips or explanations. Requires the Tax, Accounting & Users permission.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number of results to return, starting at 1. FreeAgent returns 25 items per page by default; the response's Link header points to the next page.
- `per_page` (`integer`, optional): Number of items per page, from 1 to 100. Defaults to 25.
- `view` (`string`, optional): Filter by view. One of: all, staff, active_staff, advisors, active_advisors. Defaults to all. One of: `all`, `staff`, `active_staff`, `advisors`, `active_advisors`.

Example input: `{}`

### `freeagent_bank_account_create`

Create Bank Account · Write

Add a bank, credit card or e-commerce account to FreeAgent.
Returns the new bank account, including its url.
Use freeagent_bank_account_update to change an existing account.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Account name shown in FreeAgent.
- `opening_balance` (`number`, required): Account balance at the FreeAgent start date; use 0 for accounts opened after that date. Example: 0.
- `account_number` (`string`, optional): Account number. For credit card accounts only the last four digits are needed.
- `bank_name` (`string`, optional): Name of the bank.
- `bic` (`string`, optional): Bank Identifier Code (SWIFT).
- `currency` (`string`, optional): Accounting currency of the account (ISO 4217). Defaults to the native currency and cannot change once the account has transactions. Example: GBP.
- `iban` (`string`, optional): International Bank Account Number.
- `is_personal` (`boolean`, optional): true for a personal account, false for a business account.
- `secondary_sort_code` (`string`, optional): Secondary sort code, only if the account has two.
- `sort_code` (`string`, optional): Sort code or routing number.
- `type` (`string`, optional): Account type: StandardBankAccount (default), CreditCardAccount or EcommerceAccount. One of: `StandardBankAccount`, `CreditCardAccount`, `EcommerceAccount`.

Example input: `{"name":"<name>","opening_balance":0}`

### `freeagent_bank_account_update`

Update Bank Account · Write

Update a FreeAgent bank account's name, bank details, currency or opening balance.
Returns the updated bank account.
Only the fields you pass are changed.
Requires a bank_account_id from freeagent_bank_accounts_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bank_account_id` (`string`, required): Numeric ID of the bank account: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bank_accounts/123 the ID is 123). Get it from freeagent_bank_accounts_list.
- `account_number` (`string`, optional): Account number. For credit card accounts only the last four digits are needed.
- `bank_name` (`string`, optional): Name of the bank.
- `bic` (`string`, optional): Bank Identifier Code (SWIFT).
- `currency` (`string`, optional): Accounting currency of the account (ISO 4217). Defaults to the native currency and cannot change once the account has transactions. Example: GBP.
- `iban` (`string`, optional): International Bank Account Number.
- `is_personal` (`boolean`, optional): true for a personal account, false for a business account.
- `name` (`string`, optional): Account name shown in FreeAgent.
- `opening_balance` (`number`, optional): Account balance at the FreeAgent start date; use 0 for accounts opened after that date. Example: 0.
- `secondary_sort_code` (`string`, optional): Secondary sort code, only if the account has two.
- `sort_code` (`string`, optional): Sort code or routing number.

Example input: `{"bank_account_id":"<bank_account_id>"}`

### `freeagent_bank_statement_upload`

Upload Bank Statement · Write

Import bank transactions into a FreeAgent bank account from a list of statement lines (JSON, not a file).
Returns 200 when the upload is accepted; check freeagent_bank_transactions_list to confirm the import.
Transactions matching an existing one on the same date, amount and description are skipped, so send a whole day's lines together.
Requires a bank account URL from freeagent_bank_accounts_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `bank_account` (`string`, required): FreeAgent URL of the bank account, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123.
- `statement` (`array`, required): Statement lines to import. Each line needs dated_on (YYYY-MM-DD) and usually an amount (negative for money out) and description; optionally a unique fitid and a transaction_type such as CREDIT, DEBIT, FEE, PAYMENT, DIRECTDEP or OTHER (default). Example: [{"dated_on": "2026-01-05", "amount": -100, "description": "Local Council", "fitid": "049b807d"}]

Example input: `{"bank_account":"<bank_account>","statement":[{"dated_on":"2026-01-05","amount":-100,"description":"Local Council","fitid":"049b807d"}]}`

### `freeagent_bank_transaction_explanation_create`

Create Bank Transaction Explanation · Write

Explain a FreeAgent bank transaction as a categorised payment or receipt, an invoice or bill payment, a user payment or a transfer — or create a new transaction with its explanation.
Returns the new explanation.
Set category for payments and receipts; set paid_invoice, paid_bill, paid_user or transfer_bank_account instead for those types.
Requires a bank_transaction URL from freeagent_bank_transactions_list, or a bank_account URL.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `dated_on` (`string`, required): Date of the explanation in YYYY-MM-DD format. Example: 2026-01-31.
- `gross_value` (`number`, required): Amount explained, in the bank account's currency. Negative for money out (payments, bill payments), positive for money in (receipts, invoice payments). FreeAgent rejects a sign that does not match the explanation type. Example: -120.
- `bank_account` (`string`, optional): FreeAgent URL of the bank account in which to create a new transaction together with its explanation, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123. Give this or bank_transaction.
- `bank_transaction` (`string`, optional): FreeAgent URL of the existing bank transaction to explain, as returned in the `url` field by freeagent_bank_transactions_list. Example: https://api.freeagent.com/v2/bank_transactions/123. Give this or bank_account.
- `category` (`string`, optional): FreeAgent URL of the accounting category that explains the transaction, as returned in the `url` field by freeagent_categories_list. Example: https://api.freeagent.com/v2/categories/123. Not needed when paying an invoice or bill or transferring between accounts.
- `cheque_number` (`string`, optional): Cheque number, if paid by cheque.
- `description` (`string`, optional): Description of the transaction. Not required for transfers or invoice receipts.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge, EC VAT MOSS. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01; Reverse Charge is only valid on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`, `EC VAT MOSS`.
- `foreign_currency_value` (`number`, optional): For a foreign-currency invoice or bill: the gross_value expressed in that foreign currency. Example: -140.
- `marked_for_review` (`boolean`, optional): true to mark the explanation as awaiting review.
- `paid_bill` (`string`, optional): FreeAgent URL of the bill this payment settles or refunds, as returned in the `url` field by freeagent_bills_list. Example: https://api.freeagent.com/v2/bills/123.
- `paid_invoice` (`string`, optional): FreeAgent URL of the invoice this payment settles (or credit note it refunds), as returned in the `url` field by freeagent_invoices_list. Example: https://api.freeagent.com/v2/invoices/123.
- `paid_user` (`string`, optional): FreeAgent URL of the user money was paid to or received from, as returned in the `url` field by freeagent_users_list. Example: https://api.freeagent.com/v2/users/123. Omit category for a smart user payment.
- `place_of_supply` (`string`, optional): EU member country name for the place of supply. Required when ec_status is EC VAT MOSS. Example: France.
- `project` (`string`, optional): FreeAgent URL of the project the payment is linked or rebilled to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `rebill_factor` (`number`, optional): Markup percentage or fixed price for the rebill. Required when rebill_type is markup or price. Example: 10.
- `rebill_type` (`string`, optional): How to rebill this cost to the project's client: cost (at cost), markup (cost plus rebill_factor percent) or price (fixed rebill_factor amount). One of: `cost`, `markup`, `price`.
- `receipt_reference` (`string`, optional): Receipt reference for a payment or refund.
- `sales_tax_rate` (`number`, optional): Sales tax (VAT) rate as a percentage, one of the company's standard rates. Example: 20.
- `sales_tax_status` (`string`, optional): Mark the item as TAXABLE, EXEMPT or OUT_OF_SCOPE for sales tax instead of giving a rate. One of: `TAXABLE`, `EXEMPT`, `OUT_OF_SCOPE`.
- `stock_altering_quantity` (`integer`, optional): For stock purchases or sales: how many units were bought or sold. Example: 10.
- `stock_item` (`string`, optional): FreeAgent URL of the stock item purchased or sold, as returned in the `url` field by freeagent_stock_items_list. Example: https://api.freeagent.com/v2/stock_items/123.
- `transfer_bank_account` (`string`, optional): FreeAgent URL of the other bank account in a transfer between accounts, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123.

Example input: `{"dated_on":"<dated_on>","gross_value":-120}`

### `freeagent_bank_transaction_explanation_update`

Update Bank Transaction Explanation · Write

Update a FreeAgent bank transaction explanation.
Returns the updated explanation.
Only the fields you pass are changed; locked attributes cannot be modified.
Requires a bank_transaction_explanation_id from freeagent_bank_transaction_explanations_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bank_transaction_explanation_id` (`string`, required): Numeric ID of the bank transaction explanation: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bank_transaction_explanations/123 the ID is 123). Get it from freeagent_bank_transaction_explanations_list.
- `category` (`string`, optional): FreeAgent URL of the accounting category that explains the transaction, as returned in the `url` field by freeagent_categories_list. Example: https://api.freeagent.com/v2/categories/123. Not needed when paying an invoice or bill or transferring between accounts.
- `cheque_number` (`string`, optional): Cheque number, if paid by cheque.
- `dated_on` (`string`, optional): Date of the explanation in YYYY-MM-DD format. Example: 2026-01-31.
- `description` (`string`, optional): Description of the transaction. Not required for transfers or invoice receipts.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge, EC VAT MOSS. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01; Reverse Charge is only valid on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`, `EC VAT MOSS`.
- `foreign_currency_value` (`number`, optional): For a foreign-currency invoice or bill: the gross_value expressed in that foreign currency. Example: -140.
- `gross_value` (`number`, optional): Amount explained, in the bank account's currency. Negative for money out (payments, bill payments), positive for money in (receipts, invoice payments). FreeAgent rejects a sign that does not match the explanation type. Example: -120.
- `marked_for_review` (`boolean`, optional): true to mark the explanation as awaiting review.
- `paid_bill` (`string`, optional): FreeAgent URL of the bill this payment settles or refunds, as returned in the `url` field by freeagent_bills_list. Example: https://api.freeagent.com/v2/bills/123.
- `paid_invoice` (`string`, optional): FreeAgent URL of the invoice this payment settles (or credit note it refunds), as returned in the `url` field by freeagent_invoices_list. Example: https://api.freeagent.com/v2/invoices/123.
- `paid_user` (`string`, optional): FreeAgent URL of the user money was paid to or received from, as returned in the `url` field by freeagent_users_list. Example: https://api.freeagent.com/v2/users/123. Omit category for a smart user payment.
- `place_of_supply` (`string`, optional): EU member country name for the place of supply. Required when ec_status is EC VAT MOSS. Example: France.
- `project` (`string`, optional): FreeAgent URL of the project the payment is linked or rebilled to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `rebill_factor` (`number`, optional): Markup percentage or fixed price for the rebill. Required when rebill_type is markup or price. Example: 10.
- `rebill_type` (`string`, optional): How to rebill this cost to the project's client: cost (at cost), markup (cost plus rebill_factor percent) or price (fixed rebill_factor amount). One of: `cost`, `markup`, `price`.
- `receipt_reference` (`string`, optional): Receipt reference for a payment or refund.
- `sales_tax_rate` (`number`, optional): Sales tax (VAT) rate as a percentage, one of the company's standard rates. Example: 20.
- `sales_tax_status` (`string`, optional): Mark the item as TAXABLE, EXEMPT or OUT_OF_SCOPE for sales tax instead of giving a rate. One of: `TAXABLE`, `EXEMPT`, `OUT_OF_SCOPE`.
- `stock_altering_quantity` (`integer`, optional): For stock purchases or sales: how many units were bought or sold. Example: 10.
- `stock_item` (`string`, optional): FreeAgent URL of the stock item purchased or sold, as returned in the `url` field by freeagent_stock_items_list. Example: https://api.freeagent.com/v2/stock_items/123.
- `transfer_bank_account` (`string`, optional): FreeAgent URL of the other bank account in a transfer between accounts, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123.

Example input: `{"bank_transaction_explanation_id":"<bank_transaction_explanation_id>"}`

### `freeagent_bill_create`

Create Bill · Write

Record a supplier bill in FreeAgent with one or more categorised items.
Returns the new bill, including its url.
Use this for supplier invoices; use freeagent_expense_create for costs paid personally by a user.
Requires a contact URL from freeagent_contacts_list and category URLs from freeagent_categories_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `bill_items` (`array`, required): Bill line items (up to 40). Each item needs an accounting category URL and a total_value (including tax) or total_value_ex_tax, and usually a description; optionally a sales_tax_rate, sales_tax_status, quantity, unit or project URL. When updating, every item must carry a url: an existing item's URL to change it, the URL plus "_destroy": 1 to delete it, or an empty string to add a new item. Example: [{"category": "https://api.freeagent.com/v2/categories/285", "description": "Office supplies", "total_value": 120, "sales_tax_rate": 20}]
- `contact` (`string`, required): FreeAgent URL of the supplier contact being billed, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `dated_on` (`string`, required): Bill date in YYYY-MM-DD format. Example: 2026-01-31.
- `due_on` (`string`, required): Bill due date in YYYY-MM-DD format. Example: 2026-02-28.
- `reference` (`string`, required): Free-text bill reference, usually the supplier's invoice number.
- `comments` (`string`, optional): Free-text comments on the bill.
- `currency` (`string`, optional): Three-letter ISO 4217 currency code. Defaults to the company's native currency when omitted. Example: GBP.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`.
- `is_paid_by_hire_purchase` (`boolean`, optional): true if the bill will be paid using a hire purchase agreement. Defaults to false.
- `project` (`string`, optional): FreeAgent URL of the project the bill relates to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `rebill_factor` (`number`, optional): Markup percentage or fixed price for the rebill. Required when rebill_type is markup or price. Example: 10.
- `rebill_type` (`string`, optional): How to rebill this cost to the project's client: cost (at cost), markup (cost plus rebill_factor percent) or price (fixed rebill_factor amount). One of: `cost`, `markup`, `price`.
- `recurring` (`string`, optional): How often this item recurs. One of: Weekly, Two Weekly, Four Weekly, Two Monthly, Quarterly, Biannually, Annually, 2-Yearly. One of: `Weekly`, `Two Weekly`, `Four Weekly`, `Two Monthly`, `Quarterly`, `Biannually`, `Annually`, `2-Yearly`.
- `recurring_end_date` (`string`, optional): Date the bill stops recurring in YYYY-MM-DD format. Example: 2026-12-31.

Example input: `{"bill_items":[{"category":"https://api.freeagent.com/v2/categories/285","description":"Office supplies","total_value":120,"sales_tax_rate":20}],"contact":"<contact>","dated_on":"<dated_on>","due_on":"<due_on>","reference":"<reference>"}`

### `freeagent_bill_update`

Update Bill · Write

Update a FreeAgent bill's details or items.
Returns the updated bill.
Only the fields you pass are changed; each bill item must include its url (empty string for a new item).
Requires a bill_id from freeagent_bills_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `bill_id` (`string`, required): Numeric ID of the bill: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bills/123 the ID is 123). Get it from freeagent_bills_list.
- `bill_items` (`array`, optional): Bill line items (up to 40). Each item needs an accounting category URL and a total_value (including tax) or total_value_ex_tax, and usually a description; optionally a sales_tax_rate, sales_tax_status, quantity, unit or project URL. When updating, every item must carry a url: an existing item's URL to change it, the URL plus "_destroy": 1 to delete it, or an empty string to add a new item. Example: [{"category": "https://api.freeagent.com/v2/categories/285", "description": "Office supplies", "total_value": 120, "sales_tax_rate": 20}]
- `comments` (`string`, optional): Free-text comments on the bill.
- `contact` (`string`, optional): FreeAgent URL of the supplier contact being billed, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `currency` (`string`, optional): Three-letter ISO 4217 currency code. Defaults to the company's native currency when omitted. Example: GBP.
- `dated_on` (`string`, optional): Bill date in YYYY-MM-DD format. Example: 2026-01-31.
- `due_on` (`string`, optional): Bill due date in YYYY-MM-DD format. Example: 2026-02-28.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`.
- `is_paid_by_hire_purchase` (`boolean`, optional): true if the bill will be paid using a hire purchase agreement. Defaults to false.
- `project` (`string`, optional): FreeAgent URL of the project the bill relates to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `rebill_factor` (`number`, optional): Markup percentage or fixed price for the rebill. Required when rebill_type is markup or price. Example: 10.
- `rebill_type` (`string`, optional): How to rebill this cost to the project's client: cost (at cost), markup (cost plus rebill_factor percent) or price (fixed rebill_factor amount). One of: `cost`, `markup`, `price`.
- `recurring` (`string`, optional): How often this item recurs. One of: Weekly, Two Weekly, Four Weekly, Two Monthly, Quarterly, Biannually, Annually, 2-Yearly. One of: `Weekly`, `Two Weekly`, `Four Weekly`, `Two Monthly`, `Quarterly`, `Biannually`, `Annually`, `2-Yearly`.
- `recurring_end_date` (`string`, optional): Date the bill stops recurring in YYYY-MM-DD format. Example: 2026-12-31.
- `reference` (`string`, optional): Free-text bill reference, usually the supplier's invoice number.

Example input: `{"bill_id":"<bill_id>"}`

### `freeagent_contact_create`

Create Contact · Write

Create a FreeAgent contact (client or supplier) for a person or organisation.
Returns the new contact, including its url.
Use this before invoicing or billing someone new; use freeagent_contact_update to change an existing contact.
Give either organisation_name or both first_name and last_name.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `address1` (`string`, optional): First line of the address.
- `address2` (`string`, optional): Second line of the address.
- `address3` (`string`, optional): Third line of the address.
- `billing_email` (`string`, optional): Email address that invoices are sent to, if different from email.
- `charge_sales_tax` (`string`, optional): When to charge sales tax on invoices to this contact: Auto (default), Always or Never. One of: `Auto`, `Always`, `Never`.
- `contact_name_on_invoices` (`boolean`, optional): true to show the person's name as well as the organisation name on invoices.
- `country` (`string`, optional): Country name. Example: United Kingdom.
- `default_payment_terms_in_days` (`integer`, optional): Default payment terms for this contact's invoices, in days. Example: 30.
- `email` (`string`, optional): Contact's email address.
- `first_name` (`string`, optional): Contact's first name. Required with last_name when organisation_name is not given.
- `last_name` (`string`, optional): Contact's last name. Required with first_name when organisation_name is not given.
- `locale` (`string`, optional): Language used on this contact's invoices and estimates, as a locale code. Example: en. One of: `bg`, `ca`, `cy`, `cz`, `de`, `dk`, `en`, `en-US`, `es`, `et`, `fi`, `fr`, `fr-BE`, `fr-CA`, `is`, `it`, `lv-LV`, `nl`, `nl-BE`, `nk`, `pl-PL`, `pt-BR`, `ro`, `rs`, `ru`, `se`, `sk`, `tr`.
- `mobile` (`string`, optional): Mobile number.
- `organisation_name` (`string`, optional): Organisation (company) name. Required when first_name and last_name are not given.
- `phone_number` (`string`, optional): Telephone number.
- `postcode` (`string`, optional): Postcode or ZIP code.
- `region` (`string`, optional): Region, county or state.
- `sales_tax_registration_number` (`string`, optional): Contact's sales tax (VAT) registration number, shown on invoices and used for EC sales reporting.
- `status` (`string`, optional): Contact status: Active or Hidden. One of: `Active`, `Hidden`.
- `town` (`string`, optional): Town or city.
- `uses_contact_invoice_sequence` (`boolean`, optional): true to number this contact's invoices with a contact-level sequence instead of the global one.

Example input: `{}`

### `freeagent_contact_update`

Update Contact · Write

Update a FreeAgent contact's name, contact details, address, invoice settings or status.
Returns the updated contact.
Only the fields you pass are changed. Use freeagent_contact_create to add a new contact.
Requires a contact_id from freeagent_contacts_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): Numeric ID of the contact: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/contacts/123 the ID is 123). Get it from freeagent_contacts_list.
- `address1` (`string`, optional): First line of the address.
- `address2` (`string`, optional): Second line of the address.
- `address3` (`string`, optional): Third line of the address.
- `billing_email` (`string`, optional): Email address that invoices are sent to, if different from email.
- `charge_sales_tax` (`string`, optional): When to charge sales tax on invoices to this contact: Auto (default), Always or Never. One of: `Auto`, `Always`, `Never`.
- `contact_name_on_invoices` (`boolean`, optional): true to show the person's name as well as the organisation name on invoices.
- `country` (`string`, optional): Country name. Example: United Kingdom.
- `default_payment_terms_in_days` (`integer`, optional): Default payment terms for this contact's invoices, in days. Example: 30.
- `email` (`string`, optional): Contact's email address.
- `first_name` (`string`, optional): Contact's first name. Required with last_name when organisation_name is not given.
- `last_name` (`string`, optional): Contact's last name. Required with first_name when organisation_name is not given.
- `locale` (`string`, optional): Language used on this contact's invoices and estimates, as a locale code. Example: en. One of: `bg`, `ca`, `cy`, `cz`, `de`, `dk`, `en`, `en-US`, `es`, `et`, `fi`, `fr`, `fr-BE`, `fr-CA`, `is`, `it`, `lv-LV`, `nl`, `nl-BE`, `nk`, `pl-PL`, `pt-BR`, `ro`, `rs`, `ru`, `se`, `sk`, `tr`.
- `mobile` (`string`, optional): Mobile number.
- `organisation_name` (`string`, optional): Organisation (company) name. Required when first_name and last_name are not given.
- `phone_number` (`string`, optional): Telephone number.
- `postcode` (`string`, optional): Postcode or ZIP code.
- `region` (`string`, optional): Region, county or state.
- `sales_tax_registration_number` (`string`, optional): Contact's sales tax (VAT) registration number, shown on invoices and used for EC sales reporting.
- `status` (`string`, optional): Contact status: Active or Hidden. One of: `Active`, `Hidden`.
- `town` (`string`, optional): Town or city.
- `uses_contact_invoice_sequence` (`boolean`, optional): true to number this contact's invoices with a contact-level sequence instead of the global one.

Example input: `{"contact_id":"<contact_id>"}`

### `freeagent_credit_note_create`

Create Credit Note · Write

Create a draft credit note in FreeAgent for a contact, with line items.
Returns the new credit note in Draft status, including its url.
Use freeagent_credit_note_reconciliation_create to apply it to an invoice, and freeagent_credit_note_mark_as_sent to issue it.
Requires a contact URL from freeagent_contacts_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact` (`string`, required): FreeAgent URL of the contact being credited, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `dated_on` (`string`, required): Credit note date in YYYY-MM-DD format. Example: 2026-01-31.
- `payment_terms_in_days` (`integer`, required): Payment terms in days. Set 0 to show 'Due on Receipt'. Example: 30.
- `bank_account` (`string`, optional): FreeAgent URL of the bank account shown for remittance on the credit note, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123.
- `client_contact_name` (`string`, optional): Name to show on the credit note instead of the contact's display name.
- `comments` (`string`, optional): Additional text shown at the bottom of the credit note.
- `credit_note_items` (`array`, optional): Line items for the credit note. Each item needs a description; most also take an item_type (Hours, Products, Services, Expenses, Discount, Credit and similar — leave it out for 'No Unit'), a quantity and a unit price, and optionally a sales_tax_rate (or sales_tax_status EXEMPT) and an income category URL. When updating, include the item's id to change it, or id plus "_destroy": 1 to remove it. Example: [{"item_type": "Services", "quantity": 1, "price": 150, "description": "Refund for cancelled session"}]
- `currency` (`string`, optional): Three-letter ISO 4217 currency code. Defaults to the company's native currency when omitted. Example: GBP.
- `discount_percent` (`number`, optional): Discount percentage applied across the whole credit note.
- `due_on` (`string`, optional): Due date of the credit note in YYYY-MM-DD format. Example: 2026-02-28.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge, EC VAT MOSS. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01; Reverse Charge is only valid on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`, `EC VAT MOSS`.
- `omit_header` (`boolean`, optional): true to leave your logo and company address off the credit note.
- `payment_terms` (`string`, optional): Custom payment terms text that overrides the normal terms and due date.
- `place_of_supply` (`string`, optional): EU member country name for the place of supply. Required when ec_status is EC VAT MOSS. Example: France.
- `po_reference` (`string`, optional): Purchase order reference that overrides any PO set on the project.
- `project` (`string`, optional): FreeAgent URL of the project being credited, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `reference` (`string`, optional): Credit note reference. When omitted, FreeAgent uses the next reference in the invoice sequence.
- `show_project_name` (`boolean`, optional): true to show the project name in the Other Information section.

Example input: `{"contact":"<contact>","dated_on":"<dated_on>","payment_terms_in_days":30}`

### `freeagent_credit_note_mark_as_draft`

Mark Credit Note as Draft · Write

Move a FreeAgent credit note back to Draft status so it can be edited.
Returns the updated credit note.
Use freeagent_credit_note_mark_as_sent to issue it again.
Requires a credit_note_id from freeagent_credit_notes_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `credit_note_id` (`string`, required): Numeric ID of the credit note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/credit_notes/123 the ID is 123). Get it from freeagent_credit_notes_list.

Example input: `{"credit_note_id":"<credit_note_id>"}`

### `freeagent_credit_note_mark_as_sent`

Mark Credit Note as Sent · Write

Mark a FreeAgent credit note as sent without emailing it.
Returns the updated credit note.
Use freeagent_credit_note_send_email to email it instead.
Requires a credit_note_id from freeagent_credit_notes_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `credit_note_id` (`string`, required): Numeric ID of the credit note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/credit_notes/123 the ID is 123). Get it from freeagent_credit_notes_list.

Example input: `{"credit_note_id":"<credit_note_id>"}`

### `freeagent_credit_note_reconciliation_create`

Create Credit Note Reconciliation · Write

Apply a FreeAgent credit note against an invoice for a given amount.
Returns the new credit note reconciliation.
Use this to settle part or all of an invoice with a credit note.
Requires an invoice URL from freeagent_invoices_list and a credit note URL from freeagent_credit_notes_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `credit_note` (`string`, required): FreeAgent URL of the credit note being applied, as returned in the `url` field by freeagent_credit_notes_list. Example: https://api.freeagent.com/v2/credit_notes/123.
- `gross_value` (`number`, required): Amount to reconcile between the credit note and the invoice. Example: 150.
- `invoice` (`string`, required): FreeAgent URL of the invoice the credit is applied to, as returned in the `url` field by freeagent_invoices_list. Example: https://api.freeagent.com/v2/invoices/123.
- `currency` (`string`, optional): Three-letter ISO 4217 currency code of the reconciliation. Example: GBP.
- `dated_on` (`string`, optional): Date the reconciliation takes effect in YYYY-MM-DD format. Example: 2026-01-31.
- `exchange_rate` (`number`, optional): Rate for converting the amount into the company's native currency, for foreign-currency documents. Example: 1.17.

Example input: `{"credit_note":"<credit_note>","gross_value":150,"invoice":"<invoice>"}`

### `freeagent_credit_note_send_email`

Email Credit Note · Write

Email a FreeAgent credit note to its recipient, using a saved template or a custom subject and body.
Returns the credit note on success.
Use freeagent_credit_note_mark_as_sent to mark it sent without emailing.
Requires a credit_note_id from freeagent_credit_notes_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `credit_note_id` (`string`, required): Numeric ID of the credit note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/credit_notes/123 the ID is 123). Get it from freeagent_credit_notes_list.
- `attachments` (`array`, optional): Extra files to attach, each up to 5 MB, with file_name, content_type (MIME type) and data (base64-encoded file content). Example: [{"file_name": "timesheet.csv", "content_type": "text/csv", "data": "MTIvMDkvMjAyMiw1LjAw"}]
- `body` (`string`, optional): Email body text.
- `email_to_sender` (`boolean`, optional): true (default) to also send a copy to the sender.
- `from` (`string`, optional): Sender, which must belong to a registered FreeAgent user, as 'Name <email>' or a bare email. Use freeagent_email_addresses_list for valid senders. Example: Jane Doe <jane@yourco.example>.
- `subject` (`string`, optional): Email subject line.
- `to` (`string`, optional): Recipient email address(es). Example: client@acme.example.
- `use_template` (`boolean`, optional): true to send using the company's saved email template; the other email fields are then not needed.

Example input: `{"credit_note_id":"<credit_note_id>"}`

### `freeagent_credit_note_update`

Update Credit Note · Write

Update a FreeAgent credit note's details or line items.
Returns the updated credit note.
Only the fields you pass are changed. To change status use freeagent_credit_note_mark_as_sent or freeagent_credit_note_mark_as_draft.
Requires a credit_note_id from freeagent_credit_notes_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `credit_note_id` (`string`, required): Numeric ID of the credit note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/credit_notes/123 the ID is 123). Get it from freeagent_credit_notes_list.
- `bank_account` (`string`, optional): FreeAgent URL of the bank account shown for remittance on the credit note, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123.
- `client_contact_name` (`string`, optional): Name to show on the credit note instead of the contact's display name.
- `comments` (`string`, optional): Additional text shown at the bottom of the credit note.
- `contact` (`string`, optional): FreeAgent URL of the contact being credited, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `credit_note_items` (`array`, optional): Line items for the credit note. Each item needs a description; most also take an item_type (Hours, Products, Services, Expenses, Discount, Credit and similar — leave it out for 'No Unit'), a quantity and a unit price, and optionally a sales_tax_rate (or sales_tax_status EXEMPT) and an income category URL. When updating, include the item's id to change it, or id plus "_destroy": 1 to remove it. Example: [{"item_type": "Services", "quantity": 1, "price": 150, "description": "Refund for cancelled session"}]
- `currency` (`string`, optional): Three-letter ISO 4217 currency code. Defaults to the company's native currency when omitted. Example: GBP.
- `dated_on` (`string`, optional): Credit note date in YYYY-MM-DD format. Example: 2026-01-31.
- `discount_percent` (`number`, optional): Discount percentage applied across the whole credit note.
- `due_on` (`string`, optional): Due date of the credit note in YYYY-MM-DD format. Example: 2026-02-28.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge, EC VAT MOSS. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01; Reverse Charge is only valid on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`, `EC VAT MOSS`.
- `omit_header` (`boolean`, optional): true to leave your logo and company address off the credit note.
- `payment_terms` (`string`, optional): Custom payment terms text that overrides the normal terms and due date.
- `payment_terms_in_days` (`integer`, optional): Payment terms in days. Set 0 to show 'Due on Receipt'. Example: 30.
- `place_of_supply` (`string`, optional): EU member country name for the place of supply. Required when ec_status is EC VAT MOSS. Example: France.
- `po_reference` (`string`, optional): Purchase order reference that overrides any PO set on the project.
- `project` (`string`, optional): FreeAgent URL of the project being credited, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `reference` (`string`, optional): Credit note reference. When omitted, FreeAgent uses the next reference in the invoice sequence.
- `show_project_name` (`boolean`, optional): true to show the project name in the Other Information section.

Example input: `{"credit_note_id":"<credit_note_id>"}`

### `freeagent_estimate_convert_to_invoice`

Convert Estimate to Invoice · Write

Convert a FreeAgent estimate into a new invoice.
Returns the estimate with status Invoiced and an invoice field holding the new invoice's URL.
Use this once a client accepts an estimate; use freeagent_invoice_create for an invoice without an estimate.
Requires an estimate_id from freeagent_estimates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_estimate_create`

Create Estimate · Write

Create a FreeAgent estimate, quote or proposal for a contact, with line items.
Returns the new estimate, including its url.
Use freeagent_estimate_send_email to send it and freeagent_estimate_convert_to_invoice once it is accepted.
Requires a contact URL from freeagent_contacts_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact` (`string`, required): FreeAgent URL of the contact the estimate is for, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `currency` (`string`, required): Three-letter ISO 4217 currency code of the estimate. Example: GBP.
- `dated_on` (`string`, required): Estimate date in YYYY-MM-DD format. Example: 2026-01-31.
- `estimate_type` (`string`, required): Kind of document: Estimate, Quote or Proposal. One of: `Estimate`, `Quote`, `Proposal`.
- `reference` (`string`, required): Free-text estimate reference.
- `status` (`string`, required): Initial status of the estimate. Use Draft for a new estimate, then use the mark_as_* tools to change it. One of: `Draft`, `Sent`, `Open`, `Approved`, `Rejected`, `Invoiced`.
- `client_contact_name` (`string`, optional): Name to show on the estimate instead of the contact's display name.
- `discount_percent` (`number`, optional): Discount percentage applied across the whole estimate. Example: 5.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge, EC VAT MOSS. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01; Reverse Charge is only valid on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`, `EC VAT MOSS`.
- `estimate_items` (`array`, optional): Line items for the estimate. Each item needs an item_type (Hours, Days, Weeks, Months, Years, -no unit-, Products, Services, Training, Expenses, Comments, Bills, Discount or Credit), a price and a description, plus an optional quantity, sales_tax_rate and income category URL. Example: [{"item_type": "Days", "quantity": 5, "price": 600, "description": "Design sprint", "sales_tax_rate": 20}]
- `include_sales_tax_on_total_value` (`boolean`, optional): true (default) to include sales tax in the totals shown on the estimate.
- `notes` (`string`, optional): Additional text shown on the estimate.
- `place_of_supply` (`string`, optional): EU member country name for the place of supply. Required when ec_status is EC VAT MOSS. Example: France.
- `project` (`string`, optional): FreeAgent URL of the project being estimated, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.

Example input: `{"contact":"<contact>","currency":"<currency>","dated_on":"<dated_on>","estimate_type":"Estimate","reference":"<reference>","status":"Draft"}`

### `freeagent_estimate_duplicate`

Duplicate Estimate · Write

Copy a FreeAgent estimate into a new draft dated today with the next reference.
Returns the new draft estimate.
Use this to re-quote similar work; use freeagent_estimate_create to start from scratch.
Requires an estimate_id from freeagent_estimates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_estimate_mark_as_approved`

Mark Estimate as Approved · Write

Mark a FreeAgent estimate as approved by the client.
Returns the updated estimate.
Use freeagent_estimate_convert_to_invoice to bill it.
Requires an estimate_id from freeagent_estimates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_estimate_mark_as_draft`

Mark Estimate as Draft · Write

Move a FreeAgent estimate back to Draft status so it can be edited.
Returns the updated estimate.
Use freeagent_estimate_mark_as_sent to issue it again.
Requires an estimate_id from freeagent_estimates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_estimate_mark_as_rejected`

Mark Estimate as Rejected · Write

Mark a FreeAgent estimate as rejected by the client.
Returns the updated estimate.
Use freeagent_estimate_delete to remove it entirely instead.
Requires an estimate_id from freeagent_estimates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_estimate_mark_as_sent`

Mark Estimate as Sent · Write

Mark a FreeAgent estimate as sent without emailing it.
Returns the updated estimate.
Use freeagent_estimate_send_email to email it instead.
Requires an estimate_id from freeagent_estimates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_estimate_send_email`

Email Estimate · Write

Email a FreeAgent estimate to its recipient, using a saved template or a custom subject and body.
Returns the estimate on success.
Use freeagent_estimate_mark_as_sent to mark it sent without emailing.
Requires an estimate_id from freeagent_estimates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.
- `attachments` (`array`, optional): Extra files to attach, each up to 5 MB, with file_name, content_type (MIME type) and data (base64-encoded file content). Example: [{"file_name": "timesheet.csv", "content_type": "text/csv", "data": "MTIvMDkvMjAyMiw1LjAw"}]
- `body` (`string`, optional): Email body text.
- `email_to_sender` (`boolean`, optional): true (default) to also send a copy to the sender.
- `from` (`string`, optional): Sender, which must belong to a registered FreeAgent user, as 'Name <email>' or a bare email. Use freeagent_email_addresses_list for valid senders. Example: Jane Doe <jane@yourco.example>.
- `subject` (`string`, optional): Email subject line.
- `to` (`string`, optional): Recipient email address(es). Example: client@acme.example.
- `use_template` (`boolean`, optional): true to send using the company's saved email template; the other email fields are then not needed.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_estimate_update`

Update Estimate · Write

Update a FreeAgent estimate's details or line items.
Returns the updated estimate.
Only the fields you pass are changed. To change status use the freeagent_estimate_mark_as_* tools.
Requires an estimate_id from freeagent_estimates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.
- `client_contact_name` (`string`, optional): Name to show on the estimate instead of the contact's display name.
- `contact` (`string`, optional): FreeAgent URL of the contact the estimate is for, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `currency` (`string`, optional): Three-letter ISO 4217 currency code of the estimate. Example: GBP.
- `dated_on` (`string`, optional): Estimate date in YYYY-MM-DD format. Example: 2026-01-31.
- `discount_percent` (`number`, optional): Discount percentage applied across the whole estimate. Example: 5.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge, EC VAT MOSS. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01; Reverse Charge is only valid on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`, `EC VAT MOSS`.
- `estimate_items` (`array`, optional): Line items for the estimate. Each item needs an item_type (Hours, Days, Weeks, Months, Years, -no unit-, Products, Services, Training, Expenses, Comments, Bills, Discount or Credit), a price and a description, plus an optional quantity, sales_tax_rate and income category URL. Example: [{"item_type": "Days", "quantity": 5, "price": 600, "description": "Design sprint", "sales_tax_rate": 20}]
- `estimate_type` (`string`, optional): Kind of document: Estimate, Quote or Proposal. One of: `Estimate`, `Quote`, `Proposal`.
- `include_sales_tax_on_total_value` (`boolean`, optional): true (default) to include sales tax in the totals shown on the estimate.
- `notes` (`string`, optional): Additional text shown on the estimate.
- `place_of_supply` (`string`, optional): EU member country name for the place of supply. Required when ec_status is EC VAT MOSS. Example: France.
- `project` (`string`, optional): FreeAgent URL of the project being estimated, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `reference` (`string`, optional): Free-text estimate reference.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_expense_create`

Create Expense · Write

Record an expense claim or mileage claim for a FreeAgent user.
Returns the new expense, including its url.
Use this for costs a user paid personally; use freeagent_bill_create for supplier bills.
Requires a user URL from freeagent_users_list and a category URL from freeagent_categories_list (or Mileage).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `category` (`string`, required): Accounting category URL from freeagent_categories_list (e.g. https://api.freeagent.com/v2/categories/285), or the literal value Mileage for a mileage claim.
- `dated_on` (`string`, required): Expense date in YYYY-MM-DD format. Example: 2026-01-31.
- `description` (`string`, required): Free-text description of the expense.
- `user` (`string`, required): FreeAgent URL of the user claiming the expense, as returned in the `url` field by freeagent_users_list or freeagent_user_me_get. Example: https://api.freeagent.com/v2/users/123.
- `currency` (`string`, optional): Three-letter ISO 4217 currency code. Defaults to the company's native currency when omitted. Example: GBP.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`.
- `engine_size` (`string`, optional): Mileage claims with a Car or Motorcycle: engine size band, as listed by freeagent_expense_mileage_settings_get.
- `engine_type` (`string`, optional): Mileage claims with a Car or Motorcycle: engine type such as Petrol (default), Diesel, LPG or an Electric option. Valid electric options are listed by freeagent_expense_mileage_settings_get.
- `gross_value` (`number`, optional): Total amount in the expense currency. Negative for money paid to the claimant (a cost), positive for a refund due from the claimant. Required unless category is Mileage. Example: -45.5.
- `have_vat_receipt` (`boolean`, optional): Mileage claims only: true if you hold a VAT receipt for the fuel.
- `manual_sales_tax_amount` (`number`, optional): Exact sales tax amount in the company's native currency. When set, sales_tax_rate is ignored. Example: 16.67.
- `mileage` (`number`, optional): Mileage claims only: distance travelled, in the company's mileage units. Example: 42.
- `project` (`string`, optional): FreeAgent URL of the project to rebill the expense to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `rebill_factor` (`number`, optional): Markup percentage or fixed price for the rebill. Required when rebill_type is markup or price. Example: 10.
- `rebill_type` (`string`, optional): How to rebill this cost to the project's client: cost (at cost), markup (cost plus rebill_factor percent) or price (fixed rebill_factor amount). One of: `cost`, `markup`, `price`.
- `receipt_reference` (`string`, optional): Receipt reference.
- `reclaim_mileage` (`integer`, optional): Mileage claims only: 0 (default) to rebill without reclaiming, or 1 to reclaim at the approved mileage allowance (AMAP) rate.
- `recurring` (`string`, optional): How often this item recurs. One of: Weekly, Two Weekly, Four Weekly, Two Monthly, Quarterly, Biannually, Annually, 2-Yearly. One of: `Weekly`, `Two Weekly`, `Four Weekly`, `Two Monthly`, `Quarterly`, `Biannually`, `Annually`, `2-Yearly`.
- `recurring_end_date` (`string`, optional): Date the expense stops recurring in YYYY-MM-DD format. Example: 2026-12-31.
- `sales_tax_rate` (`number`, optional): Sales tax (VAT) rate as a percentage, one of the company's standard rates. Example: 20.
- `sales_tax_status` (`string`, optional): Mark the item as TAXABLE, EXEMPT or OUT_OF_SCOPE for sales tax instead of giving a rate. One of: `TAXABLE`, `EXEMPT`, `OUT_OF_SCOPE`.
- `vehicle_type` (`string`, optional): Mileage claims only: Car, Motorcycle or Bicycle. One of: `Car`, `Motorcycle`, `Bicycle`.

Example input: `{"category":"<category>","dated_on":"<dated_on>","description":"<description>","user":"<user>"}`

### `freeagent_expense_update`

Update Expense · Write

Update a FreeAgent expense claim.
Returns the updated expense.
Only the fields you pass are changed.
Requires an expense_id from freeagent_expenses_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `expense_id` (`string`, required): Numeric ID of the expense: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/expenses/123 the ID is 123). Get it from freeagent_expenses_list.
- `category` (`string`, optional): Accounting category URL from freeagent_categories_list (e.g. https://api.freeagent.com/v2/categories/285), or the literal value Mileage for a mileage claim.
- `currency` (`string`, optional): Three-letter ISO 4217 currency code. Defaults to the company's native currency when omitted. Example: GBP.
- `dated_on` (`string`, optional): Expense date in YYYY-MM-DD format. Example: 2026-01-31.
- `description` (`string`, optional): Free-text description of the expense.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`.
- `engine_size` (`string`, optional): Mileage claims with a Car or Motorcycle: engine size band, as listed by freeagent_expense_mileage_settings_get.
- `engine_type` (`string`, optional): Mileage claims with a Car or Motorcycle: engine type such as Petrol (default), Diesel, LPG or an Electric option. Valid electric options are listed by freeagent_expense_mileage_settings_get.
- `gross_value` (`number`, optional): Total amount in the expense currency. Negative for money paid to the claimant (a cost), positive for a refund due from the claimant. Required unless category is Mileage. Example: -45.5.
- `have_vat_receipt` (`boolean`, optional): Mileage claims only: true if you hold a VAT receipt for the fuel.
- `manual_sales_tax_amount` (`number`, optional): Exact sales tax amount in the company's native currency. When set, sales_tax_rate is ignored. Example: 16.67.
- `mileage` (`number`, optional): Mileage claims only: distance travelled, in the company's mileage units. Example: 42.
- `project` (`string`, optional): FreeAgent URL of the project to rebill the expense to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `rebill_factor` (`number`, optional): Markup percentage or fixed price for the rebill. Required when rebill_type is markup or price. Example: 10.
- `rebill_type` (`string`, optional): How to rebill this cost to the project's client: cost (at cost), markup (cost plus rebill_factor percent) or price (fixed rebill_factor amount). One of: `cost`, `markup`, `price`.
- `receipt_reference` (`string`, optional): Receipt reference.
- `reclaim_mileage` (`integer`, optional): Mileage claims only: 0 (default) to rebill without reclaiming, or 1 to reclaim at the approved mileage allowance (AMAP) rate.
- `recurring` (`string`, optional): How often this item recurs. One of: Weekly, Two Weekly, Four Weekly, Two Monthly, Quarterly, Biannually, Annually, 2-Yearly. One of: `Weekly`, `Two Weekly`, `Four Weekly`, `Two Monthly`, `Quarterly`, `Biannually`, `Annually`, `2-Yearly`.
- `recurring_end_date` (`string`, optional): Date the expense stops recurring in YYYY-MM-DD format. Example: 2026-12-31.
- `sales_tax_rate` (`number`, optional): Sales tax (VAT) rate as a percentage, one of the company's standard rates. Example: 20.
- `sales_tax_status` (`string`, optional): Mark the item as TAXABLE, EXEMPT or OUT_OF_SCOPE for sales tax instead of giving a rate. One of: `TAXABLE`, `EXEMPT`, `OUT_OF_SCOPE`.
- `user` (`string`, optional): FreeAgent URL of the user claiming the expense, as returned in the `url` field by freeagent_users_list or freeagent_user_me_get. Example: https://api.freeagent.com/v2/users/123.
- `vehicle_type` (`string`, optional): Mileage claims only: Car, Motorcycle or Bicycle. One of: `Car`, `Motorcycle`, `Bicycle`.

Example input: `{"expense_id":"<expense_id>"}`

### `freeagent_invoice_create`

Create Invoice · Write

Create a draft sales invoice in FreeAgent for a contact, with line items or billed project time, expenses and estimates.
Returns the new invoice in Draft status, including its url.
Use freeagent_invoice_mark_as_sent or freeagent_invoice_send_email afterwards to issue it.
Requires a contact URL from freeagent_contacts_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact` (`string`, required): FreeAgent URL of the contact being invoiced, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `dated_on` (`string`, required): Invoice date in YYYY-MM-DD format. Example: 2026-01-31.
- `payment_terms_in_days` (`integer`, required): Payment terms in days, used to compute the due date. Set 0 to show 'Due on Receipt'. Example: 30.
- `always_show_bic_and_iban` (`boolean`, optional): true to always show the bank account's BIC and IBAN on the invoice.
- `bank_account` (`string`, optional): FreeAgent URL of the bank account shown for remittance on the invoice, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123.
- `client_contact_name` (`string`, optional): Name to show on the invoice instead of the contact's display name.
- `comments` (`string`, optional): Additional text shown at the bottom of the invoice.
- `currency` (`string`, optional): Three-letter ISO 4217 currency code. Defaults to the company's native currency when omitted. Example: GBP.
- `discount_percent` (`number`, optional): Discount percentage applied across the whole invoice. Example: 10.
- `due_on` (`string`, optional): Due date of the invoice in YYYY-MM-DD format. Example: 2026-02-28.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge, EC VAT MOSS. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01; Reverse Charge is only valid on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`, `EC VAT MOSS`.
- `include_estimates` (`string`, optional): Add the project's open or approved estimates: billed_grouped_by_single_estimate (one line) or billed_grouped_by_estimate (one line each). One of: `billed_grouped_by_single_estimate`, `billed_grouped_by_estimate`.
- `include_expenses` (`string`, optional): Add the project's unbilled expenses, bills and bank entries: billed_grouped_by_single_expense (one line) or billed_grouped_by_expense (one line each). One of: `billed_grouped_by_single_expense`, `billed_grouped_by_expense`.
- `include_timeslips` (`string`, optional): Add the project's unbilled timeslips to the invoice: billed_grouped_by_single_timeslip (one line), billed_grouped_by_timeslip (one line each), billed_grouped_by_timeslip_task or billed_grouped_by_timeslip_date. One of: `billed_grouped_by_single_timeslip`, `billed_grouped_by_timeslip`, `billed_grouped_by_timeslip_task`, `billed_grouped_by_timeslip_date`.
- `invoice_items` (`array`, optional): Line items for the invoice. Each item needs a description; most also take an item_type (Hours, Days, Products, Services, Expenses, Comment, Discount, Stock and similar — leave it out for 'No Unit'), a quantity and a unit price, and optionally a sales_tax_rate (or sales_tax_status EXEMPT) and an income category URL. When updating, include the item's id to change it, or id plus "_destroy": 1 to remove it. Example: [{"item_type": "Hours", "quantity": 8, "price": 75, "description": "Consulting", "sales_tax_rate": 20}]
- `omit_header` (`boolean`, optional): true to leave your logo and company address off the invoice.
- `payment_methods` (`object`, optional): Online payment options to enable on the invoice, as true/false flags: paypal, stripe, gocardless_preauth, gocardless_instant_bank_pay, tyl. Options that are not set up for the company or invoice currency are ignored. Example: {"stripe": true}
- `payment_terms` (`string`, optional): Custom payment terms text that overrides the normal payment terms and due date.
- `place_of_supply` (`string`, optional): EU member country name for the place of supply. Required when ec_status is EC VAT MOSS. Example: France.
- `po_reference` (`string`, optional): Purchase order reference that overrides any PO set on the project.
- `project` (`string`, optional): FreeAgent URL of the project being invoiced, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `reference` (`string`, optional): Invoice reference. When omitted, FreeAgent uses the next reference in the invoice sequence.
- `send_new_invoice_emails` (`boolean`, optional): true to email the invoice automatically using your default template (templates must exist).
- `send_reminder_emails` (`boolean`, optional): true to email payment reminders if the invoice goes unpaid (templates must exist).
- `send_thank_you_emails` (`boolean`, optional): true to email a thank-you once the invoice is paid (templates must exist).
- `show_project_name` (`boolean`, optional): true to show the project name in the invoice's Other Information section.

Example input: `{"contact":"<contact>","dated_on":"<dated_on>","payment_terms_in_days":30}`

### `freeagent_invoice_duplicate`

Duplicate Invoice · Write

Copy a FreeAgent invoice into a new draft dated today with the next invoice reference.
Returns the new draft invoice.
Use this to re-issue a similar invoice; use freeagent_invoice_create to start from scratch.
Requires an invoice_id from freeagent_invoices_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_invoice_mark_as_cancelled`

Mark Invoice as Cancelled · Write

Write off a sent FreeAgent invoice as unpaid by marking it cancelled. The invoice must be sent and past its due date.
Returns the updated invoice.
Use freeagent_invoice_delete to remove a draft instead.
Requires an invoice_id from freeagent_invoices_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_invoice_mark_as_draft`

Mark Invoice as Draft · Write

Move a FreeAgent invoice back to Draft status so it can be edited.
Returns the updated invoice.
Use freeagent_invoice_mark_as_sent to issue it again.
Requires an invoice_id from freeagent_invoices_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_invoice_mark_as_scheduled`

Mark Invoice as Scheduled · Write

Schedule a FreeAgent invoice to be emailed automatically.
Returns the updated invoice.
Use freeagent_invoice_send_email to email it now.
Requires an invoice_id from freeagent_invoices_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_invoice_mark_as_sent`

Mark Invoice as Sent · Write

Mark a FreeAgent invoice as sent without emailing it, or re-open a cancelled invoice.
Returns the updated invoice.
Use freeagent_invoice_send_email to email it instead.
Requires an invoice_id from freeagent_invoices_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_invoice_send_email`

Email Invoice · Write

Email a FreeAgent invoice to its recipient, using a saved template or a custom subject and body.
Returns the invoice on success.
Use this to deliver an invoice by email; use freeagent_invoice_mark_as_sent to mark it sent without emailing.
Requires an invoice_id from freeagent_invoices_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.
- `attach_expense_receipts` (`boolean`, optional): true to attach receipts of rebilled expenses to the email.
- `attachments` (`array`, optional): Extra files to attach, each up to 5 MB, with file_name, content_type (MIME type) and data (base64-encoded file content). Example: [{"file_name": "timesheet.csv", "content_type": "text/csv", "data": "MTIvMDkvMjAyMiw1LjAw"}]
- `body` (`string`, optional): Email body text.
- `email_to_sender` (`boolean`, optional): true (default) to also send a copy to the sender.
- `from` (`string`, optional): Sender, which must belong to a registered FreeAgent user, as 'Name <email>' or a bare email. Use freeagent_email_addresses_list for valid senders. Example: Jane Doe <jane@yourco.example>.
- `subject` (`string`, optional): Email subject line.
- `to` (`string`, optional): Recipient email address(es). Example: client@acme.example.
- `use_template` (`boolean`, optional): true to send using the company's saved email template; the other email fields are then not needed.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_invoice_update`

Update Invoice · Write

Update a FreeAgent invoice's details or line items.
Returns the updated invoice.
Only the fields you pass are changed. To change status use freeagent_invoice_mark_as_sent, freeagent_invoice_mark_as_draft or freeagent_invoice_mark_as_cancelled.
Requires an invoice_id from freeagent_invoices_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.
- `always_show_bic_and_iban` (`boolean`, optional): true to always show the bank account's BIC and IBAN on the invoice.
- `bank_account` (`string`, optional): FreeAgent URL of the bank account shown for remittance on the invoice, as returned in the `url` field by freeagent_bank_accounts_list. Example: https://api.freeagent.com/v2/bank_accounts/123.
- `client_contact_name` (`string`, optional): Name to show on the invoice instead of the contact's display name.
- `comments` (`string`, optional): Additional text shown at the bottom of the invoice.
- `contact` (`string`, optional): FreeAgent URL of the contact being invoiced, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `currency` (`string`, optional): Three-letter ISO 4217 currency code. Defaults to the company's native currency when omitted. Example: GBP.
- `dated_on` (`string`, optional): Invoice date in YYYY-MM-DD format. Example: 2026-01-31.
- `discount_percent` (`number`, optional): Discount percentage applied across the whole invoice. Example: 10.
- `due_on` (`string`, optional): Due date of the invoice in YYYY-MM-DD format. Example: 2026-02-28.
- `ec_status` (`string`, optional): VAT status for EC/VAT reporting. One of: UK/Non-EC, EC Goods, EC Services, Reverse Charge, EC VAT MOSS. EC Goods and EC Services are not valid for Great Britain companies on or after 2021-01-01; Reverse Charge is only valid on or after 2021-01-01. One of: `UK/Non-EC`, `EC Goods`, `EC Services`, `Reverse Charge`, `EC VAT MOSS`.
- `invoice_items` (`array`, optional): Line items for the invoice. Each item needs a description; most also take an item_type (Hours, Days, Products, Services, Expenses, Comment, Discount, Stock and similar — leave it out for 'No Unit'), a quantity and a unit price, and optionally a sales_tax_rate (or sales_tax_status EXEMPT) and an income category URL. When updating, include the item's id to change it, or id plus "_destroy": 1 to remove it. Example: [{"item_type": "Hours", "quantity": 8, "price": 75, "description": "Consulting", "sales_tax_rate": 20}]
- `omit_header` (`boolean`, optional): true to leave your logo and company address off the invoice.
- `payment_methods` (`object`, optional): Online payment options to enable on the invoice, as true/false flags: paypal, stripe, gocardless_preauth, gocardless_instant_bank_pay, tyl. Options that are not set up for the company or invoice currency are ignored. Example: {"stripe": true}
- `payment_terms` (`string`, optional): Custom payment terms text that overrides the normal payment terms and due date.
- `payment_terms_in_days` (`integer`, optional): Payment terms in days, used to compute the due date. Set 0 to show 'Due on Receipt'. Example: 30.
- `place_of_supply` (`string`, optional): EU member country name for the place of supply. Required when ec_status is EC VAT MOSS. Example: France.
- `po_reference` (`string`, optional): Purchase order reference that overrides any PO set on the project.
- `project` (`string`, optional): FreeAgent URL of the project being invoiced, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `reference` (`string`, optional): Invoice reference. When omitted, FreeAgent uses the next reference in the invoice sequence.
- `send_new_invoice_emails` (`boolean`, optional): true to email the invoice automatically using your default template (templates must exist).
- `send_reminder_emails` (`boolean`, optional): true to email payment reminders if the invoice goes unpaid (templates must exist).
- `send_thank_you_emails` (`boolean`, optional): true to email a thank-you once the invoice is paid (templates must exist).
- `show_project_name` (`boolean`, optional): true to show the project name in the invoice's Other Information section.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_journal_set_create`

Create Journal Set · Write

Post a balanced set of manual journal entries to the FreeAgent accounts.
Returns the new journal set with its entries.
Use this for accounting corrections; the entries' debit values must sum to zero.
Requires category URLs from freeagent_categories_list. Needs the Tax, Accounting & Users permission.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `dated_on` (`string`, required): Date of the journal entries in YYYY-MM-DD format. Example: 2026-01-31.
- `description` (`string`, required): Free-text description of the journal set.
- `journal_entries` (`array`, required): Journal entries, which must balance (debit values sum to zero). Each entry needs a category URL and a debit_value (negative for a credit), plus a description; some categories also need a user, stock_item (with stock_altering_quantity) or capital_asset_type URL. Example: [{"category": "https://api.freeagent.com/v2/categories/285", "debit_value": 100, "description": "Accrual"}, {"category": "https://api.freeagent.com/v2/categories/796", "debit_value": -100, "description": "Accrual"}]
- `tag` (`string`, optional): Free-text tag to identify journal sets created by your integration. Tagged sets can only be edited through the API.

Example input: `{"dated_on":"<dated_on>","description":"<description>","journal_entries":[{"category":"https://api.freeagent.com/v2/categories/285","debit_value":100,"description":"Accrual"},{"category":"https://api.freeagent.com/v2/categories/796","debit_value":-100,"description":"Accrual"}]}`

### `freeagent_note_create`

Create Note · Write

Add a note to a FreeAgent contact or project.
Returns the new note.
Give exactly one of contact or project.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `note` (`string`, required): Text of the note.
- `contact` (`string`, optional): FreeAgent URL of the contact to attach the note to, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123. Give this or project.
- `project` (`string`, optional): FreeAgent URL of the project to attach the note to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123. Give this or contact.

Example input: `{"note":"<note>"}`

### `freeagent_note_update`

Update Note · Write

Replace the text of a FreeAgent note.
Returns the updated note.
Requires a note_id from freeagent_notes_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `note` (`string`, required): Text of the note.
- `note_id` (`string`, required): Numeric ID of the note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/notes/123 the ID is 123). Get it from freeagent_notes_list.

Example input: `{"note":"<note>","note_id":"<note_id>"}`

### `freeagent_price_list_item_create`

Create Price List Item · Write

Add a product or service with a standard price to the FreeAgent price list.
Returns the new price list item.
Use freeagent_price_list_item_update to change an existing item.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `code` (`string`, required): Unique name or code used to pick the item when adding it to an invoice or estimate.
- `description` (`string`, required): Free-text description of the item.
- `item_type` (`string`, required): Unit type: Hours, Days, Weeks, Months, Years, Products, Services, Training, Expenses, Comment, Bills, Discount, Credit, VAT, Stock. One of: `Hours`, `Days`, `Weeks`, `Months`, `Years`, `Products`, `Services`, `Training`, `Expenses`, `Comment`, `Bills`, `Discount`, `Credit`, `VAT`, `Stock`.
- `price` (`number`, required): Unit price. Example: 75.
- `quantity` (`number`, required): Default quantity. Example: 1.
- `category` (`string`, optional): FreeAgent URL of the income category for the item, as returned in the `url` field by freeagent_categories_list. Example: https://api.freeagent.com/v2/categories/123.
- `sales_tax_rate` (`number`, optional): Universal and US accounts only: sales tax rate as a percentage. Example: 8.
- `stock_item` (`string`, optional): FreeAgent URL of the stock item, when item_type is Stock, as returned in the `url` field by freeagent_stock_items_list. Example: https://api.freeagent.com/v2/stock_items/123.
- `vat_status` (`string`, optional): UK accounts only: VAT status out_of_scope (default), reduced, standard or zero. One of: `out_of_scope`, `reduced`, `standard`, `zero`.

Example input: `{"code":"<code>","description":"<description>","item_type":"Hours","price":75,"quantity":1}`

### `freeagent_price_list_item_update`

Update Price List Item · Write

Update a FreeAgent price list item's code, description, price or tax settings.
Returns the updated item.
Only the fields you pass are changed.
Requires a price_list_item_id from freeagent_price_list_items_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `price_list_item_id` (`string`, required): Numeric ID of the price list item: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/price_list_items/123 the ID is 123). Get it from freeagent_price_list_items_list.
- `category` (`string`, optional): FreeAgent URL of the income category for the item, as returned in the `url` field by freeagent_categories_list. Example: https://api.freeagent.com/v2/categories/123.
- `code` (`string`, optional): Unique name or code used to pick the item when adding it to an invoice or estimate.
- `description` (`string`, optional): Free-text description of the item.
- `item_type` (`string`, optional): Unit type: Hours, Days, Weeks, Months, Years, Products, Services, Training, Expenses, Comment, Bills, Discount, Credit, VAT, Stock. One of: `Hours`, `Days`, `Weeks`, `Months`, `Years`, `Products`, `Services`, `Training`, `Expenses`, `Comment`, `Bills`, `Discount`, `Credit`, `VAT`, `Stock`.
- `price` (`number`, optional): Unit price. Example: 75.
- `quantity` (`number`, optional): Default quantity. Example: 1.
- `sales_tax_rate` (`number`, optional): Universal and US accounts only: sales tax rate as a percentage. Example: 8.
- `stock_item` (`string`, optional): FreeAgent URL of the stock item, when item_type is Stock, as returned in the `url` field by freeagent_stock_items_list. Example: https://api.freeagent.com/v2/stock_items/123.
- `vat_status` (`string`, optional): UK accounts only: VAT status out_of_scope (default), reduced, standard or zero. One of: `out_of_scope`, `reduced`, `standard`, `zero`.

Example input: `{"price_list_item_id":"<price_list_item_id>"}`

### `freeagent_project_create`

Create Project · Write

Create a FreeAgent project for a client contact, with budget and billing settings.
Returns the new project, including its url.
Use freeagent_task_create to add tasks and freeagent_timeslip_create to log time on it.
Requires a contact URL from freeagent_contacts_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `budget_units` (`string`, required): Unit of the budget: Hours, Days or Monetary (ex-VAT). One of: `Hours`, `Days`, `Monetary`.
- `contact` (`string`, required): FreeAgent URL of the client contact to bill for the project, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `currency` (`string`, required): Three-letter ISO 4217 currency code for the project. Example: GBP.
- `name` (`string`, required): Project name.
- `status` (`string`, required): Project status: Active, Completed, Cancelled or Hidden. One of: `Active`, `Completed`, `Cancelled`, `Hidden`.
- `billing_period` (`string`, optional): Unit for normal_billing_rate: hour or day. One of: `hour`, `day`.
- `budget` (`number`, optional): Project budget in budget_units; 0 if there is no budget. Example: 120.
- `contract_po_reference` (`string`, optional): Contract or purchase order reference.
- `ends_on` (`string`, optional): Project end date in YYYY-MM-DD format. Example: 2026-06-30.
- `hours_per_day` (`number`, optional): Working hours per day, as a decimal (1:30 is 1.5). Example: 7.5.
- `include_unbilled_time_in_profitability` (`boolean`, optional): true to include unbilled time in the project's profitability report.
- `is_ir35` (`boolean`, optional): true if the project falls under IR35 as de facto employment.
- `normal_billing_rate` (`number`, optional): Normal billing rate per billing_period. Example: 85.
- `starts_on` (`string`, optional): Project start date in YYYY-MM-DD format. Example: 2026-01-31.
- `uses_project_invoice_sequence` (`boolean`, optional): true to number this project's invoices with a project-level sequence.

Example input: `{"budget_units":"Hours","contact":"<contact>","currency":"<currency>","name":"<name>","status":"Active"}`

### `freeagent_project_update`

Update Project · Write

Update a FreeAgent project's name, status, budget, billing settings or dates.
Returns the updated project.
Only the fields you pass are changed.
Requires a project_id from freeagent_projects_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): Numeric ID of the project: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/projects/123 the ID is 123). Get it from freeagent_projects_list.
- `billing_period` (`string`, optional): Unit for normal_billing_rate: hour or day. One of: `hour`, `day`.
- `budget` (`number`, optional): Project budget in budget_units; 0 if there is no budget. Example: 120.
- `budget_units` (`string`, optional): Unit of the budget: Hours, Days or Monetary (ex-VAT). One of: `Hours`, `Days`, `Monetary`.
- `contact` (`string`, optional): FreeAgent URL of the client contact to bill for the project, as returned in the `url` field by freeagent_contacts_list. Example: https://api.freeagent.com/v2/contacts/123.
- `contract_po_reference` (`string`, optional): Contract or purchase order reference.
- `currency` (`string`, optional): Three-letter ISO 4217 currency code for the project. Example: GBP.
- `ends_on` (`string`, optional): Project end date in YYYY-MM-DD format. Example: 2026-06-30.
- `hours_per_day` (`number`, optional): Working hours per day, as a decimal (1:30 is 1.5). Example: 7.5.
- `include_unbilled_time_in_profitability` (`boolean`, optional): true to include unbilled time in the project's profitability report.
- `is_ir35` (`boolean`, optional): true if the project falls under IR35 as de facto employment.
- `name` (`string`, optional): Project name.
- `normal_billing_rate` (`number`, optional): Normal billing rate per billing_period. Example: 85.
- `starts_on` (`string`, optional): Project start date in YYYY-MM-DD format. Example: 2026-01-31.
- `status` (`string`, optional): Project status: Active, Completed, Cancelled or Hidden. One of: `Active`, `Completed`, `Cancelled`, `Hidden`.
- `uses_project_invoice_sequence` (`boolean`, optional): true to number this project's invoices with a project-level sequence.

Example input: `{"project_id":"<project_id>"}`

### `freeagent_task_create`

Create Task · Write

Create a task under a FreeAgent project.
Returns the new task, including its url.
Use freeagent_timeslip_create to log time against it.
Requires a project URL from freeagent_projects_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Task name.
- `project` (`string`, required): FreeAgent URL of the project to add the task to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `billing_period` (`string`, optional): Unit for billing_rate: hour or day. One of: `hour`, `day`.
- `billing_rate` (`number`, optional): Billing rate per billing_period. Example: 85.
- `is_billable` (`boolean`, optional): true if the client is charged for this task.
- `status` (`string`, optional): Task status: Active, Completed or Hidden. One of: `Active`, `Completed`, `Hidden`.

Example input: `{"name":"<name>","project":"<project>"}`

### `freeagent_task_update`

Update Task · Write

Update a FreeAgent task's name, billing settings or status.
Returns the updated task.
Only the fields you pass are changed.
Requires a task_id from freeagent_tasks_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`string`, required): Numeric ID of the task: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/tasks/123 the ID is 123). Get it from freeagent_tasks_list.
- `billing_period` (`string`, optional): Unit for billing_rate: hour or day. One of: `hour`, `day`.
- `billing_rate` (`number`, optional): Billing rate per billing_period. Example: 85.
- `is_billable` (`boolean`, optional): true if the client is charged for this task.
- `name` (`string`, optional): Task name.
- `status` (`string`, optional): Task status: Active, Completed or Hidden. One of: `Active`, `Completed`, `Hidden`.

Example input: `{"task_id":"<task_id>"}`

### `freeagent_timeslip_create`

Create Timeslip · Write

Log time worked by a user on a FreeAgent project task.
Returns the new timeslip.
Use freeagent_timeslip_timer_start to time work live instead.
Requires task, user and project URLs from freeagent_tasks_list, freeagent_users_list and freeagent_projects_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `dated_on` (`string`, required): Date the work was done in YYYY-MM-DD format. Example: 2026-01-31.
- `hours` (`number`, required): Hours worked, as a decimal (1:30 is 1.5). Example: 2.5.
- `project` (`string`, required): FreeAgent URL of the project the task belongs to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `task` (`string`, required): FreeAgent URL of the task the time was spent on, as returned in the `url` field by freeagent_tasks_list. Example: https://api.freeagent.com/v2/tasks/123.
- `user` (`string`, required): FreeAgent URL of the user who did the work, as returned in the `url` field by freeagent_users_list or freeagent_user_me_get. Example: https://api.freeagent.com/v2/users/123.
- `comment` (`string`, optional): Free-text comment about the work.

Example input: `{"dated_on":"<dated_on>","hours":2.5,"project":"<project>","task":"<task>","user":"<user>"}`

### `freeagent_timeslip_timer_start`

Start Timeslip Timer · Write

Start a running timer on a FreeAgent timeslip, adding elapsed time to its hours.
Returns the timeslip with its timer details.
Use freeagent_timeslip_timer_stop to stop it.
Requires a timeslip_id from freeagent_timeslips_list or freeagent_timeslip_create.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `timeslip_id` (`string`, required): Numeric ID of the timeslip: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/timeslips/123 the ID is 123). Get it from freeagent_timeslips_list.

Example input: `{"timeslip_id":"<timeslip_id>"}`

### `freeagent_timeslip_update`

Update Timeslip · Write

Update a FreeAgent timeslip's task, project, date, hours or comment.
Returns the updated timeslip.
Only the fields you pass are changed.
Requires a timeslip_id from freeagent_timeslips_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `timeslip_id` (`string`, required): Numeric ID of the timeslip: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/timeslips/123 the ID is 123). Get it from freeagent_timeslips_list.
- `comment` (`string`, optional): Free-text comment about the work.
- `dated_on` (`string`, optional): Date the work was done in YYYY-MM-DD format. Example: 2026-01-31.
- `hours` (`number`, optional): Hours worked, as a decimal (1:30 is 1.5). Example: 2.5.
- `project` (`string`, optional): FreeAgent URL of the project the task belongs to, as returned in the `url` field by freeagent_projects_list. Example: https://api.freeagent.com/v2/projects/123.
- `task` (`string`, optional): FreeAgent URL of the task the time was spent on, as returned in the `url` field by freeagent_tasks_list. Example: https://api.freeagent.com/v2/tasks/123.
- `user` (`string`, optional): FreeAgent URL of the user who did the work, as returned in the `url` field by freeagent_users_list or freeagent_user_me_get. Example: https://api.freeagent.com/v2/users/123.

Example input: `{"timeslip_id":"<timeslip_id>"}`

### `freeagent_bank_transaction_delete`

Delete Bank Transaction · Destructive

Permanently delete a FreeAgent bank transaction. Only transactions that are fully unexplained (have no explanations) can be deleted.
Returns an empty response on success.
Use freeagent_bank_transaction_explanation_delete to remove an explanation instead.
Requires a bank_transaction_id from freeagent_bank_transactions_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `bank_transaction_id` (`string`, required): Numeric ID of the bank transaction: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bank_transactions/123 the ID is 123). Get it from freeagent_bank_transactions_list.

Example input: `{"bank_transaction_id":"<bank_transaction_id>"}`

### `freeagent_bank_transaction_explanation_delete`

Delete Bank Transaction Explanation · Destructive

Delete a FreeAgent bank transaction explanation, leaving the transaction unexplained.
Returns an empty response on success.
Requires a bank_transaction_explanation_id from freeagent_bank_transaction_explanations_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `bank_transaction_explanation_id` (`string`, required): Numeric ID of the bank transaction explanation: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bank_transaction_explanations/123 the ID is 123). Get it from freeagent_bank_transaction_explanations_list.

Example input: `{"bank_transaction_explanation_id":"<bank_transaction_explanation_id>"}`

### `freeagent_bill_delete`

Delete Bill · Destructive

Permanently delete a FreeAgent bill.
Returns an empty response on success.
Requires a bill_id from freeagent_bills_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `bill_id` (`string`, required): Numeric ID of the bill: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/bills/123 the ID is 123). Get it from freeagent_bills_list.

Example input: `{"bill_id":"<bill_id>"}`

### `freeagent_contact_delete`

Delete Contact · Destructive

Permanently delete a FreeAgent contact.
Returns an empty response on success.
Use freeagent_contact_update with status Hidden to hide a contact instead of deleting it.
Requires a contact_id from freeagent_contacts_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): Numeric ID of the contact: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/contacts/123 the ID is 123). Get it from freeagent_contacts_list.

Example input: `{"contact_id":"<contact_id>"}`

### `freeagent_credit_note_delete`

Delete Credit Note · Destructive

Permanently delete a FreeAgent credit note.
Returns an empty response on success.
Requires a credit_note_id from freeagent_credit_notes_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `credit_note_id` (`string`, required): Numeric ID of the credit note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/credit_notes/123 the ID is 123). Get it from freeagent_credit_notes_list.

Example input: `{"credit_note_id":"<credit_note_id>"}`

### `freeagent_estimate_delete`

Delete Estimate · Destructive

Permanently delete a FreeAgent estimate.
Returns an empty response on success.
Use freeagent_estimate_mark_as_rejected to record a declined estimate instead.
Requires an estimate_id from freeagent_estimates_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `estimate_id` (`string`, required): Numeric ID of the estimate: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/estimates/123 the ID is 123). Get it from freeagent_estimates_list.

Example input: `{"estimate_id":"<estimate_id>"}`

### `freeagent_expense_delete`

Delete Expense · Destructive

Permanently delete a FreeAgent expense.
Returns an empty response on success.
Requires an expense_id from freeagent_expenses_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `expense_id` (`string`, required): Numeric ID of the expense: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/expenses/123 the ID is 123). Get it from freeagent_expenses_list.

Example input: `{"expense_id":"<expense_id>"}`

### `freeagent_invoice_delete`

Delete Invoice · Destructive

Permanently delete a FreeAgent invoice.
Returns an empty response on success.
Use freeagent_invoice_mark_as_cancelled to write off a sent invoice instead.
Requires an invoice_id from freeagent_invoices_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`string`, required): Numeric ID of the invoice: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/invoices/123 the ID is 123). Get it from freeagent_invoices_list.

Example input: `{"invoice_id":"<invoice_id>"}`

### `freeagent_note_delete`

Delete Note · Destructive

Permanently delete a FreeAgent note.
Returns an empty response on success.
Requires a note_id from freeagent_notes_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `note_id` (`string`, required): Numeric ID of the note: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/notes/123 the ID is 123). Get it from freeagent_notes_list.

Example input: `{"note_id":"<note_id>"}`

### `freeagent_price_list_item_delete`

Delete Price List Item · Destructive

Permanently delete a FreeAgent price list item.
Returns an empty response on success.
Requires a price_list_item_id from freeagent_price_list_items_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `price_list_item_id` (`string`, required): Numeric ID of the price list item: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/price_list_items/123 the ID is 123). Get it from freeagent_price_list_items_list.

Example input: `{"price_list_item_id":"<price_list_item_id>"}`

### `freeagent_project_delete`

Delete Project · Destructive

Permanently delete a FreeAgent project. Only projects whose is_deletable is true can be deleted.
Returns an empty response on success.
Use freeagent_project_update with status Completed or Hidden to close a project instead.
Requires a project_id from freeagent_projects_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`string`, required): Numeric ID of the project: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/projects/123 the ID is 123). Get it from freeagent_projects_list.

Example input: `{"project_id":"<project_id>"}`

### `freeagent_task_delete`

Delete Task · Destructive

Permanently delete a FreeAgent task. Only tasks whose is_deletable is true can be deleted.
Returns an empty response on success.
Use freeagent_task_update with status Completed or Hidden to retire a task instead.
Requires a task_id from freeagent_tasks_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`string`, required): Numeric ID of the task: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/tasks/123 the ID is 123). Get it from freeagent_tasks_list.

Example input: `{"task_id":"<task_id>"}`

### `freeagent_timeslip_delete`

Delete Timeslip · Destructive

Permanently delete a FreeAgent timeslip.
Returns an empty response on success.
Requires a timeslip_id from freeagent_timeslips_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `timeslip_id` (`string`, required): Numeric ID of the timeslip: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/timeslips/123 the ID is 123). Get it from freeagent_timeslips_list.

Example input: `{"timeslip_id":"<timeslip_id>"}`

### `freeagent_timeslip_timer_stop`

Stop Timeslip Timer · Destructive

Stop the running timer on a FreeAgent timeslip; the timeslip itself is kept.
Returns the timeslip with its updated hours.
Use freeagent_timeslips_list with view running to find running timers.
Requires a timeslip_id from freeagent_timeslips_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `timeslip_id` (`string`, required): Numeric ID of the timeslip: the number at the end of its FreeAgent `url` (for https://api.freeagent.com/v2/timeslips/123 the ID is 123). Get it from freeagent_timeslips_list.

Example input: `{"timeslip_id":"<timeslip_id>"}`

## Related

Other Accounting & Finance connectors ([all 37](/agentkit/connectors/?category=accounting-finance)):

- [QuickBooks](/agentkit/connectors/quickbooks/): Scalekit connector, OAuth, 117 tools
- [Xero](/agentkit/connectors/xero/): Scalekit connector, OAuth, 94 tools
- [Stripe](/agentkit/connectors/stripe/): Scalekit connector, Access token, 178 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
