> **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 FreshBooks

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

**Authentication:** OAuth 2.0
**Categories:** Accounting & Finance
**Tools:** 72: 37 read, 25 write, 10 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own FreshBooks app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=FRESHBOOKS)

## 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 FreshBooks connection

   In **AgentKit > Connections**, create a FreshBooks 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

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

   Then enter the app's Client ID and Client Secret on the FreshBooks 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 = 'freshbooks'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize FreshBooks:', 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: 'freshbooks_get_current_user',
     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 = "freshbooks"
   identifier = "user_123"

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

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="freshbooks_get_current_user",
       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: 'freshbooks_get_accounts_aging_report',
  toolInput: {
    account_id: '<account_id>',
  },
  connector: 'freshbooks',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="freshbooks_get_accounts_aging_report",
    tool_input={
        "account_id": "<account_id>",
    },
    connection_name="freshbooks",
    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.

### `freshbooks_get_accounts_aging_report`

Get Accounts Aging Report · Read-only

Run the Accounts Aging report, which shows overdue invoice amounts per client in 0-30, 31-60, 61-90 and 91+ day buckets.
Returns totals per age bucket and a list of clients with their overdue amounts.
Use get_accounts_aging_report to see who owes you and for how long.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `end_date` (`string`, optional): Last day of the report period, in YYYY-MM-DD format.
- `start_date` (`string`, optional): First day of the report period, in YYYY-MM-DD format.

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

### `freshbooks_get_client`

Get Client · Read-only

Get one client by id.
Returns the client with contact details, billing and shipping address, currency, language, notes and visibility state.
Use get_client for full details of a known client. Use list_clients to search.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `client_id` (`integer`, required): Numeric ID of the client (also called customerid or userid), such as 238951.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: outstanding_balance, credit_balance, draft_balance, overdue_balance, grand_total_balance, last_activity, late_reminders, late_fee. Example: ["outstanding_balance", "credit_balance"].

Example input: `{"account_id":"<account_id>","client_id":1}`

### `freshbooks_get_current_user`

Get Current User · Read-only

Get the authenticated FreshBooks user and the businesses they can act on.
Returns the user profile plus business_memberships, each with the business id, business_uuid, name, account_id and the user's role.
Use this first to find the account_id, business_id or business_uuid that every other FreshBooks tool needs.

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

Inputs: none.

Example input: `{}`

### `freshbooks_get_estimate`

Get Estimate · Read-only

Get one estimate by id.
Returns the estimate with amounts, status, dates, client details and, when requested through include, its lines.
Use get_estimate for a known estimate. Use list_estimates to search.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `estimate_id` (`integer`, required): Numeric ID of the estimate, such as 2201278.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: lines, contacts, owner, audit_logs, comments, presentation, project, invoices, system. Example: ["lines", "contacts"].

Example input: `{"account_id":"<account_id>","estimate_id":1}`

### `freshbooks_get_expense`

Get Expense · Read-only

Get one expense by id.
Returns the expense with amount, date, vendor, category, client, project, notes and tax details.
Use get_expense for a known expense. Use list_expenses to search.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `expense_id` (`integer`, required): Numeric ID of the expense (expenseid), such as 1569533.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: category, attachment, expense_profile, project, account. Example: ["category", "attachment"].

Example input: `{"account_id":"<account_id>","expense_id":1}`

### `freshbooks_get_expense_category`

Get Expense Category · Read-only

Get one expense category by id.
Returns the category with its name, parent category id and editable flag.
Use get_expense_category for a known category. Use list_expense_categories to browse.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `category_id` (`integer`, required): Numeric ID of the expense category, such as 93992990.

Example input: `{"account_id":"<account_id>","category_id":1}`

### `freshbooks_get_invoice`

Get Invoice · Read-only

Get one invoice by id.
Returns the invoice with amounts, status, dates, client details and, when requested through include, its lines.
Use get_invoice for a known invoice. Include 'lines' to see line items. Use list_invoices to search.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `invoice_id` (`integer`, required): Numeric ID of the invoice (invoiceid), such as 2214249.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: lines, contacts, owner, audit_logs, client_audits, comments, allowed_gateways, late_fee, late_reminders, presentation, project_total_amounts, latest_journal_entry, system. Example: ["lines", "contacts"].

Example input: `{"account_id":"<account_id>","invoice_id":1}`

### `freshbooks_get_invoice_details_report`

Get Invoice Details Report · Read-only

Run the Invoice Details report for a date range.
Returns invoices with number, client, status, dates, totals, tax, paid and outstanding amounts, plus a summary with totals.
Use get_invoice_details_report for invoice-level reporting. Use get_payments_collected_report for money received.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `currency_code` (`string`, optional): Report in this three-letter currency, such as USD.
- `date_type` (`string`, optional): Which date the range applies to: 'issue' for invoice issue date or 'paid' for paid date. One of: `issue`, `paid`.
- `end_date` (`string`, optional): Last day of the report period, in YYYY-MM-DD format.
- `start_date` (`string`, optional): First day of the report period, in YYYY-MM-DD format.

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

### `freshbooks_get_item`

Get Item · Read-only

Get one item by id.
Returns the item with name, description, unit_cost, quantity, sku and tax ids.
Use get_item for a known item. Use list_items to browse.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `item_id` (`integer`, required): Numeric ID of the item, such as 201225.

Example input: `{"account_id":"<account_id>","item_id":1}`

### `freshbooks_get_other_income`

Get Other Income · Read-only

Get one other income entry by id.
Returns the entry with amount, category, date, source, payment type and taxes.
Use get_other_income for a known entry. Use list_other_income to browse.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `income_id` (`integer`, required): Numeric ID of the other income entry (incomeid), such as 1234.

Example input: `{"account_id":"<account_id>","income_id":1}`

### `freshbooks_get_payment`

Get Payment · Read-only

Get one payment by id.
Returns the payment with amount, date, type, note, invoice id and client id.
Use get_payment for a known payment. Use list_payments to search.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `payment_id` (`integer`, required): Numeric ID of the payment, such as 10865326.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: client, invoice, credit_note, order, gateway. Example: ["client", "invoice"].

Example input: `{"account_id":"<account_id>","payment_id":1}`

### `freshbooks_get_payments_collected_report`

Get Payments Collected Report · Read-only

Run the Payments Collected report for a date range.
Returns payments collected in the period with amounts per payment method and totals.
Use get_payments_collected_report to see money received. Use get_invoice_details_report for invoices.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `end_date` (`string`, optional): Last day of the report period, in YYYY-MM-DD format.
- `start_date` (`string`, optional): First day of the report period, in YYYY-MM-DD format.

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

### `freshbooks_get_profit_and_loss_report`

Get Profit And Loss Report · Read-only

Run the Profit and Loss report for a date range.
Returns income, expense and net profit lines for the period, grouped by account.
Use get_profit_and_loss_report for profitability. Use get_trial_balance_report for account balances.
Requires business_uuid from freshbooks_get_current_user.

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

Inputs:

- `business_uuid` (`string`, required): FreshBooks business UUID, such as '046cc001-0002-e93e-1db1-1186b2983879'. Get it from freshbooks_get_current_user: business_memberships[].business.business_uuid.
- `end_date` (`string`, required): Last day of the report period, in YYYY-MM-DD format.
- `start_date` (`string`, required): First day of the report period, in YYYY-MM-DD format.
- `cash_based` (`boolean`, optional): true reports on a cash basis; false uses accrual.
- `currency_code` (`string`, optional): Report in this three-letter currency, such as USD.
- `fiscal_year_view` (`boolean`, optional): true bases the report on the fiscal year instead of the calendar year.
- `resolution` (`string`, optional): How often values are grouped, for example 'm' for monthly or '3m' for three-month intervals.
- `use_ledger_entries` (`boolean`, optional): Must be true: FreshBooks requires ledger entries for this report. Leave at the default. Default: `true`.

Example input: `{"business_uuid":"<business_uuid>","end_date":"<end_date>","start_date":"<start_date>"}`

### `freshbooks_get_project`

Get Project · Read-only

Get one project by id.
Returns the project with title, client, type, budget, due date, services and members.
Use get_project for a known project. Use list_projects to browse.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `project_id` (`integer`, required): Numeric ID of the project, such as 779597.

Example input: `{"business_id":1,"project_id":1}`

### `freshbooks_get_service`

Get Service · Read-only

Get one service by id.
Returns the service with its name, billable flag and visibility state.
Use get_service for a known service. Use list_services to browse.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `service_id` (`integer`, required): Numeric ID of the service, such as 4054453.

Example input: `{"business_id":1,"service_id":1}`

### `freshbooks_get_staff`

Get Staff Member · Read-only

Get one staff member by id.
Returns the staff member with name, email, rate, phone numbers and visibility state.
Use get_staff for a known staff id. Use list_staff to browse.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `staff_id` (`integer`, required): Numeric ID of the staff member, such as 2194844.

Example input: `{"account_id":"<account_id>","staff_id":1}`

### `freshbooks_get_tax`

Get Tax · Read-only

Get one tax definition by id.
Returns the tax with name, rate, tax number and compound flag.
Use get_tax for a known tax. Use list_taxes to browse.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `tax_id` (`integer`, required): Numeric ID of the tax, such as 58728.

Example input: `{"account_id":"<account_id>","tax_id":1}`

### `freshbooks_get_tax_summary_report`

Get Tax Summary Report · Read-only

Run the Tax Summary report for a date range.
Returns taxes billed or collected in the period, grouped by tax, with totals.
Use get_tax_summary_report for sales tax filing. Set cash_based true to report taxes collected rather than billed.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `cash_based` (`boolean`, optional): true reports taxes on a cash (collected) basis; false uses accrual (billed).
- `end_date` (`string`, optional): Last day of the report period, in YYYY-MM-DD format.
- `start_date` (`string`, optional): First day of the report period, in YYYY-MM-DD format.

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

### `freshbooks_get_team_member`

Get Team Member · Read-only

Get one team member by uuid.
Returns the team member with name, email, job title, role, active flag and identity_id.
Use get_team_member for a known uuid. Use list_team_members to browse.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `team_member_uuid` (`string`, required): UUID of the team member, such as '879dd802-2ec2-4683-9165-8ecdfcae4e2a'.

Example input: `{"business_id":1,"team_member_uuid":"<team_member_uuid>"}`

### `freshbooks_get_time_entry`

Get Time Entry · Read-only

Get one time entry by id.
Returns the time entry with note, duration, started_at, client, project and timer details.
Use get_time_entry for a known entry. Use list_time_entries to search.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `time_entry_id` (`integer`, required): Numeric ID of the time entry, such as 5095.

Example input: `{"business_id":1,"time_entry_id":1}`

### `freshbooks_get_trial_balance_report`

Get Trial Balance Report · Read-only

Run the Trial Balance report for a date range.
Returns debit and credit balances per ledger account with totals.
Use get_trial_balance_report to verify the books balance. Use get_profit_and_loss_report for profitability.
Requires business_uuid from freshbooks_get_current_user.

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

Inputs:

- `business_uuid` (`string`, required): FreshBooks business UUID, such as '046cc001-0002-e93e-1db1-1186b2983879'. Get it from freshbooks_get_current_user: business_memberships[].business.business_uuid.
- `end_date` (`string`, required): Last day of the report period, in YYYY-MM-DD format.
- `start_date` (`string`, required): First day of the report period, in YYYY-MM-DD format.
- `currency_code` (`string`, optional): Report in this three-letter currency, such as USD.
- `use_ledger_entries` (`boolean`, optional): Must be true: FreshBooks requires ledger entries for this report. Leave at the default. Default: `true`.

Example input: `{"business_uuid":"<business_uuid>","end_date":"<end_date>","start_date":"<start_date>"}`

### `freshbooks_list_clients`

List Clients · Read-only

List clients (customers) in a FreshBooks account, optionally filtered by email, name, organization or balance status.
Returns a page of clients with id, name, organization, email, phone numbers, billing address, currency and visibility state, plus page, pages, per_page and total.
Use list_clients to browse or search. Use get_client when you already have the client id.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `email` (`string`, optional): Return only the client whose email exactly matches this address.
- `email_like` (`string`, optional): Return clients whose email contains this text.
- `fname_like` (`string`, optional): Return clients whose first name contains this text.
- `has_outstanding` (`boolean`, optional): When true, return only clients with outstanding (unpaid) invoices.
- `has_overdue` (`boolean`, optional): When true, return only clients with overdue invoices.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: outstanding_balance, credit_balance, draft_balance, overdue_balance, grand_total_balance, last_activity, late_reminders, late_fee. Example: ["outstanding_balance", "credit_balance"].
- `lname_like` (`string`, optional): Return clients whose last name contains this text.
- `organization_like` (`string`, optional): Return clients whose organization name contains this text.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.
- `updated_min` (`string`, optional): Return clients updated on or after this date, in YYYY-MM-DD format.
- `user_like` (`string`, optional): Return clients whose first name, last name or organization contains this text. Use this for a general name search.
- `vis_state` (`integer`, optional): Visibility state to match: 0 for active, 1 for deleted, 2 for archived. Defaults to active clients. One of: `0`, `1`, `2`.

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

### `freshbooks_list_credit_notes`

List Credit Notes · Read-only

List credit notes issued to clients in a FreshBooks account.
Returns credit notes with creditid, credit_number, client id, amount, credit type, status and dates.
Use list_credit_notes to review credits. Use create_credit_note to issue one.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.

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

### `freshbooks_list_estimates`

List Estimates · Read-only

List estimates (quotes) in a FreshBooks account, optionally filtered by client, number, dates or amount.
Returns a page of estimates with id, estimate_number, client id, amount, status, dates and currency, plus page, pages, per_page and total.
Use list_estimates to browse or search. Use get_estimate for one estimate.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `amount_max` (`string`, optional): Return estimates below this amount.
- `amount_min` (`string`, optional): Return estimates of at least this amount.
- `clientid` (`integer`, optional): Return only estimates for the client with this numeric ID.
- `date_max` (`string`, optional): Return estimates created before this date, in YYYY-MM-DD format.
- `date_min` (`string`, optional): Return estimates created on or after this date, in YYYY-MM-DD format.
- `estimate_number` (`string`, optional): Return only the estimate with this exact number.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: lines, contacts, owner, audit_logs, comments, presentation, project, invoices, system. Example: ["lines", "contacts"].
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.

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

### `freshbooks_list_expense_categories`

List Expense Categories · Read-only

List expense categories available in a FreshBooks account.
Returns a page of categories with categoryid, name, parent category id and whether the category is editable, plus page, pages, per_page and total.
Use list_expense_categories to find the categoryid that create_expense needs.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: expense_usage_all_time, expense_usage_this_year. Example: ["expense_usage_all_time", "expense_usage_this_year"].
- `name` (`string`, optional): Return categories whose name contains this text.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `parentid` (`integer`, optional): Return categories under the parent category with this numeric ID.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.

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

### `freshbooks_list_expenses`

List Expenses · Read-only

List expenses in a FreshBooks account, optionally filtered by client, category, vendor, project or date range.
Returns a page of expenses with id, amount, date, vendor, category id, client id, project id, notes and tax details, plus page, pages, per_page and total.
Use list_expenses to review spending. Use get_expense for one expense.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `amount_max` (`string`, optional): Return expenses below this amount.
- `amount_min` (`string`, optional): Return expenses of at least this amount.
- `categoryid` (`integer`, optional): Return only expenses in the expense category with this numeric ID.
- `clientid` (`integer`, optional): Return only expenses billed to the client with this numeric ID.
- `date_max` (`string`, optional): Return expenses dated before this date, in YYYY-MM-DD format.
- `date_min` (`string`, optional): Return expenses dated on or after this date, in YYYY-MM-DD format.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: category, attachment, expense_profile, project, account. Example: ["category", "attachment"].
- `notes` (`string`, optional): Return expenses whose notes contain this text.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.
- `projectid` (`integer`, optional): Return only expenses for the project with this numeric ID.
- `staffid` (`integer`, optional): Return only expenses entered by the staff member with this numeric ID.
- `vendor` (`string`, optional): Return expenses whose vendor name contains this text.

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

### `freshbooks_list_invoices`

List Invoices · Read-only

List invoices in a FreshBooks account, optionally filtered by client, status, dates, number or payment state.
Returns a page of invoices with id, invoice_number, client id, amounts (total, paid, outstanding), status, dates and currency, plus page, pages, per_page and total.
Use list_invoices to browse or search. Use get_invoice for one invoice with its lines.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `currency_code` (`string`, optional): Return only invoices in this three-letter currency, such as USD.
- `customerid` (`integer`, optional): Return only invoices for the client with this numeric ID.
- `date_max` (`string`, optional): Return invoices created before this date, in YYYY-MM-DD format.
- `date_min` (`string`, optional): Return invoices created on or after this date, in YYYY-MM-DD format.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: lines, contacts, owner, audit_logs, client_audits, comments, allowed_gateways, late_fee, late_reminders, presentation, project_total_amounts, latest_journal_entry, system. Example: ["lines", "contacts"].
- `invoice_number` (`string`, optional): Return only the invoice with this exact invoice number.
- `invoice_number_like` (`string`, optional): Return invoices whose number contains this text.
- `outstanding` (`boolean`, optional): true returns only invoices with an outstanding balance; false returns invoices without one.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `paid` (`boolean`, optional): true returns only paid invoices; false returns only unpaid invoices.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.
- `updated_min` (`string`, optional): Return invoices updated on or after this date, in YYYY-MM-DD format.
- `v3_status` (`string`, optional): Return invoices with this status. One of: `created`, `draft`, `sent`, `viewed`, `failed`, `retry`, `success`, `autopaid`, `paid`, `partial`, `disputed`, `resolved`, `overdue`.

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

### `freshbooks_list_items`

List Items · Read-only

List billable items (products and services with a unit price) in a FreshBooks account.
Returns a page of items with id, name, description, unit_cost, quantity, sku and tax ids, plus page, pages, per_page and total.
Use list_items to find items for invoice lines. Use get_item for one item.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `description` (`string`, optional): Return items whose description contains this text.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.
- `sku` (`string`, optional): Return only the item with this exact SKU.

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

### `freshbooks_list_other_income`

List Other Income · Read-only

List other income entries (income not tied to an invoice) in a FreshBooks account.
Returns other income entries with incomeid, amount, category, date, source, payment type and taxes.
Use list_other_income to review non-invoice income. Use create_other_income to record some.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `category_name` (`string`, optional): Return only entries in this category. One of: `advertising`, `in_person_sales`, `online_sales`, `rentals`, `other`.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.

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

### `freshbooks_list_payments`

List Payments · Read-only

List payments recorded against invoices, optionally filtered by client, invoice, date range or amount.
Returns a page of payments with id, invoice id, client id, amount, date, type and note, plus page, pages, per_page and total.
Use list_payments to review money received. Use get_payment for one payment.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `amount_max` (`string`, optional): Return payments below this amount.
- `amount_min` (`string`, optional): Return payments of at least this amount.
- `clientid` (`integer`, optional): Return only payments from the client with this numeric ID.
- `date_max` (`string`, optional): Return payments made before this date, in YYYY-MM-DD format.
- `date_min` (`string`, optional): Return payments made on or after this date, in YYYY-MM-DD format.
- `include` (`array`, optional): Related data to embed in each result. Allowed values: client, invoice, credit_note, order, gateway. Example: ["client", "invoice"].
- `invoiceid` (`integer`, optional): Return only payments applied to the invoice with this numeric ID.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.
- `type` (`string`, optional): Return only payments of this type, such as 'Check', 'Cash' or 'Credit'.

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

### `freshbooks_list_projects`

List Projects · Read-only

List projects for a FreshBooks business, optionally filtered by active or completed state.
Returns projects with id, title, client_id, project_type, budget, due_date, active and complete flags, plus meta with page, pages, per_page and total.
Use list_projects to browse projects. Use get_project for one project.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `active` (`boolean`, optional): true returns only active projects; false returns only inactive projects.
- `complete` (`boolean`, optional): true returns only completed projects; false returns only projects still in progress.
- `include_logged_duration` (`boolean`, optional): true adds the time logged on each project, in seconds.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.
- `skip_group` (`boolean`, optional): true omits the group (members) field from each project for a smaller response.
- `updated_since` (`string`, optional): Return projects updated at or after this UTC time, in ISO 8601 format.

Example input: `{"business_id":1}`

### `freshbooks_list_services`

List Services · Read-only

List the services (billable work types) defined for a FreshBooks business.
Returns services with id, name, billable flag and visibility state, plus meta with page, pages, per_page and total.
Use list_services to find the service_id for create_time_entry.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.

Example input: `{"business_id":1}`

### `freshbooks_list_staff`

List Staff · Read-only

List staff members in a FreshBooks account.
Returns a page of staff with id, name, email, rate, phone numbers and visibility state, plus page, pages, per_page and total.
Use list_staff to find the staffid that create_expense needs. Use list_team_members for the newer team roster.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `email_like` (`string`, optional): Return staff whose email contains this text.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.
- `user_like` (`string`, optional): Return staff whose first name, last name or organization contains this text.

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

### `freshbooks_list_tasks`

List Tasks · Read-only

List project tasks (billable task types with an hourly rate) in a FreshBooks account.
Returns a page of tasks with id, name, description, rate, billable flag and tax ids, plus page, pages, per_page and total.
Use list_tasks to see task types. Use create_task to add one.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `billable` (`boolean`, optional): true returns only billable tasks; false returns only non-billable tasks.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.

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

### `freshbooks_list_taxes`

List Taxes · Read-only

List tax definitions in a FreshBooks account.
Returns a page of taxes with id, name, rate (amount), tax number and compound flag, plus page, pages, per_page and total.
Use list_taxes to find the tax ids used by items. Use get_tax for one tax.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `compound` (`boolean`, optional): true returns only compound taxes; false returns only non-compound taxes.
- `name` (`string`, optional): Return taxes whose name contains this text.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.

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

### `freshbooks_list_team_members`

List Team Members · Read-only

List team members of a FreshBooks business.
Returns team members with uuid, name, email, job title, role, active flag and identity_id, plus meta with page, per_page and total.
Use list_team_members to find a teammate's identity_id for time entries.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `active` (`boolean`, optional): true returns only active team members.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.

Example input: `{"business_id":1}`

### `freshbooks_list_time_entries`

List Time Entries · Read-only

List time entries for a FreshBooks business, optionally filtered by time range, client, billing state or teammate.
Returns time_entries with id, note, duration in seconds, started_at, client_id, project_id, billable and billed flags, plus meta with page, pages, per_page and total.
Use list_time_entries to review logged time. Use create_time_entry to log new time.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `billable` (`boolean`, optional): true returns only entries that can be added to an invoice.
- `billed` (`boolean`, optional): true returns only entries already added to an invoice; false returns only unbilled entries.
- `client_id` (`integer`, optional): Return only entries for the client with this numeric ID.
- `identity_id` (`integer`, optional): Return only entries logged by the teammate with this numeric identity ID.
- `include_deleted` (`boolean`, optional): true also returns deleted entries.
- `include_unlogged` (`boolean`, optional): true also returns entries with a timer that is still running.
- `page` (`integer`, optional): Page number to return, starting at 1. Use with per_page to walk through all results.
- `per_page` (`integer`, optional): Number of results per page. FreshBooks silently caps this at 100; set it explicitly so you know how many results to expect.
- `started_from` (`string`, optional): Return entries that started at or after this UTC time, in ISO 8601 format.
- `started_to` (`string`, optional): Return entries that started at or before this UTC time, in ISO 8601 format.
- `team` (`boolean`, optional): true returns entries logged by every member of the business, not just the connected user.
- `updated_since` (`string`, optional): Return entries updated at or after this UTC time, in ISO 8601 format.

Example input: `{"business_id":1}`

### `freshbooks_create_client`

Create Client · Write

Create a client (customer) in a FreshBooks account.
Returns the created client with its new id, contact details and addresses.
Use create_client before creating an invoice for a new customer. Provide at least one of fname, lname, organization or email.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `bus_phone` (`string`, optional): Business phone number, for example '416-555-0100'.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the client, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `email` (`string`, optional): Client contact's email address, for example 'jane@example.com'. Invoices are emailed here.
- `fax` (`string`, optional): Fax number.
- `fname` (`string`, optional): Client contact's first name, for example 'Jane'.
- `home_phone` (`string`, optional): Home phone number.
- `language` (`string`, optional): Two-letter language code for the client's invoices, such as 'en' or 'fr'.
- `lname` (`string`, optional): Client contact's last name, for example 'Doe'.
- `mob_phone` (`string`, optional): Mobile phone number, for example '416-555-0101'.
- `note` (`string`, optional): Private note about the client, visible only to your team.
- `organization` (`string`, optional): Name of the client's company, for example 'Acme Inc.'.
- `p_city` (`string`, optional): Billing city.
- `p_code` (`string`, optional): Billing postal or ZIP code.
- `p_country` (`string`, optional): Billing country.
- `p_province` (`string`, optional): Billing province or state.
- `p_street` (`string`, optional): Billing street address, first line.
- `p_street2` (`string`, optional): Billing street address, second line.
- `s_city` (`string`, optional): Shipping city.
- `s_code` (`string`, optional): Shipping postal or ZIP code.
- `s_country` (`string`, optional): Shipping country.
- `s_province` (`string`, optional): Shipping province or state.
- `s_street` (`string`, optional): Shipping street address, first line.
- `s_street2` (`string`, optional): Shipping street address, second line.
- `vat_name` (`string`, optional): Name of the client's VAT or tax registration, for example 'VAT'.
- `vat_number` (`string`, optional): Client's VAT or tax registration number.

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

### `freshbooks_create_credit_note`

Create Credit Note · Write

Create a credit note for a client, for example a goodwill credit or a prepayment.
Returns the created credit note with its id, credit_number and status.
Use create_credit_note to give a client credit without an invoice payment.
Requires account_id and a client id from list_clients.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `clientid` (`integer`, required): Numeric ID of the client receiving the credit, such as 12345.
- `create_date` (`string`, optional): Date the credit note is created, in YYYY-MM-DD format.
- `credit_number` (`string`, optional): Number of the credit note, for example '0923403'.
- `credit_type` (`string`, optional): Type of credit: goodwill or prepayment. One of: `goodwill`, `prepayment`.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the credit note, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `lines` (`array`, optional): Line items for the credit note. Each line needs a name and a unit_cost with an amount (decimal string) and a currency code; it can also carry a description and up to two taxes (taxName1 with taxAmount1 as a percentage, taxName2 with taxAmount2). Example: [{"name": "Gift voucher", "unit_cost": {"amount": "150.00", "code": "USD"}}].
- `notes` (`string`, optional): Notes shown on the credit note.
- `terms` (`string`, optional): Terms shown on the credit note.

Example input: `{"account_id":"<account_id>","clientid":1}`

### `freshbooks_create_estimate`

Create Estimate · Write

Create an estimate (quote) for a client. The estimate starts in draft status.
Returns the created estimate with its id, estimate_number, amount and status.
Use create_estimate to quote work before invoicing. Use create_invoice with the estimate's id once the client accepts.
Requires account_id and a client id from list_clients or create_client.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `create_date` (`string`, required): Date the estimate is issued, in YYYY-MM-DD format.
- `customerid` (`integer`, required): Numeric ID of the client being quoted, such as 238951.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the estimate, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `discount_value` (`string`, optional): Estimate-level discount as a percentage, sent as a string such as '10'.
- `estimate_number` (`string`, optional): Estimate number shown to the client, for example '0000007'. When omitted FreshBooks increments the previous number.
- `language` (`string`, optional): Two-letter language code for the estimate, such as 'en'.
- `lines` (`array`, optional): Line items for the estimate. Each line needs a name, a qty and a unit_cost with an amount (decimal string) and a currency code; it can also carry a description and up to two taxes (taxName1 with taxAmount1 as a percentage, taxName2 with taxAmount2). When updating, send every line you want to keep because the list replaces the existing lines. Example: [{"name": "Photography Services", "qty": 1, "unit_cost": {"amount": "240.00", "code": "USD"}, "taxName1": "GST", "taxAmount1": 5}].
- `notes` (`string`, optional): Notes shown on the estimate.
- `po_number` (`string`, optional): Purchase order number from the client.
- `terms` (`string`, optional): Terms and conditions shown on the estimate.

Example input: `{"account_id":"<account_id>","create_date":"<create_date>","customerid":1}`

### `freshbooks_create_expense`

Create Expense · Write

Create an expense in a FreshBooks account.
Returns the created expense with its id, amount, date, category and vendor.
Use create_expense to log business spending. Use list_expense_categories to find a category id.
Requires account_id, a category id from list_expense_categories and a staff id from list_staff.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `amount` (`string`, required): Total amount of the expense. Send as a decimal string such as '100.00'.
- `categoryid` (`integer`, required): Numeric ID of the expense category, such as 93993004.
- `date` (`string`, required): Date of the expense, in YYYY-MM-DD format.
- `staffid` (`integer`, required): Numeric ID of the staff member who incurred the expense, such as 1.
- `clientid` (`integer`, optional): Numeric ID of the client this expense is billable to.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the expense, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `markup_percent` (`string`, optional): Markup percentage to apply when billing the expense to a client, as a string such as '10'.
- `notes` (`string`, optional): Notes about the expense.
- `projectid` (`integer`, optional): Numeric ID of the project this expense belongs to.
- `taxName1` (`string`, optional): Name of the first tax on the expense, for example 'HST'.
- `taxName2` (`string`, optional): Name of the second tax on the expense.
- `taxPercent1` (`string`, optional): Percentage rate of the first tax, as a string such as '13'.
- `taxPercent2` (`string`, optional): Percentage rate of the second tax, as a string such as '7'.
- `vendor` (`string`, optional): Name of the vendor the money was spent with, for example 'Staples'.

Example input: `{"account_id":"<account_id>","amount":"<amount>","categoryid":1,"date":"<date>","staffid":1}`

### `freshbooks_create_invoice`

Create Invoice · Write

Create an invoice for a client. The invoice starts in draft status.
Returns the created invoice with its id, invoice_number, amounts and status.
Use create_invoice to bill a client, then send_invoice_by_email or mark_invoice_as_sent so it leaves draft and is counted in reports.
Requires account_id and a client id from list_clients or create_client.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `create_date` (`string`, required): Date the invoice is issued, in YYYY-MM-DD format.
- `customerid` (`integer`, required): Numeric ID of the client being billed, such as 238951.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the invoice, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `deposit_amount` (`string`, optional): Fixed deposit amount to request, as a decimal string such as '100.00'. Use either this or deposit_percentage.
- `deposit_percentage` (`string`, optional): Percentage of the invoice total to request as a deposit, as a string such as '25'.
- `discount_description` (`string`, optional): Label for the discount, for example 'Loyalty discount'.
- `discount_value` (`string`, optional): Invoice-level discount as a percentage, sent as a string such as '10' for 10 percent.
- `due_offset_days` (`integer`, optional): Days after the issue date that payment is due, for example 30.
- `invoice_number` (`string`, optional): Invoice number shown to the client, for example '0000003'. When omitted FreshBooks increments the previous invoice number.
- `language` (`string`, optional): Two-letter language code for the invoice, such as 'en'.
- `lines` (`array`, optional): Line items for the invoice. Each line needs a name, a qty and a unit_cost with an amount (decimal string) and a currency code; it can also carry a description and up to two taxes (taxName1 with taxAmount1 as a percentage, taxName2 with taxAmount2). When updating, send every line you want to keep because the list replaces the existing lines. Example: [{"name": "Photography Services", "qty": 1, "unit_cost": {"amount": "240.00", "code": "USD"}, "taxName1": "GST", "taxAmount1": 5}].
- `notes` (`string`, optional): Notes shown on the invoice, for example bank transfer details.
- `po_number` (`string`, optional): Purchase order number from the client.
- `terms` (`string`, optional): Terms and conditions shown on the invoice.

Example input: `{"account_id":"<account_id>","create_date":"<create_date>","customerid":1}`

### `freshbooks_create_item`

Create Item · Write

Create a billable item in a FreshBooks account.
Returns the created item with its id, name and unit_cost.
Use create_item to save a product or service you invoice often.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `name` (`string`, required): Name of the item.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the item's unit cost, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `description` (`string`, optional): Description of the item.
- `inventory` (`string`, optional): Current inventory count, as a decimal string.
- `qty` (`string`, optional): Default quantity, as a decimal string such as '1'.
- `sku` (`string`, optional): Stock keeping unit used for inventory management.
- `tax1` (`integer`, optional): Numeric ID of the first default tax, from list_taxes.
- `tax2` (`integer`, optional): Numeric ID of the second default tax, from list_taxes.
- `unit_cost` (`string`, optional): Price of one unit of the item. Send as a decimal string such as '100.00'.

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

### `freshbooks_create_other_income`

Create Other Income · Write

Record an other income entry (income not tied to an invoice).
Returns the created entry with its incomeid, amount, category and date.
Use create_other_income for sales or income that did not go through an invoice.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `amount` (`string`, optional): Amount of the income. Send as a decimal string such as '100.00'.
- `category_name` (`string`, optional): Category of the income: advertising, in_person_sales, online_sales, rentals or other. One of: `advertising`, `in_person_sales`, `online_sales`, `rentals`, `other`.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the income, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `date` (`string`, optional): Date the income was received, in YYYY-MM-DD format.
- `note` (`string`, optional): Note about the income.
- `payment_type` (`string`, optional): Type of payment received, such as 'Check', 'Cash' or 'Visa'.
- `source` (`string`, optional): Where the income came from, such as 'Etsy' or 'Farmers Market'.
- `taxes` (`array`, optional): Taxes on the income. Each entry has a name and an amount (decimal string). Example: [{"name": "HST", "amount": "3"}].

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

### `freshbooks_create_payment`

Create Payment · Write

Record a payment against an invoice.
Returns the created payment with its id, amount, date and invoice id.
Use create_payment when a client has paid an invoice. Use list_payments to review existing payments.
Requires account_id and an invoice id from list_invoices.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `amount` (`string`, required): Amount paid. Send as a decimal string such as '100.00'.
- `date` (`string`, required): Date the payment was made, in YYYY-MM-DD format.
- `invoiceid` (`integer`, required): Numeric ID of the invoice being paid, such as 2214249.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the payment, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `note` (`string`, optional): Note about the payment, often a reference number.
- `send_client_notification` (`boolean`, optional): Set true to email the client a payment notification.
- `type` (`string`, optional): How the payment was made, for example 'Check', 'Cash', 'Credit', 'Bank Transfer' or 'Credit Card'.

Example input: `{"account_id":"<account_id>","amount":"<amount>","date":"<date>","invoiceid":1}`

### `freshbooks_create_project`

Create Project · Write

Create a project in a FreshBooks business.
Returns the created project with its id, title, client and type.
Use create_project to track time and billing for a client. Use create_time_entry to log time against it.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `title` (`string`, required): Title of the project.
- `budget` (`integer`, optional): Budget for the project, in seconds of logged time for hourly projects.
- `client_id` (`integer`, optional): Numeric ID of the client billed for the project.
- `description` (`string`, optional): Description of the project.
- `due_date` (`string`, optional): Projected completion date, in YYYY-MM-DD format.
- `fixed_price` (`string`, optional): Amount charged for a fixed_price project, as a decimal string such as '500.00'.
- `project_type` (`string`, optional): How the project is billed: fixed_price or hourly_rate. One of: `fixed_price`, `hourly_rate`.

Example input: `{"business_id":1,"title":"<title>"}`

### `freshbooks_create_service`

Create Service · Write

Create a service in a FreshBooks business.
Returns the created service with its id, name and billable flag.
Use create_service to define a new type of billable work, then log time against it with create_time_entry.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `name` (`string`, required): Name of the service, such as 'Research'.

Example input: `{"business_id":1,"name":"<name>"}`

### `freshbooks_create_task`

Create Task · Write

Create a task type in a FreshBooks account.
Returns the created task with its id, name and rate.
Use create_task to add a billable task type for projects.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `name` (`string`, required): Name of the task, such as 'Consulting'.
- `billable` (`boolean`, optional): Whether the task is billable to clients.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the task rate, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `description` (`string`, optional): Description of the task.
- `rate` (`string`, optional): Hourly rate for the task. Send as a decimal string such as '100.00'.

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

### `freshbooks_create_tax`

Create Tax · Write

Create a tax definition in a FreshBooks account.
Returns the created tax with its id, name and rate.
Use create_tax to add a tax you can apply to items.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `name` (`string`, required): Name of the tax, such as 'GST'.
- `amount` (`string`, optional): Tax rate as a percentage, sent as a decimal string such as '12' for 12 percent.
- `compound` (`boolean`, optional): true when the tax is calculated on top of other taxes.
- `number` (`string`, optional): Registration number that identifies your tax filing, such as a GST number.

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

### `freshbooks_create_time_entry`

Create Time Entry · Write

Log a time entry in a FreshBooks business.
Returns the created time entry with its id, duration, started_at and project.
Use create_time_entry to record work. Use update_time_entry to correct it later.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `started_at` (`string`, required): When the work started, as a UTC ISO 8601 timestamp.
- `billable` (`boolean`, optional): Whether the time can be added to an invoice.
- `client_id` (`integer`, optional): Numeric ID of the client to bill for this time.
- `duration` (`integer`, optional): Length of the work in seconds, for example 7200 for two hours.
- `identity_id` (`integer`, optional): Numeric identity ID of the teammate who did the work. Defaults to the connected user.
- `is_logged` (`boolean`, optional): true for completed time with a duration; false when creating a running timer.
- `note` (`string`, optional): Short description of the work done.
- `project_id` (`integer`, optional): Numeric ID of the project the time was spent on.
- `service_id` (`integer`, optional): Numeric ID of the service worked on, from list_services.

Example input: `{"business_id":1,"started_at":"<started_at>"}`

### `freshbooks_mark_invoice_as_sent`

Mark Invoice As Sent · Write

Mark a draft invoice as sent without emailing it, so it is recognized by reports and visible to the client.
Returns the updated invoice with its new status.
Use mark_invoice_as_sent when you delivered the invoice yourself. Use send_invoice_by_email to have FreshBooks email it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `invoice_id` (`integer`, required): Numeric ID of the invoice to mark as sent, such as 2214249.

Example input: `{"account_id":"<account_id>","invoice_id":1}`

### `freshbooks_send_invoice_by_email`

Send Invoice By Email · Write

Email an invoice to one or more recipients and mark it as sent.
Returns the updated invoice with its new status.
Use send_invoice_by_email to deliver an invoice to the client. Use mark_invoice_as_sent if you do not want FreshBooks to send an email.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `email_recipients` (`array`, required): Email addresses to send the invoice to. Example: ["jane@example.com"].
- `invoice_id` (`integer`, required): Numeric ID of the invoice to email, such as 2214249.
- `body` (`string`, optional): Custom email message body. Sent together with subject.
- `email_include_pdf` (`boolean`, optional): Set true to attach the invoice as a PDF to the email.
- `subject` (`string`, optional): Custom email subject. Sent together with body.

Example input: `{"account_id":"<account_id>","email_recipients":["jane@example.com"],"invoice_id":1}`

### `freshbooks_update_client`

Update Client · Write

Update fields on an existing client. Only the fields you provide change.
Returns the updated client.
Use update_client to change contact or address details. Use delete_client to remove a client.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `client_id` (`integer`, required): Numeric ID of the client to update, such as 238951.
- `bus_phone` (`string`, optional): Business phone number, for example '416-555-0100'.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the client, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `email` (`string`, optional): Client contact's email address, for example 'jane@example.com'. Invoices are emailed here.
- `fax` (`string`, optional): Fax number.
- `fname` (`string`, optional): Client contact's first name, for example 'Jane'.
- `home_phone` (`string`, optional): Home phone number.
- `language` (`string`, optional): Two-letter language code for the client's invoices, such as 'en' or 'fr'.
- `lname` (`string`, optional): Client contact's last name, for example 'Doe'.
- `mob_phone` (`string`, optional): Mobile phone number, for example '416-555-0101'.
- `note` (`string`, optional): Private note about the client, visible only to your team.
- `organization` (`string`, optional): Name of the client's company, for example 'Acme Inc.'.
- `p_city` (`string`, optional): Billing city.
- `p_code` (`string`, optional): Billing postal or ZIP code.
- `p_country` (`string`, optional): Billing country.
- `p_province` (`string`, optional): Billing province or state.
- `p_street` (`string`, optional): Billing street address, first line.
- `p_street2` (`string`, optional): Billing street address, second line.
- `s_city` (`string`, optional): Shipping city.
- `s_code` (`string`, optional): Shipping postal or ZIP code.
- `s_country` (`string`, optional): Shipping country.
- `s_province` (`string`, optional): Shipping province or state.
- `s_street` (`string`, optional): Shipping street address, first line.
- `s_street2` (`string`, optional): Shipping street address, second line.
- `vat_name` (`string`, optional): Name of the client's VAT or tax registration, for example 'VAT'.
- `vat_number` (`string`, optional): Client's VAT or tax registration number.
- `vis_state` (`integer`, optional): Set to 2 to archive the client or 0 to make an archived client active again. One of: `0`, `2`.

Example input: `{"account_id":"<account_id>","client_id":1}`

### `freshbooks_update_estimate`

Update Estimate · Write

Update fields on an existing estimate. Only the fields you provide change; if you send lines, they replace all existing lines.
Returns the updated estimate.
Use update_estimate to edit an estimate before it is accepted.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `estimate_id` (`integer`, required): Numeric ID of the estimate to update, such as 2201278.
- `create_date` (`string`, optional): New issue date, in YYYY-MM-DD format.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the estimate, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `discount_value` (`string`, optional): Estimate-level discount as a percentage, sent as a string such as '10'.
- `estimate_number` (`string`, optional): Estimate number shown to the client, for example '0000007'. When omitted FreshBooks increments the previous number.
- `language` (`string`, optional): Two-letter language code for the estimate, such as 'en'.
- `lines` (`array`, optional): Line items for the estimate. Each line needs a name, a qty and a unit_cost with an amount (decimal string) and a currency code; it can also carry a description and up to two taxes (taxName1 with taxAmount1 as a percentage, taxName2 with taxAmount2). When updating, send every line you want to keep because the list replaces the existing lines. Example: [{"name": "Photography Services", "qty": 1, "unit_cost": {"amount": "240.00", "code": "USD"}, "taxName1": "GST", "taxAmount1": 5}].
- `notes` (`string`, optional): Notes shown on the estimate.
- `po_number` (`string`, optional): Purchase order number from the client.
- `terms` (`string`, optional): Terms and conditions shown on the estimate.
- `vis_state` (`integer`, optional): Set to 2 to archive the estimate or 0 to restore an archived estimate. Use delete_estimate to delete. One of: `0`, `2`.

Example input: `{"account_id":"<account_id>","estimate_id":1}`

### `freshbooks_update_expense`

Update Expense · Write

Update fields on an existing expense. Only the fields you provide change.
Returns the updated expense.
Use update_expense to correct an expense. Use delete_expense to remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `expense_id` (`integer`, required): Numeric ID of the expense to update, such as 1569533.
- `amount` (`string`, optional): Corrected total amount of the expense. Send as a decimal string such as '100.00'.
- `categoryid` (`integer`, optional): New expense category ID.
- `clientid` (`integer`, optional): Numeric ID of the client this expense is billable to.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the expense, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `date` (`string`, optional): Corrected expense date, in YYYY-MM-DD format.
- `markup_percent` (`string`, optional): Markup percentage to apply when billing the expense to a client, as a string such as '10'.
- `notes` (`string`, optional): Notes about the expense.
- `projectid` (`integer`, optional): Numeric ID of the project this expense belongs to.
- `staffid` (`integer`, optional): Staff member ID.
- `taxName1` (`string`, optional): Name of the first tax on the expense, for example 'HST'.
- `taxName2` (`string`, optional): Name of the second tax on the expense.
- `taxPercent1` (`string`, optional): Percentage rate of the first tax, as a string such as '13'.
- `taxPercent2` (`string`, optional): Percentage rate of the second tax, as a string such as '7'.
- `vendor` (`string`, optional): Name of the vendor the money was spent with, for example 'Staples'.

Example input: `{"account_id":"<account_id>","expense_id":1}`

### `freshbooks_update_invoice`

Update Invoice · Write

Update fields on an existing invoice. Only the fields you provide change; if you send lines, they replace all existing lines.
Returns the updated invoice.
Use update_invoice to edit a draft or sent invoice. Use send_invoice_by_email to deliver it and delete_invoice to remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `invoice_id` (`integer`, required): Numeric ID of the invoice to update, such as 2214249.
- `create_date` (`string`, optional): New issue date, in YYYY-MM-DD format.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the invoice, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `customerid` (`integer`, optional): Move the invoice to the client with this numeric ID.
- `deposit_amount` (`string`, optional): Fixed deposit amount to request, as a decimal string such as '100.00'. Use either this or deposit_percentage.
- `deposit_percentage` (`string`, optional): Percentage of the invoice total to request as a deposit, as a string such as '25'.
- `discount_description` (`string`, optional): Label for the discount, for example 'Loyalty discount'.
- `discount_value` (`string`, optional): Invoice-level discount as a percentage, sent as a string such as '10' for 10 percent.
- `due_offset_days` (`integer`, optional): Days after the issue date that payment is due, for example 30.
- `invoice_number` (`string`, optional): Invoice number shown to the client, for example '0000003'. When omitted FreshBooks increments the previous invoice number.
- `language` (`string`, optional): Two-letter language code for the invoice, such as 'en'.
- `lines` (`array`, optional): Line items for the invoice. Each line needs a name, a qty and a unit_cost with an amount (decimal string) and a currency code; it can also carry a description and up to two taxes (taxName1 with taxAmount1 as a percentage, taxName2 with taxAmount2). When updating, send every line you want to keep because the list replaces the existing lines. Example: [{"name": "Photography Services", "qty": 1, "unit_cost": {"amount": "240.00", "code": "USD"}, "taxName1": "GST", "taxAmount1": 5}].
- `notes` (`string`, optional): Notes shown on the invoice, for example bank transfer details.
- `po_number` (`string`, optional): Purchase order number from the client.
- `terms` (`string`, optional): Terms and conditions shown on the invoice.
- `vis_state` (`integer`, optional): Set to 2 to archive the invoice or 0 to restore an archived invoice. Use delete_invoice to delete. One of: `0`, `2`.

Example input: `{"account_id":"<account_id>","invoice_id":1}`

### `freshbooks_update_item`

Update Item · Write

Update fields on an existing item. Only the fields you provide change.
Returns the updated item.
Use update_item to change an item's price or details. Use delete_item to remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `item_id` (`integer`, required): Numeric ID of the item to update, such as 201225.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the item's unit cost, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `description` (`string`, optional): Description of the item.
- `inventory` (`string`, optional): Current inventory count, as a decimal string.
- `name` (`string`, optional): New name of the item.
- `qty` (`string`, optional): Default quantity, as a decimal string such as '1'.
- `sku` (`string`, optional): Stock keeping unit used for inventory management.
- `tax1` (`integer`, optional): Numeric ID of the first default tax, from list_taxes.
- `tax2` (`integer`, optional): Numeric ID of the second default tax, from list_taxes.
- `unit_cost` (`string`, optional): Price of one unit of the item. Send as a decimal string such as '100.00'.

Example input: `{"account_id":"<account_id>","item_id":1}`

### `freshbooks_update_other_income`

Update Other Income · Write

Update fields on an existing other income entry. Only the fields you provide change.
Returns the updated entry.
Use update_other_income to correct an entry. Use delete_other_income to remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `income_id` (`integer`, required): Numeric ID of the other income entry to update, such as 1234.
- `amount` (`string`, optional): Amount of the income. Send as a decimal string such as '100.00'.
- `category_name` (`string`, optional): Category of the income: advertising, in_person_sales, online_sales, rentals or other. One of: `advertising`, `in_person_sales`, `online_sales`, `rentals`, `other`.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the income, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `date` (`string`, optional): Date the income was received, in YYYY-MM-DD format.
- `note` (`string`, optional): Note about the income.
- `payment_type` (`string`, optional): Type of payment received, such as 'Check', 'Cash' or 'Visa'.
- `source` (`string`, optional): Where the income came from, such as 'Etsy' or 'Farmers Market'.
- `taxes` (`array`, optional): Taxes on the income. Each entry has a name and an amount (decimal string). Example: [{"name": "HST", "amount": "3"}].

Example input: `{"account_id":"<account_id>","income_id":1}`

### `freshbooks_update_payment`

Update Payment · Write

Update fields on an existing payment. Only the fields you provide change.
Returns the updated payment.
Use update_payment to correct a payment's amount, date, type or note. Use delete_payment to remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `payment_id` (`integer`, required): Numeric ID of the payment to update, such as 10865326.
- `amount` (`string`, optional): Corrected amount paid. Send as a decimal string such as '100.00'.
- `currency_code` (`string`, optional): Three-letter ISO currency code for the payment, such as USD, CAD or EUR. Defaults to the account's primary currency when omitted.
- `date` (`string`, optional): Corrected payment date, in YYYY-MM-DD format.
- `invoiceid` (`integer`, optional): Apply the payment to the invoice with this numeric ID.
- `note` (`string`, optional): Note about the payment, often a reference number.
- `send_client_notification` (`boolean`, optional): Set true to email the client a payment notification.
- `type` (`string`, optional): How the payment was made, for example 'Check', 'Cash', 'Credit', 'Bank Transfer' or 'Credit Card'.

Example input: `{"account_id":"<account_id>","payment_id":1}`

### `freshbooks_update_project`

Update Project · Write

Update fields on an existing project. Only the fields you provide change.
Returns the updated project.
Use update_project to change a project's title, client, price or due date.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `project_id` (`integer`, required): Numeric ID of the project to update, such as 779597.
- `budget` (`integer`, optional): Budget for the project, in seconds of logged time for hourly projects.
- `client_id` (`integer`, optional): Numeric ID of the client billed for the project.
- `complete` (`boolean`, optional): Set true to mark the project completed.
- `description` (`string`, optional): Description of the project.
- `due_date` (`string`, optional): Projected completion date, in YYYY-MM-DD format.
- `fixed_price` (`string`, optional): Amount charged for a fixed_price project, as a decimal string such as '500.00'.
- `project_type` (`string`, optional): How the project is billed: fixed_price or hourly_rate. One of: `fixed_price`, `hourly_rate`.
- `title` (`string`, optional): New title of the project.

Example input: `{"business_id":1,"project_id":1}`

### `freshbooks_update_tax`

Update Tax · Write

Update fields on an existing tax definition. Only the fields you provide change.
Returns the updated tax.
Use update_tax to change a tax's name or rate. Use delete_tax to remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `tax_id` (`integer`, required): Numeric ID of the tax to update, such as 58728.
- `amount` (`string`, optional): Tax rate as a percentage, sent as a decimal string such as '12' for 12 percent.
- `compound` (`boolean`, optional): true when the tax is calculated on top of other taxes.
- `name` (`string`, optional): New name of the tax.
- `number` (`string`, optional): Registration number that identifies your tax filing, such as a GST number.

Example input: `{"account_id":"<account_id>","tax_id":1}`

### `freshbooks_update_time_entry`

Update Time Entry · Write

Update fields on an existing time entry. Only the fields you provide change.
Returns the updated time entry.
Use update_time_entry to correct logged time. Use delete_time_entry to remove it.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `time_entry_id` (`integer`, required): Numeric ID of the time entry to update, such as 5095.
- `billable` (`boolean`, optional): Whether the time can be added to an invoice.
- `client_id` (`integer`, optional): Numeric ID of the client to bill for this time.
- `duration` (`integer`, optional): Length of the work in seconds, for example 7200 for two hours.
- `identity_id` (`integer`, optional): Numeric identity ID of the teammate who did the work. Defaults to the connected user.
- `is_logged` (`boolean`, optional): true for completed time with a duration; false when creating a running timer.
- `note` (`string`, optional): Short description of the work done.
- `project_id` (`integer`, optional): Numeric ID of the project the time was spent on.
- `service_id` (`integer`, optional): Numeric ID of the service worked on, from list_services.
- `started_at` (`string`, optional): New start time, as a UTC ISO 8601 timestamp.

Example input: `{"business_id":1,"time_entry_id":1}`

### `freshbooks_delete_client`

Delete Client · Destructive

Delete a client by marking it deleted (vis_state 1). Its invoices are kept.
Returns an empty response on success.
Use update_client with vis_state 2 to archive a client instead of deleting it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `client_id` (`integer`, required): Numeric ID of the client to delete, such as 238951.

Example input: `{"account_id":"<account_id>","client_id":1}`

### `freshbooks_delete_estimate`

Delete Estimate · Destructive

Delete an estimate.
Returns an empty response on success.
Use update_estimate with vis_state 2 to archive an estimate instead of deleting it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `estimate_id` (`integer`, required): Numeric ID of the estimate to delete, such as 2201278.

Example input: `{"account_id":"<account_id>","estimate_id":1}`

### `freshbooks_delete_expense`

Delete Expense · Destructive

Delete an expense by marking it deleted (vis_state 1).
Returns the expense with its visibility state set to deleted.
Use update_expense to correct an expense rather than remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `expense_id` (`integer`, required): Numeric ID of the expense to delete, such as 1569533.

Example input: `{"account_id":"<account_id>","expense_id":1}`

### `freshbooks_delete_invoice`

Delete Invoice · Destructive

Delete an invoice.
Returns an empty response on success.
Use update_invoice with vis_state 2 to archive an invoice instead of deleting it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `invoice_id` (`integer`, required): Numeric ID of the invoice to delete, such as 2214249.

Example input: `{"account_id":"<account_id>","invoice_id":1}`

### `freshbooks_delete_item`

Delete Item · Destructive

Delete an item by marking it deleted (vis_state 1).
Returns an empty response on success.
Use update_item to change an item rather than remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `item_id` (`integer`, required): Numeric ID of the item to delete, such as 201225.

Example input: `{"account_id":"<account_id>","item_id":1}`

### `freshbooks_delete_other_income`

Delete Other Income · Destructive

Delete an other income entry.
Returns an empty response on success.
Use update_other_income to correct an entry rather than remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `income_id` (`integer`, required): Numeric ID of the other income entry to delete, such as 1234.

Example input: `{"account_id":"<account_id>","income_id":1}`

### `freshbooks_delete_payment`

Delete Payment · Destructive

Delete a payment by marking it deleted (vis_state 1). The invoice balance is restored.
Returns the payment with its visibility state set to deleted.
Use update_payment instead to correct a payment rather than remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `payment_id` (`integer`, required): Numeric ID of the payment to delete, such as 10865326.

Example input: `{"account_id":"<account_id>","payment_id":1}`

### `freshbooks_delete_project`

Delete Project · Destructive

Delete a project permanently.
Returns an empty response on success.
Use update_project with complete true to close a project without deleting it.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `project_id` (`integer`, required): Numeric ID of the project to delete, such as 779597.

Example input: `{"business_id":1,"project_id":1}`

### `freshbooks_delete_tax`

Delete Tax · Destructive

Delete a tax definition.
Returns an empty response on success.
Use update_tax to change a tax rather than remove it.
Requires account_id from freshbooks_get_current_user.

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

Inputs:

- `account_id` (`string`, required): FreshBooks account ID (the `account_id`, also called accountid), a short alphanumeric string such as 'LJArJ4'. Get it from freshbooks_get_current_user: business_memberships[].business.account_id.
- `tax_id` (`integer`, required): Numeric ID of the tax to delete, such as 58728.

Example input: `{"account_id":"<account_id>","tax_id":1}`

### `freshbooks_delete_time_entry`

Delete Time Entry · Destructive

Delete a time entry permanently.
Returns an empty response (HTTP 204) on success.
Use update_time_entry to correct an entry instead of deleting it.
Requires business_id from freshbooks_get_current_user.

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

Inputs:

- `business_id` (`integer`, required): FreshBooks business ID (the numeric `id` of the business, not the business membership id), such as 240340. Get it from freshbooks_get_current_user: business_memberships[].business.id.
- `time_entry_id` (`integer`, required): Numeric ID of the time entry to delete, such as 5095.

Example input: `{"business_id":1,"time_entry_id":1}`

## 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 |
