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

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

**Authentication:** OAuth 2.0
**Categories:** Accounting & Finance
**Tools:** 119: 60 read, 44 write, 15 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Moneybird app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=MONEYBIRD)

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

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

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

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

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

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

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="moneybird_list_administrations",
       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: 'moneybird_fetch_contacts_by_ids',
  toolInput: {
    administration_id: '<administration_id>',
    ids: ['401892365587990113', '401892365587990114'],
  },
  connector: 'moneybird',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="moneybird_fetch_contacts_by_ids",
    tool_input={
        "administration_id": "<administration_id>",
        "ids": ["401892365587990113", "401892365587990114"],
    },
    connection_name="moneybird",
    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.

### `moneybird_fetch_contacts_by_ids`

Fetch Contacts By IDS · Read-only

Fetch up to 100 contacts by their ids in a single request.
Returns a list of contacts including id, administration_id, company_name, firstname, lastname, address1, address2.
Use after list_contact_versions to download only contacts that changed.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `ids` (`array`, required): Array of record ids to fetch, at most 100. Use the list_*_versions tool to find ids that changed. Example: ["401892365587990113", "401892365587990114"].

Example input: `{"administration_id":"<administration_id>","ids":["401892365587990113","401892365587990114"]}`

### `moneybird_fetch_sales_invoices_by_ids`

Fetch Sales Invoices By IDS · Read-only

Fetch up to 100 sales invoices by their ids in a single request.
Returns a list of sales invoices including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use after list_sales_invoice_versions to download only invoices that changed.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `ids` (`array`, required): Array of record ids to fetch, at most 100. Use the list_*_versions tool to find ids that changed. Example: ["401892365587990113", "401892365587990114"].

Example input: `{"administration_id":"<administration_id>","ids":["401892365587990113","401892365587990114"]}`

### `moneybird_filter_contacts`

Filter Contacts · Read-only

List contacts matching key:value filter terms or a free-text query.
Returns a page of contacts including id, administration_id, company_name, firstname, lastname, address1, address2.
Use when you need structured filters such as contact_type. Use list_contacts for plain browsing.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `first_name:henk,contact_type:company`). Any filter you pass replaces the defaults below entirely, so include every key you need. Available filters: | **Filter** | **Type** | **Default** | **Description** | | - | - | - | - | | created_after | `String` | | Select contacts created after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | | updated_after | `String` | | Select contacts updated after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | | first_name | `String` | | Select contacts with the given first name. Case-insensitive | | last_name | `String` | | Select contacts with the given last name. Case-insensitive | | estimate_workflow_id | `Integer` | | Filters contacts by a single Estimate workflow | | invoice_workflow_id | `Integer` | | Filters contacts by a single Invoice workflow | | contact_type | `String` | | The contact type. Possible values `all`, `company`, `private_individual` | | delivery_method | `String` | | The delivery method for invoices. Possible values. Possible values `all`, `email`, `post`, `manual`, `peppol`, `simplerinvoicing` | | trusted_type | `String` | | Whether the contact is trusted. Possible values `all`, `trusted`, `not_trusted` | | mandate_type | `String` | | The direct debit mandate of the contact. Possible values `all`, `manual` (the SEPA mandate fields are filled in), `adyen` (an accepted Moneybird mandate), `none` (no mandate at all) |. Example: state:open,period:this_year.
- `include_archived` (`boolean`, optional): Set to true to include archived contacts in the results. Archived contacts are hidden by default. Example: false.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `query` (`string`, optional): Free-text search across name, contact people, email, phone, customer id, tax number, chamber of commerce, IBAN, and address fields. Example: acme.

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

### `moneybird_find_estimate_by_estimate_id`

Find Estimate By Estimate ID · Read-only

Find an estimate by its printed estimate number.
Returns the estimate including id, administration_id, contact_id, contact, contact_person_id, contact_person, estimate_id.
Use when you know the estimate number rather than the Moneybird id.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `estimate_id` (`string`, required): Printed estimate number, for example 2026-0001. Example: 2026-0001.

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

### `moneybird_find_sales_invoice_by_invoice_id`

Find Sales Invoice By Invoice ID · Read-only

Find a sales invoice by its invoice number (for example 2026-0001).
Returns the sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use when you know the printed invoice number rather than the Moneybird id.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `invoice_id` (`string`, required): Printed invoice number of the sales invoice, for example 2026-0001. Example: 2026-0001.

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

### `moneybird_find_sales_invoice_by_reference`

Find Sales Invoice By Reference · Read-only

Find sales invoices by the reference you set on them.
Returns the matching sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use when you stored an external order number in the reference field.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `reference` (`string`, required): The reference value that was set on the sales invoice. Example: PO-2026-0042.

Example input: `{"administration_id":"<administration_id>","reference":"<reference>"}`

### `moneybird_get_balance_sheet_report`

Get Balance Sheet Report · Read-only

Get the balance sheet report as of a date or period.
Returns the report including debit, credit, periods.
Use for assets, liabilities and equity.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `granularity` (`string`, optional): Splits the report into periods of a month, a quarter or a year. The response then also contains `periods`, with the same fields for each period. The first and the last period are cut off at the start and the end of `period`. Allowed values: month, quarter, year. One of: `month`, `quarter`, `year`.
- `period` (`string`, optional): The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). **Date range formats:** - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) - `YYYYMM..YYYYMM` (e.g., `202501..202501`) - `YYYYMM` (e.g., `202501`) **Preset options:** - `this_month` - Current month (default if not specified) - `prev_month` - Previous month - `next_month` - Next month - `this_quarter` - Current quarter - `prev_quarter` - Previous quarter - `next_quarter` - Next quarter - `this_year` - Current year - `prev_year` - Previous year - `next_year` - Next year **Maximum period: 12 months.**. Example: this_month.

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

### `moneybird_get_bank_balance_report`

Get Bank Balance Report · Read-only

Get the balance per bank account for a period.
Returns the report including total, financial_accounts, periods.
Use to check bank balances. Use list_financial_mutations for individual transactions.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `granularity` (`string`, optional): Splits the report into periods of a month, a quarter or a year. The response then also contains `periods`, with the same fields for each period. The first and the last period are cut off at the start and the end of `period`. Allowed values: month, quarter, year. One of: `month`, `quarter`, `year`.
- `period` (`string`, optional): The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). **Date range formats:** - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) - `YYYYMM..YYYYMM` (e.g., `202501..202501`) - `YYYYMM` (e.g., `202501`) **Preset options:** - `this_month` - Current month (default if not specified) - `prev_month` - Previous month - `next_month` - Next month - `this_quarter` - Current quarter - `prev_quarter` - Previous quarter - `next_quarter` - Next quarter - `this_year` - Current year - `prev_year` - Previous year - `next_year` - Next year **Maximum period: 12 months.**. Example: this_month.

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

### `moneybird_get_cash_flow_report`

Get Cash Flow Report · Read-only

Get the cash flow report for a period.
Returns the report including cash_received_by_ledger_account, cash_paid_by_ledger_account, opening_balance, closing_balance, periods.
Use to see money moving in and out of the bank accounts.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `financial_account_id` (`string`, optional): Filter the cash flow report by a specific financial account. Example: 401892365587990113.
- `granularity` (`string`, optional): Splits the report into periods of a month, a quarter or a year. The response then also contains `periods`, with the same fields for each period. The first and the last period are cut off at the start and the end of `period`. Allowed values: month, quarter, year. One of: `month`, `quarter`, `year`.
- `period` (`string`, optional): The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). **Date range formats:** - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) - `YYYYMM..YYYYMM` (e.g., `202501..202501`) - `YYYYMM` (e.g., `202501`) **Preset options:** - `this_month` - Current month (default if not specified) - `prev_month` - Previous month - `next_month` - Next month - `this_quarter` - Current quarter - `prev_quarter` - Previous quarter - `next_quarter` - Next quarter - `this_year` - Current year - `prev_year` - Previous year - `next_year` - Next year **Maximum period: 12 months.**. Example: this_month.

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

### `moneybird_get_contact`

Get Contact · Read-only

Retrieve a single contact with its contact people, notes and custom fields.
Returns the contact including id, administration_id, company_name, firstname, lastname, address1, address2.
Use list_contacts or filter_contacts when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, required): Id of the contact. Use list_contacts to find it.
- `include_archived` (`boolean`, optional): Set to true to include archived contacts in the results. Archived contacts are hidden by default. Example: false.

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

### `moneybird_get_contact_by_customer_id`

Get Contact By Customer ID · Read-only

Retrieve a contact by its customer id (the user-visible number, not the Moneybird id).
Returns the contact including id, administration_id, company_name, firstname, lastname, address1, address2.
Use when you only know the customer number from another system.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `customer_id` (`string`, required): Customer id of the contact as shown in Moneybird (not the internal id). Example: 1042.

Example input: `{"administration_id":"<administration_id>","customer_id":"<customer_id>"}`

### `moneybird_get_creditors_report`

Get Creditors Report · Read-only

Get the report of open payables per supplier.
Returns the report including creditors, periods.
Use to see what you owe. Use get_debtors_report for amounts owed to you.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `granularity` (`string`, optional): Splits the report into periods of a month, a quarter or a year. The response then also contains `periods`, with the same fields for each period. The first and the last period are cut off at the start and the end of `period`. Allowed values: month, quarter, year. One of: `month`, `quarter`, `year`.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `period` (`string`, optional): The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). **Date range formats:** - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) - `YYYYMM..YYYYMM` (e.g., `202501..202501`) - `YYYYMM` (e.g., `202501`) **Preset options:** - `this_month` - Current month (default if not specified) - `prev_month` - Previous month - `next_month` - Next month - `this_quarter` - Current quarter - `prev_quarter` - Previous quarter - `next_quarter` - Next quarter - `this_year` - Current year - `prev_year` - Previous year - `next_year` - Next year **Maximum period: 12 months.**. Example: this_month.

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

### `moneybird_get_debtors_report`

Get Debtors Report · Read-only

Get the report of open receivables per customer.
Returns the report including debtors, periods.
Use to see who owes money. Use get_creditors_report for amounts you owe.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `granularity` (`string`, optional): Splits the report into periods of a month, a quarter or a year. The response then also contains `periods`, with the same fields for each period. The first and the last period are cut off at the start and the end of `period`. Allowed values: month, quarter, year. One of: `month`, `quarter`, `year`.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `period` (`string`, optional): The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). **Date range formats:** - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) - `YYYYMM..YYYYMM` (e.g., `202501..202501`) - `YYYYMM` (e.g., `202501`) **Preset options:** - `this_month` - Current month (default if not specified) - `prev_month` - Previous month - `next_month` - Next month - `this_quarter` - Current quarter - `prev_quarter` - Previous quarter - `next_quarter` - Next quarter - `this_year` - Current year - `prev_year` - Previous year - `next_year` - Next year **Maximum period: 12 months.**. Example: this_month.

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

### `moneybird_get_estimate`

Get Estimate · Read-only

Retrieve a single estimate with its details.
Returns the estimate including id, administration_id, contact_id, contact, contact_person_id, contact_person, estimate_id.
Use list_estimates when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `estimate_id` (`string`, required): Printed estimate number, for example 2026-0001. Example: 2026-0001.

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

### `moneybird_get_expenses_by_contact_report`

Get Expenses By Contact Report · Read-only

Get expenses grouped by contact for a period.
Returns the report including expenses_by_contact, periods.
Use to find top suppliers.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `granularity` (`string`, optional): Splits the report into periods of a month, a quarter or a year. The response then also contains `periods`, with the same fields for each period. The first and the last period are cut off at the start and the end of `period`. Allowed values: month, quarter, year. One of: `month`, `quarter`, `year`.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `period` (`string`, optional): The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). **Date range formats:** - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) - `YYYYMM..YYYYMM` (e.g., `202501..202501`) - `YYYYMM` (e.g., `202501`) **Preset options:** - `this_month` - Current month (default if not specified) - `prev_month` - Previous month - `next_month` - Next month - `this_quarter` - Current quarter - `prev_quarter` - Previous quarter - `next_quarter` - Next quarter - `this_year` - Current year - `prev_year` - Previous year - `next_year` - Next year **Maximum period: 12 months.**. Example: this_month.

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

### `moneybird_get_external_sales_invoice`

Get External Sales Invoice · Read-only

Retrieve a single external sales invoice.
Returns the external sales invoice including id, administration_id, contact_id, contact, date, state, due_date.
Use list_external_sales_invoices when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `external_sales_invoice_id` (`string`, required): Id of the external sales invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","external_sales_invoice_id":"<external_sales_invoice_id>"}`

### `moneybird_get_financial_mutation`

Get Financial Mutation · Read-only

Retrieve a single financial mutation with its payments and ledger account bookings.
Returns the financial mutation including id, administration_id, amount, code, date, message, contra_account_name.
Use list_financial_mutations when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `financial_mutation_id` (`string`, required): Id of the financial mutation. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","financial_mutation_id":"<financial_mutation_id>"}`

### `moneybird_get_general_document`

Get General Document · Read-only

Retrieve a single general document.
Returns the general document including id, administration_id, contact_id, contact, reference, date, due_date.
Use list_general_documents when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `general_document_id` (`string`, required): Id of the general document. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","general_document_id":"<general_document_id>"}`

### `moneybird_get_general_journal_document`

Get General Journal Document · Read-only

Retrieve a single general journal document with its journal entries.
Returns the general journal document including id, administration_id, reference, date, journal_type, created_at, updated_at.
Use list_general_journal_documents when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `general_journal_document_id` (`string`, required): Id of the general journal document. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","general_journal_document_id":"<general_journal_document_id>"}`

### `moneybird_get_ledger_account`

Get Ledger Account · Read-only

Retrieve a single ledger account by id.
Returns the ledger account including id, administration_id, name, account_type, account_id, parent_id, active.
Use list_ledger_accounts to browse when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `ledger_account_id` (`string`, required): Id of the ledger account. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","ledger_account_id":"<ledger_account_id>"}`

### `moneybird_get_product`

Get Product · Read-only

Retrieve a single product.
Returns the product including id, administration_id, description, title, identifier, price, currency.
Use list_products when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `product_id` (`string`, required): Id of the product. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","product_id":"<product_id>"}`

### `moneybird_get_product_by_identifier`

Get Product By Identifier · Read-only

Retrieve a product by its SKU or product identifier.
Returns the product including id, administration_id, description, title, identifier, price, currency.
Use when you know the identifier from another system.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `identifier` (`string`, required): Product identifier (SKU) as set on the product. Example: SKU-1001.

Example input: `{"administration_id":"<administration_id>","identifier":"<identifier>"}`

### `moneybird_get_profit_loss_report`

Get Profit Loss Report · Read-only

Get the profit and loss report for a period.
Returns the report including revenue_by_ledger_account, direct_costs_by_ledger_account, expenses_by_ledger_account, other_income_expenses_by_ledger_account, gross_profit, operating_profit, net_profit.
Use for revenue, costs and result. Use get_balance_sheet_report for assets and liabilities.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `granularity` (`string`, optional): Splits the report into periods of a month, a quarter or a year. The response then also contains `periods`, with the same fields for each period. The first and the last period are cut off at the start and the end of `period`. Allowed values: month, quarter, year. One of: `month`, `quarter`, `year`.
- `period` (`string`, optional): The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). **Date range formats:** - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) - `YYYYMM..YYYYMM` (e.g., `202501..202501`) - `YYYYMM` (e.g., `202501`) **Preset options:** - `this_month` - Current month (default if not specified) - `prev_month` - Previous month - `next_month` - Next month - `this_quarter` - Current quarter - `prev_quarter` - Previous quarter - `next_quarter` - Next quarter - `this_year` - Current year - `prev_year` - Previous year - `next_year` - Next year **Maximum period: 12 months.**. Example: this_month.
- `project_id` (`string`, optional): A unique record identifier. Example: 401892365587990113.

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

### `moneybird_get_project`

Get Project · Read-only

Retrieve a single project by id.
Returns the project including id, name, state, budget.
Use list_projects to browse when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `project_id` (`string`, required): Id of the project. Use the matching list tool to find it. Example: 401892365587990113.

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

### `moneybird_get_purchase_invoice`

Get Purchase Invoice · Read-only

Retrieve a single purchase invoice with its details and payments.
Returns the purchase invoice including id, administration_id, contact_id, contact, reference, date, due_date.
Use list_purchase_invoices when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `purchase_invoice_id` (`string`, required): Id of the purchase invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","purchase_invoice_id":"<purchase_invoice_id>"}`

### `moneybird_get_receipt`

Get Receipt · Read-only

Retrieve a single receipt with its details.
Returns the receipt including id, administration_id, contact_id, contact, reference, date, due_date.
Use list_receipts when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `receipt_id` (`string`, required): Id of the receipt. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","receipt_id":"<receipt_id>"}`

### `moneybird_get_recurring_sales_invoice`

Get Recurring Sales Invoice · Read-only

Retrieve a single recurring sales invoice template.
Returns the recurring sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, workflow_id.
Use list_recurring_sales_invoices when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `recurring_sales_invoice_id` (`string`, required): Id of the recurring sales invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","recurring_sales_invoice_id":"<recurring_sales_invoice_id>"}`

### `moneybird_get_revenue_by_contact_report`

Get Revenue By Contact Report · Read-only

Get revenue grouped by contact for a period.
Returns the report including revenue_by_contact, periods.
Use to find top customers.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `granularity` (`string`, optional): Splits the report into periods of a month, a quarter or a year. The response then also contains `periods`, with the same fields for each period. The first and the last period are cut off at the start and the end of `period`. Allowed values: month, quarter, year. One of: `month`, `quarter`, `year`.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `period` (`string`, optional): The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). **Date range formats:** - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) - `YYYYMM..YYYYMM` (e.g., `202501..202501`) - `YYYYMM` (e.g., `202501`) **Preset options:** - `this_month` - Current month (default if not specified) - `prev_month` - Previous month - `next_month` - Next month - `this_quarter` - Current quarter - `prev_quarter` - Previous quarter - `next_quarter` - Next quarter - `this_year` - Current year - `prev_year` - Previous year - `next_year` - Next year **Maximum period: 12 months.**. Example: this_month.

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

### `moneybird_get_sales_invoice`

Get Sales Invoice · Read-only

Retrieve a single sales invoice with its details, payments and notes.
Returns the sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use list_sales_invoices when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `sales_invoice_id` (`string`, required): Id of the sales invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","sales_invoice_id":"<sales_invoice_id>"}`

### `moneybird_get_subscription`

Get Subscription · Read-only

Retrieve a single subscription.
Returns the subscription including id, administration_id, start_date, end_date, frequency, frequency_type, reference.
Use list_subscriptions when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `subscription_id` (`string`, required): Id of the subscription. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","subscription_id":"<subscription_id>"}`

### `moneybird_get_tax_report`

Get Tax Report · Read-only

Get the tax (VAT) report for a period.
Returns the report including tax_rates, periods.
Use to prepare a VAT return.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `granularity` (`string`, optional): Splits the report into periods of a month, a quarter or a year. The response then also contains `periods`, with the same fields for each period. The first and the last period are cut off at the start and the end of `period`. Allowed values: month, quarter, year. One of: `month`, `quarter`, `year`.
- `period` (`string`, optional): The period can be a date range or one of the presets. Date ranges must consist of whole months (start on 1st, end on last day of month). **Date range formats:** - `YYYYMMDD..YYYYMMDD` (e.g., `20250101..20250131`) - `YYYYMM..YYYYMM` (e.g., `202501..202501`) - `YYYYMM` (e.g., `202501`) **Preset options:** - `this_month` - Current month (default if not specified) - `prev_month` - Previous month - `next_month` - Next month - `this_quarter` - Current quarter - `prev_quarter` - Previous quarter - `next_quarter` - Next quarter - `this_year` - Current year - `prev_year` - Previous year - `next_year` - Next year **Maximum period: 12 months.**. Example: this_month.

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

### `moneybird_get_time_entry`

Get Time Entry · Read-only

Retrieve a single time entry.
Returns the time entry including id, administration_id, contact_id, project_id, sales_invoice_id, user_id, started_at.
Use list_time_entries when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `time_entry_id` (`string`, required): Id of the time entry. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","time_entry_id":"<time_entry_id>"}`

### `moneybird_get_typeless_document`

Get Typeless Document · Read-only

Retrieve a single typeless document.
Returns the typeless document including id, administration_id, contact_id, contact, reference, date, state.
Use list_typeless_documents when the id is unknown.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `typeless_document_id` (`string`, required): Id of the typeless document. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","typeless_document_id":"<typeless_document_id>"}`

### `moneybird_list_administrations`

List Administrations · Read-only

List the Moneybird administrations (bookkeeping accounts) the connected user can access.
Returns administrations including id, name, language, currency, country, time_zone, access.
Use first to find the administration_id that every other Moneybird tool requires.

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

Inputs: none.

Example input: `{}`

### `moneybird_list_contact_versions`

List Contact Versions · Read-only

List the id and version of every contact, for change detection.
Returns ids with versions including id, version.
Use to find changed contacts, then call fetch_contacts_by_ids for the changed ids.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Comma-separated `key:value` filter terms. Same syntax as `GET /contacts/filter` — see that operation's description for the available keys. Example: state:open,period:this_year.
- `include_archived` (`boolean`, optional): Set to true to include archived contacts in the results. Archived contacts are hidden by default. Example: false.

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

### `moneybird_list_contacts`

List Contacts · Read-only

List contacts (customers and suppliers), optionally filtered by a free-text query.
Returns a page of contacts including id, administration_id, company_name, firstname, lastname, address1, address2.
Use for browsing or free-text search. Use filter_contacts for key:value filters and get_contact_by_customer_id for an exact customer id.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_field` (`string`, optional): Name of the contact field to match against, used together with contact_value. Example: example.
- `contact_import_id` (`string`, optional): Restrict to contacts created by the given contact import batch. Example: 401892365587990113.
- `contact_value` (`string`, optional): Value the contact_field must equal, used together with contact_field. Example: example.
- `include_archived` (`boolean`, optional): Set to true to include archived contacts in the results. Archived contacts are hidden by default. Example: false.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `query` (`string`, optional): Free-text search across name, contact people, email, phone, customer id, tax number, chamber of commerce, IBAN, and address fields. Example: acme.
- `todo` (`string`, optional): Restrict the list to records that still need attention in the named area. Example: sales_invoices.

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

### `moneybird_list_custom_fields`

List Custom Fields · Read-only

List the custom fields defined for contacts, sales invoices and identities.
Returns custom fields including id, administration_id, name, source.
Use to find custom field ids before setting custom_fields_attributes on a record.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.

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

### `moneybird_list_document_styles`

List Document Styles · Read-only

List the document styles (layouts) used for invoices and estimates.
Returns document styles including id, administration_id, name, identity_id, default, logo_hash, logo_container_full_width.
Use to find a document_style_id for creating sales invoices or estimates.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.

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

### `moneybird_list_estimates`

List Estimates · Read-only

List estimates (quotes), optionally filtered by state or period.
Returns a page of estimates including id, administration_id, contact_id, contact, contact_person_id, contact_person, estimate_id.
Use for browsing. Use get_estimate when you know the id.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | --- | --- | --- | --- | | state | `String` | `all` | `all`, `draft`, `open`, `late`, `accepted`, `rejected`, `billed` or `archived` | | period | `String` | `this_year` | Matches on the estimate date. This can either be the description of a period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | | contact_id | `Integer` | | Filters estimates by a single contact | | workflow_id | `Integer` | | Filters estimates by a single workflow | The `period` filter matches on the estimate date. It does not look at the `period` of the individual details, which says which months the expenses belong to. Read `details[].period` in the response when you need those months, or use the reports endpoints, which already spread the amounts over that period. A detail's period can fall outside the filtered range, however wide you make it, so this filter cannot tell you which periods amounts fall in. Use the reports endpoints for that. You can filter by multiple states at the same time as well. To do this, separate the state values by a pipe: `state:draft|scheduled`. Example: state:open,period:this_year.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.

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

### `moneybird_list_external_sales_invoices`

List External Sales Invoices · Read-only

List external sales invoices (invoices issued outside Moneybird and imported).
Returns a page of external sales invoices including id, administration_id, contact_id, contact, date, state, due_date.
Use for imported revenue. Use list_sales_invoices for invoices created in Moneybird.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | --- | --- | --- | --- | | state | `String` | `all` | `all`, `new`, `open`, `late`, or `paid` | | period | `String` | `this_year` | Matches on the invoice date. This can either be the description of a period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | | contact_id | `Integer` | | Select invoices belonging to a certain contact | The `period` filter matches on the invoice date. It does not look at the `period` of the individual details, which says which months the expenses belong to. Read `details[].period` in the response when you need those months, or use the reports endpoints, which already spread the amounts over that period. A detail's period can fall outside the filtered range, however wide you make it, so this filter cannot tell you which periods amounts fall in. Use the reports endpoints for that. You can filter by multiple states at the same time as well. To do this, separate the state values by a pipe: `state:new|open`. Example: state:open,period:this_year.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.

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

### `moneybird_list_financial_accounts`

List Financial Accounts · Read-only

List the financial accounts (bank accounts, cash, payment providers) of an administration.
Returns financial accounts including id, administration_id, type, name, identifier, currency, provider.
Use to find a financial_account_id for registering payments or importing bank statements.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.

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

### `moneybird_list_financial_mutations`

List Financial Mutations · Read-only

List financial mutations (bank transactions), optionally filtered by state or period.
Returns a page of financial mutations including id, administration_id, amount, code, date, message, contra_account_name.
Use to find unprocessed bank lines before linking them with link_financial_mutation_booking.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:unprocessed`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | - | - | - | - | | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | | state | `String` | `all` | `all`, `unprocessed`, `processed` or `auto_booked` | | mutation_type | `String` | `all` | `all`, `debit` or `credit` | | financial_account_id | `Integer` | | Restrict to a single financial account | | amount_from | `String` | | Lower bound on the absolute mutation amount (negative input is treated as positive) | | amount_to | `String` | | Upper bound on the absolute mutation amount | Multiple values for `state` and `mutation_type` can be combined with a pipe, e.g. `state:unprocessed|processed`. Example: state:open,period:this_year.

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

### `moneybird_list_general_documents`

List General Documents · Read-only

List general documents (bookkeeping documents that are not invoices or receipts).
Returns a page of general documents including id, administration_id, contact_id, contact, reference, date, due_date.
Use for miscellaneous documents. Use list_general_journal_documents for manual journal entries.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | - | - | - | - | | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | | recurring | `String` | `all` | `all`, `enabled` or `disabled` | | attachment | `String` | `all` | `all`, `with` or `without` | | reference | `String` | | Documents with the given reference value | | contact_id | `Integer` | | Documents belonging to the given contact | | ledger_account_id | `Integer` | | Documents booking against the given ledger account | | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. Example: state:open,period:this_year.
- `new_filter` (`string`, optional): String terms, example: `key1:value1,key2:value2`. Example: example.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `sort` (`string`, optional): Sorts the list on date, so the newest (`date_desc`) or the oldest (`date_asc`) items come first. Allowed values: date_desc, date_asc. One of: `date_desc`, `date_asc`.

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

### `moneybird_list_general_journal_documents`

List General Journal Documents · Read-only

List general journal documents (manual bookkeeping entries).
Returns a page of general journal documents including id, administration_id, reference, date, journal_type, created_at, updated_at.
Use to review manual corrections and adjustments.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `exclude_new_general_journal_documents` (`boolean`, optional): Set to true to leave out journal documents that are still new and not yet booked. Example: false.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | - | - | - | - | | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | | recurring | `String` | `all` | `all`, `enabled` or `disabled` | | attachment | `String` | `all` | `all`, `with` or `without` | | reference | `String` | | Documents with the given reference value | | contact_id | `Integer` | | Documents belonging to the given contact | | ledger_account_id | `Integer` | | Documents booking against the given ledger account | | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. Example: state:open,period:this_year.
- `new_filter` (`string`, optional): String terms, example: `key1:value1,key2:value2`. Example: example.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `sort` (`string`, optional): Sorts the list on date, so the newest (`date_desc`) or the oldest (`date_asc`) items come first. Allowed values: date_desc, date_asc. One of: `date_desc`, `date_asc`.

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

### `moneybird_list_identities`

List Identities · Read-only

List the sender identities (company details shown on documents) of an administration.
Returns identities including id, administration_id, company_name, city, country, zipcode, address1.
Use to find an identity id or to inspect the default sender details.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.

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

### `moneybird_list_ledger_accounts`

List Ledger Accounts · Read-only

List the ledger accounts (chart of accounts categories) of an administration.
Returns ledger accounts including id, administration_id, name, account_type, account_id, parent_id, active.
Use to find a ledger_account_id for invoice details and purchase documents.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.

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

### `moneybird_list_products`

List Products · Read-only

List products and services, optionally filtered by a query.
Returns a page of products including id, administration_id, description, title, identifier, price, currency.
Use to find a product_id for invoice details and subscriptions.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `active` (`boolean`, optional): When true, only active products are returned. Set to false to include deactivated products. Example: true.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `for_checkout` (`boolean`, optional): When true, returns only products with online checkout enabled. When false, returns only products without checkout. Omit to include both. Example: true.
- `ledger_account_id` (`string`, optional): Filters products by their associated ledger account. Example: 401892365587990113.
- `page` (`integer`, optional): The page to fetch, starting at 1. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `query` (`string`, optional): Free-text search across the product description, title and identifier. Example: acme.

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

### `moneybird_list_projects`

List Projects · Read-only

List the projects of an administration.
Returns projects including id, name, state, budget.
Use to find a project_id for time entries and invoice details.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `state:active`). Any filter you pass replaces the defaults below entirely, so include every key you need. Available filters: | **Filter** | **Type** | **Default** | **Description** | | - | - | - | - | | state | `String` | `active` | `all`, `active` or `archived`. Combine values with a pipe, e.g. `state:active|archived` |. Example: state:open,period:this_year.
- `page` (`integer`, optional): The page to fetch, starting at 1. Example: 1.
- `per_page` (`integer`, optional): Amount of projects per page, default: 25. Example: 50.

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

### `moneybird_list_purchase_invoices`

List Purchase Invoices · Read-only

List purchase invoices (bills from suppliers), optionally filtered by state or period.
Returns a page of purchase invoices including id, administration_id, contact_id, contact, reference, date, due_date.
Use for payables. Use list_receipts for expense receipts.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | - | - | - | - | | period | `String` | `this_year` | Matches on the document date. A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | | recurring | `String` | `all` | `all`, `enabled` or `disabled` | | attachment | `String` | `all` | `all`, `with` or `without` | | automatic_saving | `String` | `all` | `all`, `automatic` or `manual`. `automatic` matches documents Moneybird saved by itself after analysing them; `manual` matches everything else, including documents nobody has saved yet | | reference | `String` | | Documents with the given reference value | | contact_id | `Integer` | | Documents belonging to the given contact | | ledger_account_id | `Integer` | | Documents booking against the given ledger account | | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | The `period` filter matches on the document date. It does not look at the `period` of the individual details, which says which months the expenses belong to. Read `details[].period` in the response when you need those months, or use the reports endpoints, which already spread the amounts over that period. A detail's period can fall outside the filtered range, however wide you make it, so this filter cannot tell you which periods amounts fall in. Use the reports endpoints for that. Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. Example: state:open,period:this_year.
- `new_filter` (`string`, optional): String terms, example: `key1:value1,key2:value2`. Example: example.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `sort` (`string`, optional): Sorts the list on date, so the newest (`date_desc`) or the oldest (`date_asc`) items come first. Allowed values: date_desc, date_asc. One of: `date_desc`, `date_asc`.

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

### `moneybird_list_receipts`

List Receipts · Read-only

List receipts (expense claims and proofs of payment).
Returns a page of receipts including id, administration_id, contact_id, contact, reference, date, due_date.
Use for expenses already paid. Use list_purchase_invoices for supplier bills.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | - | - | - | - | | period | `String` | `this_year` | Matches on the document date. A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | | recurring | `String` | `all` | `all`, `enabled` or `disabled` | | attachment | `String` | `all` | `all`, `with` or `without` | | automatic_saving | `String` | `all` | `all`, `automatic` or `manual`. `automatic` matches documents Moneybird saved by itself after analysing them; `manual` matches everything else, including documents nobody has saved yet | | reference | `String` | | Documents with the given reference value | | contact_id | `Integer` | | Documents belonging to the given contact | | ledger_account_id | `Integer` | | Documents booking against the given ledger account | | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | The `period` filter matches on the document date. It does not look at the `period` of the individual details, which says which months the expenses belong to. Read `details[].period` in the response when you need those months, or use the reports endpoints, which already spread the amounts over that period. A detail's period can fall outside the filtered range, however wide you make it, so this filter cannot tell you which periods amounts fall in. Use the reports endpoints for that. Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. Example: state:open,period:this_year.
- `new_filter` (`string`, optional): String terms, example: `key1:value1,key2:value2`. Example: example.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `sort` (`string`, optional): Sorts the list on date, so the newest (`date_desc`) or the oldest (`date_asc`) items come first. Allowed values: date_desc, date_asc. One of: `date_desc`, `date_asc`.

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

### `moneybird_list_recurring_sales_invoices`

List Recurring Sales Invoices · Read-only

List recurring sales invoice templates.
Returns a page of recurring sales invoices including id, administration_id, contact_id, contact, contact_person_id, contact_person, workflow_id.
Use to see invoices that are generated automatically on a schedule.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `state:active,contact_id:123`). Any filter you pass replaces the defaults below entirely, so include every key you need. Available filters: | **Filter** | **Type** | **Default** | **Description** | | --- | --- | --- | --- | | state | `String` | `active` | `active` or `inactive` | | frequency | `String` | `all` | `all`, `day`, `week`, `month`, `quarter` or `year` | | auto_send | `Boolean` | `null` | `null`, `true` or `false` | | contact_id | `Integer` | | Filters recurring invoices by a single contact | | workflow_id | `Integer` | | Filters recurring invoices by a single workflow |. Example: state:open,period:this_year.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.

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

### `moneybird_list_sales_invoice_versions`

List Sales Invoice Versions · Read-only

List the id and version of every sales invoice, for change detection.
Returns ids with versions including id, version.
Use to find changed invoices, then call fetch_sales_invoices_by_ids for the changed ids.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Comma-separated `key:value` filter terms. Same syntax as `GET /sales_invoices` — see that operation's description for the available keys. Example: state:open,period:this_year.

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

### `moneybird_list_sales_invoices`

List Sales Invoices · Read-only

List sales invoices, optionally filtered by state, period, or contact.
Returns a page of sales invoices including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use for browsing. Use find_sales_invoice_by_invoice_id or find_sales_invoice_by_reference for exact lookups.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | - | - | - | - | | state | `String` | `all` | `all`, `draft`, `open`, `scheduled`, `pending_payment`, `late`, `reminded`, `paid` or `uncollectible` | | period | `String` | `this_year` | Matches on the invoice date. A period description (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | | reference | `String` | | Select invoices with a certain reference | | contact_id | `Integer` | | Select invoices belonging to a certain contact | | recurring_sales_invoice_id | `Integer` | | Select invoices created by a certain recurring invoice | | workflow_id | `Integer` | | Select invoices that use a certain workflow | | created_after | `String` | | Select invoices created after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | | updated_after | `String` | | Select invoices updated after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | The `period` filter matches on the invoice date. It does not look at the `period` of the individual details, which says which months the expenses belong to. Read `details[].period` in the response when you need those months, or use the reports endpoints, which already spread the amounts over that period. A detail's period can fall outside the filtered range, however wide you make it, so this filter cannot tell you which periods amounts fall in. Use the reports endpoints for that. You can filter by multiple states at the same time by separating the values with a pipe (`state:draft|scheduled`). This also holds for the reference. A draft with no `invoice_date` set is only matched by a `period` when that period contains today. To list drafts irrespective of date, pass `state:draft` without a `period`; to narrow them down in time, use `created_after` or `updated_after`. Example: state:open,period:this_year.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `sort` (`string`, optional): Sorts the list on date, so the newest (`date_desc`) or the oldest (`date_asc`) items come first. Allowed values: date_desc, date_asc. One of: `date_desc`, `date_asc`.

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

### `moneybird_list_subscription_templates`

List Subscription Templates · Read-only

List subscription templates (plans) of an administration.
Returns subscription templates including id, administration_id, workflow_id, document_style_id, mergeable, contact_can_update, products.
Use to find a template before creating subscriptions.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.

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

### `moneybird_list_subscriptions`

List Subscriptions · Read-only

List customer subscriptions.
Returns a page of subscriptions including id, administration_id, start_date, end_date, frequency, frequency_type, reference.
Use to review recurring plans per contact.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, required): A unique record identifier. Example: 401892365587990113.

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

### `moneybird_list_tax_rates`

List Tax Rates · Read-only

List the tax rates (VAT rates) configured in an administration.
Returns tax rates including id, administration_id, name, percentage, tax_rate_type, show_tax, active.
Use to find a tax_rate_id before creating invoice, estimate, or document detail lines.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `percentage:21,tax_rate_type:sales_invoice`). Any filter you pass replaces the defaults below entirely, so include every key you need. Available filters: | **Filter** | **Type** | **Default** | **Description** | | --- | --- | --- | --- | | name | `String` | | Select tax rates by their full name | | partial_name | `String` | | Select tax rates with this substring in their name | | percentage | `Integer` | | Select tax rates with the specified percentage, e.g. specify `21` for 21% | | tax_rate_type | `String` | `all` | `all`, `general_journal_document`, `purchase_invoice` or `sales_invoice` | | country | `String` | | Select tax rates with the specified country. Must be a 2 letter abbreviation following ISO 3166. Please note that only foreign tax rates will have this field set. Domestic tax rates will not have this set at the moment. | | show_tax | `Boolean` | | Use `true` to tax rates for which tax is shown on the invoice, `false` for when it's not shown. No value will select both | | active | `Boolean` | | Use `true` to select active tax rates. Use `false` for inactive tax rates. No value will select both | | created_after | `String` | | Tax rates created after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | | updated_after | `String` | | Tax rates updated after the given time (exclusive). ISO 8601 formatted string. The time to compare with is in UTC timezone | You can filter by multiple tax rate types at the same time by separating the values with a pipe (`tax_rate_type:purchase_invoice|sales_invoice`). Example: state:open,period:this_year.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.

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

### `moneybird_list_time_entries`

List Time Entries · Read-only

List time entries, optionally filtered by period, contact or project.
Returns a page of time entries including id, administration_id, contact_id, project_id, sales_invoice_id, user_id, started_at.
Use to review logged hours before invoicing.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:all`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | --- | --- | --- | --- | | state | `String` | `all` | `all`, `open` or `non_billable` | | period | `String` | `this_year` | This can either be the description of a period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom period (`201301..201302`, `20130101..20130131`) | | contact_id | `Integer` | | Select time entries belonging to a certain contact | | include_nil_contacts | `Boolean` | false | Whether to include time entries that have no assigned contact | | include_active | `Boolean` | false | Whether to include active time entries i.e. time entries without ended_at | | project_id | `Integer` | | Select time entries belonging to a certain project | | user_id | `Integer` | | Select time entries belonging to a certain user | | day | `Date` | | Select time entries on a specific date | You can filter by multiple states at the same time as well. To do this, separate the state values by a pipe: `state:open|non_billable`. Example: state:open,period:this_year.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `query` (`string`, optional): Free-text search across the time entry description. Example: acme.

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

### `moneybird_list_typeless_documents`

List Typeless Documents · Read-only

List typeless documents (uploaded documents whose type is not yet known).
Returns a page of typeless documents including id, administration_id, contact_id, contact, reference, date, state.
Use to find documents that still need to be classified.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `filter` (`string`, optional): Filters are `key:value` terms separated by commas (e.g. `period:this_year,state:open`). Any filter you pass replaces the defaults below entirely, so include every key you need — in particular pass an explicit `period` (a named period or a `YYYYMMDD..YYYYMMDD` range) to look beyond the default financial year. Available filters: | **Filter** | **Type** | **Default** | **Description** | | - | - | - | - | | period | `String` | `this_year` | A named period (`this_week`, `prev_week`, `next_week`, `this_month`, `prev_month`, `next_month`, `this_quarter`, `prev_quarter`, `next_quarter`, `this_year`, `prev_year`, `next_year`) or a custom range (`201301..201302`, `20130101..20130131`) | | state | `String` | `all` | `all`, `new`, `saved`, `open`, `paid`, `late` or `pending_payment`. `paid`, `late` and `pending_payment` only apply to documents with a payment lifecycle (purchase invoices and receipts) | | recurring | `String` | `all` | `all`, `enabled` or `disabled` | | attachment | `String` | `all` | `all`, `with` or `without` | | reference | `String` | | Documents with the given reference value | | contact_id | `Integer` | | Documents belonging to the given contact | | ledger_account_id | `Integer` | | Documents booking against the given ledger account | | updated_after | `String` | | ISO 8601 timestamp in UTC; documents updated strictly after this time | Multiple values for `state`, `recurring` and `attachment` can be combined with a pipe, e.g. `state:open|paid`. Example: state:open,period:this_year.
- `new_filter` (`string`, optional): String terms, example: `key1:value1,key2:value2`. Example: example.
- `page` (`integer`, optional): Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
- `per_page` (`integer`, optional): Number of records per page, between 1 and 100. The default is 25. Example: 50.
- `sort` (`string`, optional): Sorts the list on date, so the newest (`date_desc`) or the oldest (`date_asc`) items come first. Allowed values: date_desc, date_asc. One of: `date_desc`, `date_asc`.

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

### `moneybird_list_users`

List Users · Read-only

List the users who have access to a Moneybird administration.
Returns users including id, name, created_at, updated_at, email, email_validated, language.
Use to find user ids for time entries and task assignment.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `include_accountants` (`boolean`, optional): Set to true to include accountant users. Example: false.
- `include_api_users` (`boolean`, optional): Set to true to include API users created by OAuth applications. Example: false.
- `include_inactive` (`boolean`, optional): Set to true to include users that have been deactivated. Example: false.

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

### `moneybird_list_workflows`

List Workflows · Read-only

List the invoice and estimate workflows of an administration.
Returns workflows including id, administration_id, type, name, default, currency, language.
Use to find a workflow_id for sales invoices, estimates, or contacts.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.

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

### `moneybird_add_contact_note`

Add Contact Note · Write

Add a note to a contact.
Returns the created note including id, administration_id, entity_id, entity_type, user_id, assignee_id, todo.
Use to record a remark on the contact timeline.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, required): Id of the contact. Use list_contacts to find it.
- `assignee_id` (`string`, optional): Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. Example: 401892365587990113.
- `note` (`string`, optional): **Required**. Text for the note or to-do. Example: Called the customer about the open invoice..
- `todo` (`boolean`, optional): If `true` the note is a to-do. Example: sales_invoices.

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

### `moneybird_add_estimate_note`

Add Estimate Note · Write

Add a note to an estimate.
Returns the created note including id, administration_id, entity_id, entity_type, user_id, assignee_id, todo.
Use to record internal remarks on an estimate.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `estimate_id` (`string`, required): Printed estimate number, for example 2026-0001. Example: 2026-0001.
- `assignee_id` (`string`, optional): Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. Example: 401892365587990113.
- `note` (`string`, optional): **Required**. Text for the note or to-do. Example: Called the customer about the open invoice..
- `todo` (`boolean`, optional): If `true` the note is a to-do. Example: sales_invoices.

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

### `moneybird_add_purchase_invoice_note`

Add Purchase Invoice Note · Write

Add a note to a purchase invoice.
Returns the created note including id, administration_id, entity_id, entity_type, user_id, assignee_id, todo.
Use to record internal remarks.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `purchase_invoice_id` (`string`, required): Id of the purchase invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `assignee_id` (`string`, optional): Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. Example: 401892365587990113.
- `note` (`string`, optional): **Required**. Text for the note or to-do. Example: Called the customer about the open invoice..
- `todo` (`boolean`, optional): If `true` the note is a to-do. Example: sales_invoices.

Example input: `{"administration_id":"<administration_id>","purchase_invoice_id":"<purchase_invoice_id>"}`

### `moneybird_add_receipt_note`

Add Receipt Note · Write

Add a note to a receipt.
Returns the created note including id, administration_id, entity_id, entity_type, user_id, assignee_id, todo.
Use to record internal remarks.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `receipt_id` (`string`, required): Id of the receipt. Use the matching list tool to find it. Example: 401892365587990113.
- `assignee_id` (`string`, optional): Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. Example: 401892365587990113.
- `note` (`string`, optional): **Required**. Text for the note or to-do. Example: Called the customer about the open invoice..
- `todo` (`boolean`, optional): If `true` the note is a to-do. Example: sales_invoices.

Example input: `{"administration_id":"<administration_id>","receipt_id":"<receipt_id>"}`

### `moneybird_add_sales_invoice_note`

Add Sales Invoice Note · Write

Add a note to a sales invoice.
Returns the created note including id, administration_id, entity_id, entity_type, user_id, assignee_id, todo.
Use to record internal remarks on an invoice.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `sales_invoice_id` (`string`, required): Id of the sales invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `assignee_id` (`string`, optional): Assign to-do to user. Should be a valid user id. If assignee_id is provided the note will be a to-do. Example: 401892365587990113.
- `note` (`string`, optional): **Required**. Text for the note or to-do. Example: Called the customer about the open invoice..
- `todo` (`boolean`, optional): If `true` the note is a to-do. Example: sales_invoices.

Example input: `{"administration_id":"<administration_id>","sales_invoice_id":"<sales_invoice_id>"}`

### `moneybird_bill_estimate`

Bill Estimate · Write

Create a sales invoice from an accepted estimate.
Returns the updated estimate including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use after the customer accepts the estimate.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `estimate_id` (`string`, required): Printed estimate number, for example 2026-0001. Example: 2026-0001.

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

### `moneybird_change_estimate_state`

Change Estimate State · Write

Change the state of an estimate, for example to accepted or rejected.
Returns the updated estimate including id, administration_id, contact_id, contact, contact_person_id, contact_person, estimate_id.
Use to record the customer's decision. It does not send or bill the estimate.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `estimate_id` (`string`, required): Printed estimate number, for example 2026-0001. Example: 2026-0001.
- `state` (`string`, optional): Can be accepted, rejected, open, late, billed or archived. Example: open.

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

### `moneybird_create_contact`

Create Contact · Write

Create a new contact. A company_name, or a firstname and lastname, is required.
Returns the created contact including id, administration_id, company_name, firstname, lastname, address1, address2.
Use list_contacts first to avoid creating a duplicate.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `address1` (`string`, optional): Primary street address of the contact. Example: Keizersgracht 1.
- `address2` (`string`, optional): Secondary address line (e.g. apartment number, building name). Example: Floor 2.
- `bank_account` (`string`, optional): The bank account number (IBAN) of the contact. Used for outgoing payments and displayed on documents. Example: NL91ABNA0417164300.
- `chamber_of_commerce` (`string`, optional): The CoC (Chamber of Commerce) registration number of the contact's business. Example: 12345678.
- `city` (`string`, optional): City or town of the contact's address. Example: Amsterdam.
- `company_name` (`string`, optional): A contact requires a non-blank `company_name`, `firstname` or `lastname`. Example: Acme B.V..
- `contact_person` (`object`, optional): An optional initial contact person to create along with the contact. Additional contact persons can be managed via the contact persons endpoint.
- `country` (`string`, optional): ISO two-character country code, e.g. NL or DE. Example: NL.
- `custom_fields_attributes` (`array`, optional): Array of custom field values. Each entry needs the custom field id (from list_custom_fields) and a value. Example: [{"id": "401892365587990113", "value": "PO-123"}].
- `customer_id` (`string`, optional): Will be assigned automatically if empty. Should be unique for the administration. Example: 1042.
- `delivery_method` (`string`, optional): Can be `Email`, `Simplerinvoicing`, `Peppol`, `Manual` or `Post`. Example: Email.
- `direct_debit` (`boolean`, optional): When `true`, invoices for this contact are collected via SEPA direct debit. Requires SEPA fields to be configured. Example: true.
- `email_ubl` (`boolean`, optional): When `true`, a UBL (Universal Business Language) XML file is attached when emailing invoices to this contact. Enables machine-readable invoice processing. Example: true.
- `estimate_workflow_id` (`string`, optional): Should be a valid estimate workflow id. Example: 401892365587990113.
- `firstname` (`string`, optional): A contact requires a non-blank `company_name`, `firstname` or `lastname`. Example: Jane.
- `invoice_workflow_id` (`string`, optional): Should be a valid invoice workflow id. Example: 401892365587990113.
- `lastname` (`string`, optional): A contact requires a non-blank `company_name`, `firstname` or `lastname`. Example: Doe.
- `phone` (`string`, optional): Phone number of the contact. Example: +31 20 123 4567.
- `send_estimates_to_attention` (`string`, optional): The name of the person to address estimates to (attention line). Example: example.
- `send_estimates_to_email` (`string`, optional): Should be one or more valid email addresses, separated by a comma. Example: example.
- `send_invoices_to_attention` (`string`, optional): The name of the person to address invoices to (attention line), e.g. "Finance Department". Example: example.
- `send_invoices_to_email` (`string`, optional): Should be one or more valid email addresses, separated by a comma. Example: example.
- `sepa_active` (`boolean`, optional): When `true`, all other SEPA fields are required. Example: true.
- `sepa_bic` (`string`, optional): Should be a valid BIC. Example: ABNANL2A.
- `sepa_iban` (`string`, optional): Should be a valid IBAN. Example: NL91ABNA0417164300.
- `sepa_iban_account_name` (`string`, optional): The account holder name for the SEPA direct debit IBAN. Example: example.
- `sepa_mandate_date` (`string`, optional): Should be a date in the past. Example: 2026-01-31.
- `sepa_mandate_id` (`string`, optional): Should be unique for the administration. Example: 401892365587990113.
- `sepa_sequence_type` (`string`, optional): Can be `RCUR`, `FRST`, `OOFF` or `FNAL`. Example: example.
- `si_identifier` (`string`, optional): The Peppol/e-invoicing identifier value for this contact. The format depends on the `si_identifier_type`. Example: example.
- `si_identifier_type` (`string`, optional): Can be `0002`, `0007`, `0009`, `0037`, `0060`, `0088`, `0096`, `0097`, `0106`, `0130`, `0135`, `0142`, `0151`, `0183`, `0184`, `0188`, `0190`, `0191`, `0192`, `0193`, `0195`, `0196`, `0198`, `0199`, `0200`, `0201`, `0204`, `0205`, `0208`, `0209`, `0210`, `0211`, `0212`, `0213`, `0215`, `0216`, `0221`, `0230`, `9910`, `9913`, `9914`, `9915`, `9918`, `9919`, `9920`, `9922`, `9923`, `9924`, `9925`, `9926`, `9927`, `9928`, `9929`, `9930`, `9931`, `9932`, `9933`, `9934`, `9935`, `9936`, `9937`, `9938`, `9939`, `9940`, `9941`, `9942`, `9943`, `9944`, `9945`, `9946`, `9947`, `9948`, `9949`, `9950`, `9951`, `9952`, `9953`, `9957` or `9959`. Example: example.
- `tax_number` (`string`, optional): The tax identification number (VAT number) of the contact, e.g. `NL123456789B01`. Example: NL123456789B01.
- `zipcode` (`string`, optional): Postal code or ZIP code of the contact's address. Example: 1011 AB.

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

### `moneybird_create_contact_person`

Create Contact Person · Write

Add a contact person to a contact.
Returns the created contact person including id, contact_id, administration_id, firstname, lastname, phone, email.
Use for a named person within a company contact.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, required): Id of the contact. Use list_contacts to find it.
- `department` (`string`, optional): Department or job title of the contact person, for example Finance. Example: Finance.
- `email` (`string`, optional): Should be a valid email addresses. Example: billing@example.com.
- `firstname` (`string`, optional): First name of the person. Example: Jane.
- `lastname` (`string`, optional): Last name of the person. Example: Doe.
- `phone` (`string`, optional): Phone number of the person, for example +31 20 123 4567. Example: +31 20 123 4567.

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

### `moneybird_create_credit_invoice`

Create Credit Invoice · Write

Duplicate a sales invoice into a new credit invoice.
Returns the new credit invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use to reverse or correct an invoice that was already sent.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `sales_invoice_id` (`string`, required): Id of the sales invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","sales_invoice_id":"<sales_invoice_id>"}`

### `moneybird_create_estimate`

Create Estimate · Write

Create an estimate (quote) in draft state for a contact.
Returns the created estimate including id, administration_id, contact_id, contact, contact_person_id, contact_person, estimate_id.
Use list_contacts and list_tax_rates first to find ids. Use send_estimate afterwards to deliver it.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `contact_person_id` (`string`, optional): Should be a valid contact person id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Defaults to the workflow's currency. Example: EUR.
- `custom_fields_attributes` (`array`, optional): Array of custom field values. Each entry needs the custom field id (from list_custom_fields) and a value. Example: [{"id": "401892365587990113", "value": "PO-123"}].
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `discount` (`number`, optional): Discount percentage, e.g. 10,0%. Should be a number 0 <= *n* <= 100. Example: 10.
- `document_style_id` (`string`, optional): Default document style is used when value is not provided. Should be a valid document style id. Example: 401892365587990113.
- `estimate_date` (`string`, optional): The date of the estimate. Defaults to the current date. Example: 2026-01-31.
- `estimate_sequence_id` (`string`, optional): The ID of the numbering sequence to use for the estimate number. If not provided, the administration default is used. Example: 401892365587990113.
- `first_due_interval` (`integer`, optional): The number of days after the estimate date before the estimate expires. Defaults to the first workflow step's due interval. Example: 14.
- `language` (`string`, optional): Can be `bg`, `cs`, `da`, `de`, `el`, `en`, `es`, `fr`, `hr`, `hu`, `it`, `no`, `nl`, `nl-be`, `pl`, `pt`, `ro`, `sv`, `tr` or `uk`. Example: example.
- `original_sales_invoice_id` (`string`, optional): The ID of the sales invoice this estimate was created from (e.g. for credit notes or revised estimates). Example: 401892365587990113.
- `post_text` (`string`, optional): Closing text displayed below the details on the estimate document. Defaults to the workflow's post-text. Example: example.
- `pre_text` (`string`, optional): Introductory text displayed above the details on the estimate document. Defaults to the workflow's pre-text. Example: example.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the estimate are inclusive of tax. Defaults to the workflow's setting. Example: false.
- `reference` (`string`, optional): Your own reference for this estimate, e.g. a project code or PO number. Visible to the recipient. Example: PO-2026-0042.
- `remove_estimate_sequence_id` (`string`, optional): Set to `true` to remove the assigned numbering sequence, reverting to the administration default. Example: 401892365587990113.
- `show_tax` (`boolean`, optional): Whether to show tax amounts on the estimate. Useful for non-VAT registered businesses or tax-exempt clients. Defaults to the workflow's setting. Example: true.
- `workflow_id` (`string`, optional): If value is not provided, the workflow saved in the contact is used. If the contact doesn't have a default workflow, the administration's default workflow is used. Should be a valid workflow id. Example: 401892365587990113.

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

### `moneybird_create_external_sales_invoice`

Create External Sales Invoice · Write

Import an external sales invoice issued in another system.
Returns the created external sales invoice including id, administration_id, contact_id, contact, date, state, due_date.
Use to bring outside revenue into the books.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `date` (`string`, optional): The date of the invoice. Example: 2026-01-31.
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `due_date` (`string`, optional): The date by which the invoice should be paid. Example: 2026-02-28.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the invoice are inclusive of tax. Defaults to the administration setting. Example: false.
- `reference` (`string`, optional): The invoice number or reference from the external system that created this invoice, e.g. a webshop order ID. Example: PO-2026-0042.
- `source` (`string`, optional): The name of the external system that created this invoice, e.g. your webshop or POS system name. Example: example.
- `source_url` (`string`, optional): A URL linking back to the invoice in the external system. Example: example.

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

### `moneybird_create_general_document`

Create General Document · Write

Create a general document.
Returns the created general document including id, administration_id, contact_id, contact, reference, date, due_date.
Use for bookkeeping records that are neither invoices nor receipts.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `date` (`string`, optional): **Required**. Example: 2026-01-31.
- `due_date` (`string`, optional): Date by which the document is due, formatted YYYY-MM-DD. Example: 2026-02-28.
- `reference` (`string`, optional): **Required**. Example: PO-2026-0042.
- `reminder` (`object`, optional): Creates a reminder to-do for this document.
- `reminder_date` (`string`, optional): Date on which Moneybird should remind you about the document, formatted YYYY-MM-DD. Example: 2026-02-14.

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

### `moneybird_create_general_journal_document`

Create General Journal Document · Write

Create a general journal document with manual journal entries.
Returns the created general journal document including id, administration_id, reference, date, journal_type, created_at, updated_at.
Debits and credits must balance. Use list_ledger_accounts to find ledger_account_id values.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `date` (`string`, optional): Date of the journal entry. Defaults to today. Example: 2026-01-31.
- `general_journal_document_entries_attributes` (`array`, optional): Array of journal entry lines. Each line takes ledger_account_id, debit or credit (decimal string), description, tax_rate_id, project_id and contact_id; to change a line on update include its id. Total debit must equal total credit. Example: [{"ledger_account_id": "401892365587990113", "debit": "100.00"}, {"ledger_account_id": "401892365587990114", "credit": "100.00"}].
- `journal_type` (`string`, optional): The only journal type is `fiscal_year_ending`, for the entry that closes a fiscal year. Leave it out for a normal journal entry. Allowed values: fiscal_year_ending. One of: `fiscal_year_ending`.
- `reference` (`string`, optional): Your own reference for this record, for example a project code or order number. Example: PO-2026-0042.

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

### `moneybird_create_ledger_account`

Create Ledger Account · Write

Create a new ledger account in the chart of accounts.
Returns the created ledger account including id, administration_id, name, account_type, account_id, parent_id, active.
Use when a bookkeeping category is missing. Use list_ledger_accounts first to avoid duplicates.

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

Inputs:

- `account_type` (`string`, required): Type of ledger account, which decides where it appears in the reports, for example expenses, revenue, non_current_assets or equity. Allowed values: non_current_assets, current_assets, equity, provisions, non_current_liabilities, current_liabilities, revenue, direct_costs, expenses, other_income_expenses. One of: `non_current_assets`, `current_assets`, `equity`, `provisions`, `non_current_liabilities`, `current_liabilities`, `revenue`, `direct_costs`, `expenses`, `other_income_expenses`.
- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `name` (`string`, required): Should be unique for this combination of administration and account type. Example: Acme.
- `rgs_code` (`string`, required): Existing RGS version 3.5 code, e.g. 'WMfoBelMfo'. Example: example.
- `account_id` (`string`, optional): Optional field, also known as general ledger code. Should be unique. Example: 401892365587990113.
- `allowed_document_types` (`string`, optional): Restricts the document types this ledger account can be used on. Defaults to a set derived from the `account_type`. Allowed values: sales_invoice, purchase_invoice, general_journal_document, financial_mutation, payment. One of: `sales_invoice`, `purchase_invoice`, `general_journal_document`, `financial_mutation`, `payment`.
- `description` (`string`, optional): Free-text description of this record. Example: Consulting services.
- `parent_id` (`string`, optional): Id of the parent ledger account. Should be a valid ledger account id. Example: 401892365587990113.

Example input: `{"account_type":"non_current_assets","administration_id":"<administration_id>","name":"<name>","rgs_code":"WMfoBelMfo"}`

### `moneybird_create_product`

Create Product · Write

Create a product or service with a default price and tax rate.
Returns the created product including id, administration_id, description, title, identifier, price, currency.
Use list_tax_rates and list_ledger_accounts first to find ids.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `ledger_account_id` (`string`, required): Should be a valid ledger account id. Example: 401892365587990113.
- `price` (`string`, required): An amount of money. Both a decimal and a string '10,95' are accepted. A string is bound to the same range as a number, -1,000,000,000 <= *n* <= 1,000,000,000. Example: 125.00.
- `checkout_description` (`string`, optional): A description shown on the checkout page when selling this product online via Moneybird checkout. Example: example.
- `checkout_type` (`string`, optional): Can be `product` or `subscription`. Example: example.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `description` (`string`, optional): A description of the product. Used as the default detail description when adding this product to a document. Example: Consulting services.
- `document_style_id` (`string`, optional): Should be a valid document style id. Example: 401892365587990113.
- `frequency` (`integer`, optional): Should be an integer >= 1. Example: 10.
- `frequency_preset` (`string`, optional): A predefined billing interval label for subscription products, e.g. `monthly`, `quarterly`, `yearly`. Example: example.
- `frequency_type` (`string`, optional): Can be `day`, `week`, `month`, `quarter` or `year`. Example: example.
- `identifier` (`string`, optional): Should be unique for the administration. Example: SKU-1001.
- `max_amount_per_order` (`integer`, optional): When `checkout_type` is `subscription`, should be an integer 0 <= *n* < 2. Example: 10.
- `product_type` (`string`, optional): Can be `digital_service`, `service` or `product`. Example: example.
- `tax_rate_id` (`string`, optional): Should be a valid tax rate id. Example: 401892365587990113.
- `title` (`string`, optional): The name of the product, displayed on invoices and estimates. Example: example.
- `vat_rate_type` (`string`, optional): Can be `standard` or `reduced`. Example: example.
- `workflow_id` (`string`, optional): Should be a valid workflow id. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","ledger_account_id":"<ledger_account_id>","price":"<price>"}`

### `moneybird_create_project`

Create Project · Write

Create a new project.
Returns the created project including id, name, state, budget.
Use before logging time or booking revenue against a project.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `name` (`string`, required): Should be unique for the administration. Example: Acme.
- `budget` (`string`, optional): The budget for this project in hours. Both a decimal and a string are accepted. Example: 1.0.

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

### `moneybird_create_purchase_invoice`

Create Purchase Invoice · Write

Create a purchase invoice (supplier bill).
Returns the created purchase invoice including id, administration_id, contact_id, contact, reference, date, due_date.
Use list_contacts, list_tax_rates and list_ledger_accounts first to find ids.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `date` (`string`, optional): The date on the supplier's invoice. Example: 2026-01-31.
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `due_date` (`string`, optional): The date by which the invoice should be paid. Example: 2026-02-28.
- `fiscal_allocations_attributes` (`array`, optional): Array of fiscal allocation lines, used to book partly private or partly deductible costs. Each line takes ledger_account_id, amount and optionally tax_rate_id. Most documents do not need this.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the purchase invoice are inclusive of tax. Defaults to the administration setting. Example: false.
- `reference` (`string`, optional): The supplier's invoice number or reference. Example: PO-2026-0042.
- `revenue_invoice` (`boolean`, optional): When `true`, this purchase invoice is treated as a revenue invoice (e.g. a credit note from a supplier). Revenue invoices are booked as income instead of expenses. Example: true.

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

### `moneybird_create_purchase_invoice_payment`

Create Purchase Invoice Payment · Write

Register a payment on a purchase invoice.
Returns the created payment including id, administration_id, invoice_type, invoice_id, financial_account_id, user_id, payment_transaction_id.
Use list_financial_accounts to find the financial_account_id the money left from.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `payment_date` (`string`, required): The date on which the payment was made. Example: 2026-01-31.
- `price` (`string`, required): The amount paid in the document's currency. Example: 125.00.
- `purchase_invoice_id` (`string`, required): Id of the purchase invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `financial_account_id` (`string`, optional): The ID of the financial account (bank account or cash register) associated with this payment. Required for `private_payment` and `cash_payment` actions. Should be a valid financial account id. Example: 401892365587990113.
- `financial_mutation_id` (`string`, optional): The ID of the bank transaction to link this payment to. Required for `bank_transfer` actions. Should be a valid financial mutation id. Example: 401892365587990113.
- `invoice_id` (`string`, optional): The ID of the document to settle this payment against. Required for `invoices_settlement` actions. Should be a valid document id (sales invoice, purchase invoice, receipt, etc.). Example: 2026-0001.
- `ledger_account_id` (`string`, optional): The ID of the ledger account to book this payment to. Required for `balance_settlement` actions. Should be a valid ledger account id. Example: 401892365587990113.
- `manual_payment_action` (`string`, optional): Can be `private_payment` (needs financial_account_id), `payment_without_proof`, `cash_payment` (needs financial_account_id), `rounding_error`, `bank_transfer` (needs financial_mutation_id), `balance_settlement` (needs ledger_account_id) or `invoices_settlement` (needs invoice_id). `payment_without_proof` is only accepted when the administration allows payments without proof. Example: example.
- `price_base` (`string`, optional): Amount paid expressed in the base currency of the administration. Required when the document uses a different currency than the administration's base currency. Example: 125.00.
- `transaction_identifier` (`string`, optional): An external transaction reference, e.g. a bank transaction ID or PSP reference. Used to match the payment with financial mutations. Example: example.

Example input: `{"administration_id":"<administration_id>","payment_date":"<payment_date>","price":"<price>","purchase_invoice_id":"<purchase_invoice_id>"}`

### `moneybird_create_receipt`

Create Receipt · Write

Create a receipt for an expense.
Returns the created receipt including id, administration_id, contact_id, contact, reference, date, due_date.
Use list_tax_rates and list_ledger_accounts first to find ids.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `date` (`string`, optional): The date of the receipt. Example: 2026-01-31.
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `financial_account_id` (`string`, optional): Should be a valid financial account id. Example: 401892365587990113.
- `fiscal_allocations_attributes` (`array`, optional): Array of fiscal allocation lines, used to book partly private or partly deductible costs. Each line takes ledger_account_id, amount and optionally tax_rate_id. Most documents do not need this.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the receipt are inclusive of tax. Defaults to the administration setting. Example: false.
- `reference` (`string`, optional): A reference for this receipt, e.g. a receipt number or supplier name. Example: PO-2026-0042.

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

### `moneybird_create_receipt_payment`

Create Receipt Payment · Write

Register a payment on a receipt.
Returns the created payment including id, administration_id, invoice_type, invoice_id, financial_account_id, user_id, payment_transaction_id.
Use list_financial_accounts to find the financial_account_id.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `payment_date` (`string`, required): The date on which the payment was made. Example: 2026-01-31.
- `price` (`string`, required): The amount paid in the document's currency. Example: 125.00.
- `receipt_id` (`string`, required): Id of the receipt. Use the matching list tool to find it. Example: 401892365587990113.
- `financial_account_id` (`string`, optional): The ID of the financial account (bank account or cash register) associated with this payment. Required for `private_payment` and `cash_payment` actions. Should be a valid financial account id. Example: 401892365587990113.
- `financial_mutation_id` (`string`, optional): The ID of the bank transaction to link this payment to. Required for `bank_transfer` actions. Should be a valid financial mutation id. Example: 401892365587990113.
- `invoice_id` (`string`, optional): The ID of the document to settle this payment against. Required for `invoices_settlement` actions. Should be a valid document id (sales invoice, purchase invoice, receipt, etc.). Example: 2026-0001.
- `ledger_account_id` (`string`, optional): The ID of the ledger account to book this payment to. Required for `balance_settlement` actions. Should be a valid ledger account id. Example: 401892365587990113.
- `manual_payment_action` (`string`, optional): Can be `private_payment` (needs financial_account_id), `payment_without_proof`, `cash_payment` (needs financial_account_id), `rounding_error`, `bank_transfer` (needs financial_mutation_id), `balance_settlement` (needs ledger_account_id) or `invoices_settlement` (needs invoice_id). `payment_without_proof` is only accepted when the administration allows payments without proof. Example: example.
- `price_base` (`string`, optional): Amount paid expressed in the base currency of the administration. Required when the document uses a different currency than the administration's base currency. Example: 125.00.
- `transaction_identifier` (`string`, optional): An external transaction reference, e.g. a bank transaction ID or PSP reference. Used to match the payment with financial mutations. Example: example.

Example input: `{"administration_id":"<administration_id>","payment_date":"<payment_date>","price":"<price>","receipt_id":"<receipt_id>"}`

### `moneybird_create_recurring_sales_invoice`

Create Recurring Sales Invoice · Write

Create a recurring sales invoice that is generated on a schedule.
Returns the created recurring sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, workflow_id.
Use for fixed periodic billing. Use create_subscription for plan-based billing.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `auto_send` (`boolean`, optional): When `true`, each generated invoice is automatically sent to the contact via the configured delivery method. Example: true.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `contact_person_id` (`string`, optional): Should be a valid contact person id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Defaults to the workflow's currency. Example: EUR.
- `custom_fields_attributes` (`array`, optional): Array of custom field values. Each entry needs the custom field id (from list_custom_fields) and a value. Example: [{"id": "401892365587990113", "value": "PO-123"}].
- `desired_count` (`string`, optional): The maximum number of invoices to generate. Only applied when `has_desired_count` is `true`. Example: example.
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `discount` (`number`, optional): Discount percentage, e.g. 10,0%. Example: 10.
- `document_style_id` (`string`, optional): Should be a valid document style id. Example: 401892365587990113.
- `first_due_interval` (`integer`, optional): The number of days after the invoice date before each generated invoice is due. Defaults to the first workflow step's due interval. Example: 14.
- `frequency` (`string`, optional): The interval multiplier. Combined with `frequency_type` to determine the billing cycle, e.g. `frequency=2` with `frequency_type=month` creates an invoice every 2 months. Example: example.
- `frequency_type` (`string`, optional): Can be `day`, `week`, `month`, `quarter` or `year`. Example: example.
- `has_desired_count` (`boolean`, optional): When `true`, the recurring invoice will stop generating new invoices after `desired_count` invoices have been created. Example: true.
- `invoice_date` (`string`, optional): Should be in the future. Example: 2026-01-31.
- `mergeable` (`boolean`, optional): When `true`, generated invoices may be merged with other mergeable invoices for the same contact, if they share the same workflow, layout, currency, language and other invoice settings. Example: true.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on generated invoices are inclusive of tax. Defaults to the workflow's setting. Example: false.
- `reference` (`string`, optional): A reference to include on each generated invoice, e.g. a contract or project code. Example: PO-2026-0042.
- `update_contact` (`boolean`, optional): When `true`, the contact's address and other details are refreshed from the current contact record each time a new invoice is generated. Example: true.
- `workflow_id` (`string`, optional): Should be a valid workflow id. If not provided, the contact's invoice workflow is used. Example: 401892365587990113.

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

### `moneybird_create_sales_invoice`

Create Sales Invoice · Write

Create a sales invoice in draft state for a contact.
Returns the created sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use list_contacts, list_tax_rates and list_ledger_accounts first to find ids. Use send_sales_invoice afterwards to deliver it.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, optional): The ID of the contact associated with the sales invoice. This is mandatory when setting the contact_person_id. Should be a valid contact id. Example: 401892365587990113.
- `contact_person_id` (`string`, optional): The ID of the contact person associated with the sales invoice. Should be a valid contact person id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Defaults to the workflow's currency. Example: EUR.
- `custom_fields_attributes` (`array`, optional): Array of custom field values. Each entry needs the custom field id (from list_custom_fields) and a value. Example: [{"id": "401892365587990113", "value": "PO-123"}].
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `discount` (`number`, optional): Discount percentage applied to the entire invoice, e.g. `10.0` for 10%. Example: 10.
- `document_style_id` (`string`, optional): Default document style is used if value is not provided. Should be a valid document style id. Example: 401892365587990113.
- `first_due_interval` (`integer`, optional): The number of days after the invoice date before the invoice is due. Defaults to the first workflow step's due interval. Example: 14.
- `from_payment_request` (`boolean`, optional): Set to `true` when the invoice was created from a Moneybird payment request. Example: true.
- `invoice_date` (`string`, optional): When left empty, it is filled in when the invoice is sent. Example: 2026-01-31.
- `invoice_sequence_id` (`string`, optional): The ID of the numbering sequence to use for the invoice number. If not provided, the administration default is used. Example: 401892365587990113.
- `original_estimate_id` (`string`, optional): The ID of the estimate this invoice was created from. Used to link an invoice to its originating estimate. Example: 401892365587990113.
- `payment_conditions` (`string`, optional): Free-text payment conditions printed on the invoice, e.g. "Payment within 30 days". Defaults to the workflow's payment conditions. Example: Payable within 14 days..
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the invoice are inclusive of tax. Defaults to the workflow's setting. Example: false.
- `reference` (`string`, optional): Your own reference for this invoice, e.g. a project code or PO number. Visible to the recipient. Example: PO-2026-0042.
- `time_entry_ids` (`array`, optional): Array of time entry ids to bill on this invoice. Use list_time_entries to find them. Example: ["401892365587990113"].
- `workflow_id` (`string`, optional): If value is not provided, the workflow saved in the contact is used. If the contact doesn't have a default workflow, the administration's default workflow is used. Should be a valid workflow id. Example: 401892365587990113.

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

### `moneybird_create_sales_invoice_payment`

Create Sales Invoice Payment · Write

Register a payment against a sales invoice.
Returns the created payment including id, administration_id, invoice_type, invoice_id, financial_account_id, user_id, payment_transaction_id.
Use list_financial_accounts to find the financial_account_id the money arrived in.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `payment_date` (`string`, required): The date on which the payment was made. Example: 2026-01-31.
- `price` (`string`, required): The amount paid in the document's currency. Example: 125.00.
- `sales_invoice_id` (`string`, required): Id of the sales invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `financial_account_id` (`string`, optional): The ID of the financial account (bank account or cash register) associated with this payment. Required for `private_payment` and `cash_payment` actions. Should be a valid financial account id. Example: 401892365587990113.
- `financial_mutation_id` (`string`, optional): The ID of the bank transaction to link this payment to. Required for `bank_transfer` actions. Should be a valid financial mutation id. Example: 401892365587990113.
- `invoice_id` (`string`, optional): The ID of the document to settle this payment against. Required for `invoices_settlement` actions. Should be a valid document id (sales invoice, purchase invoice, receipt, etc.). Example: 2026-0001.
- `ledger_account_id` (`string`, optional): The ID of the ledger account to book this payment to. Required for `balance_settlement` actions. Should be a valid ledger account id. Example: 401892365587990113.
- `manual_payment_action` (`string`, optional): Can be `private_payment` (needs financial_account_id), `payment_without_proof`, `cash_payment` (needs financial_account_id), `rounding_error`, `bank_transfer` (needs financial_mutation_id), `balance_settlement` (needs ledger_account_id) or `invoices_settlement` (needs invoice_id). `payment_without_proof` is only accepted when the administration allows payments without proof. Example: example.
- `price_base` (`string`, optional): Amount paid expressed in the base currency of the administration. Required when the document uses a different currency than the administration's base currency. Example: 125.00.
- `transaction_identifier` (`string`, optional): An external transaction reference, e.g. a bank transaction ID or PSP reference. Used to match the payment with financial mutations. Example: example.

Example input: `{"administration_id":"<administration_id>","payment_date":"<payment_date>","price":"<price>","sales_invoice_id":"<sales_invoice_id>"}`

### `moneybird_create_subscription`

Create Subscription · Write

Create a subscription for a contact and product.
Returns the created subscription including id, administration_id, start_date, end_date, frequency, frequency_type, reference.
Use list_contacts and list_products first to find ids.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `product_id` (`string`, required): Should be a valid product id. Example: 401892365587990113.
- `start_date` (`string`, required): Date the subscription starts, formatted YYYY-MM-DD. Example: 2026-01-01.
- `amount` (`string`, optional): Quantity of the product billed each period. Example: 1.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `contact_person_id` (`string`, optional): Should be a valid contact person id. Example: 401892365587990113.
- `discount` (`number`, optional): Both a decimal and a string '10,95' are accepted. Example: 10.
- `document_style_id` (`string`, optional): Should be a valid document style id. Example: 401892365587990113.
- `end_date` (`string`, optional): Date the subscription ends, formatted YYYY-MM-DD. Leave empty for an open-ended subscription. Example: 2026-12-31.
- `frequency` (`integer`, optional): Number of periods between invoices, combined with `frequency_type`. Must be compatible with the product's frequency (e.g. a monthly product can be billed yearly). Defaults to the product's frequency. Example: 10.
- `frequency_type` (`string`, optional): Length of a single billing period, combined with `frequency`. Defaults to the product's frequency type. Allowed values: day, week, month, quarter, year. One of: `day`, `week`, `month`, `quarter`, `year`.
- `mergeable` (`boolean`, optional): Merge invoices from this subscription with other mergeable invoices for the same contact before sending. Only applies when invoices are sent automatically. Example: true.
- `prices_are_incl_tax` (`boolean`, optional): Whether the amounts on the generated invoices are inclusive of tax. Example: false.
- `reference` (`string`, optional): Your own reference for this record, for example a project code or order number. Example: PO-2026-0042.

Example input: `{"administration_id":"<administration_id>","product_id":"<product_id>","start_date":"<start_date>"}`

### `moneybird_create_time_entry`

Create Time Entry · Write

Log a time entry for a user, optionally linked to a contact and project.
Returns the created time entry including id, administration_id, contact_id, project_id, sales_invoice_id, user_id, started_at.
Use list_users and list_projects first to find ids.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `description` (`string`, required): A description on how the time was spent. May be shown on the invoice. Example: Consulting services.
- `started_at` (`string`, required): The start time of the time entry. Rounded down to full minutes. Example: example.
- `user_id` (`string`, required): The employee for which the time should be entered. Should be a valid user id. Example: 401892365587990113.
- `billable` (`boolean`, optional): Whether this time entry is billable to the client. Example: true.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `ended_at` (`string`, optional): The end time of the time entry. Rounded down to full minutes. Omit to create a running (active) time entry. Example: example.
- `paused_duration` (`integer`, optional): Total paused duration in seconds, is rounded down to full minutes. Example: 10.
- `project_id` (`string`, optional): Should be a valid project id. Example: 401892365587990113.
- `sales_invoice_id` (`string`, optional): Should be a valid sales invoice id. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","description":"<description>","started_at":"<started_at>","user_id":"<user_id>"}`

### `moneybird_link_financial_mutation_booking`

Link Financial Mutation Booking · Write

Link a financial mutation (bank line) to an invoice, document or ledger account.
Returns the financial mutation including id, administration_id, amount, code, date, message, contra_account_name.
Use to reconcile a bank line. Use unlink_financial_mutation_booking to undo.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `financial_mutation_id` (`string`, required): Id of the financial mutation. Use the matching list tool to find it. Example: 401892365587990113.
- `booking_id` (`string`, optional): The id of the record to link, of the type set in `booking_type` (e.g. the ledger account id when `booking_type` is `LedgerAccount`). Not allowed for `NewPurchaseInvoice` and `NewReceipt` — those create a new record instead of linking an existing one. To link an existing purchase invoice or receipt, use `booking_type` `Document` with the document's id. Example: 401892365587990113.
- `booking_type` (`string`, optional): The type of record to link the mutation to. Allowed values: SalesInvoice, Document, LedgerAccount, PaymentTransactionBatch, PurchaseTransaction, NewPurchaseInvoice, NewReceipt, PaymentTransaction, PurchaseTransactionBatch, ExternalSalesInvoice, Payment, VatDocument. One of: `SalesInvoice`, `Document`, `LedgerAccount`, `PaymentTransactionBatch`, `PurchaseTransaction`, `NewPurchaseInvoice`, `NewReceipt`, `PaymentTransaction`, `PurchaseTransactionBatch`, `ExternalSalesInvoice`, `Payment`, `VatDocument`.
- `description` (`string`, optional): Free-text description of this record. Example: Consulting services.
- `mark_open_sepa_transaction_as_paid` (`boolean`, optional): Set to true to mark an open SEPA transaction of the linked invoice as paid when linking. Example: false.
- `payment_batch_identifier` (`string`, optional): Identifier of the payment batch to link when booking_type is PaymentTransactionBatch. Example: BATCH-2026-01.
- `price` (`string`, optional): Amount in the booking's own currency, used when linking a payment to an invoice. The same positive/negative rules apply as for `price_base` (see the table there). For a foreign-currency invoice both `price` and `price_base` are required; otherwise `price_base` alone is enough. Only used when `booking_type` is `SalesInvoice`, `ExternalSalesInvoice`, `Document` or `VatDocument`; every other booking type takes its amount from `price_base` or ignores it. Example: 125.00.
- `price_base` (`string`, optional): The booking amount, in the administration's base currency. This is the field that carries the amount for most booking types; when linking a payment to an invoice it is the base-currency counterpart of `price`. For `booking_type` `LedgerAccount` send the amount here — `price` is ignored. Whether to send a positive or a negative amount depends on `booking_type`: | **`booking_type`** | **Amount** | | --- | --- | | `SalesInvoice`, `ExternalSalesInvoice`, `Document` | Always positive. The payment direction is taken from the financial mutation, so refunds and credit notes also take a positive amount, whichever way the money moved | | `LedgerAccount` | Positive books in the same direction as the mutation, negative against it. Splitting a mutation over several bookings takes one request per part: an outgoing mutation of -95 consisting of 100 in costs and 5 received back takes one request with `100` and one with `-5`. One exception: once an incoming mutation has more booked than its own amount (its open amount went negative), positive and negative swap — a positive amount then books against the mutation | | `VatDocument` | The amount as it appears on the VAT return: positive when VAT is payable, negative for a refund | | `NewPurchaseInvoice`, `NewReceipt` | Positive when the mutation is outgoing (a purchase you paid), negative when it is incoming (money received back) | | `Payment`, `PaymentTransaction`, `PaymentTransactionBatch`, `PurchaseTransactionBatch`, `PurchaseTransaction` | Ignored — the amount comes from the record being linked |. Example: 125.00.
- `project_id` (`string`, optional): Should be a valid project id. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","financial_mutation_id":"<financial_mutation_id>"}`

### `moneybird_mark_sales_invoice_uncollectible`

Mark Sales Invoice Uncollectible · Write

Mark a sales invoice as uncollectible (bad debt).
Returns the updated sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use when payment is no longer expected.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `sales_invoice_id` (`string`, required): Id of the sales invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `book_method` (`string`, optional): Can be `revenue`. Example: example.
- `uncollectible_date` (`string`, optional): Date the invoice became uncollectible, formatted YYYY-MM-DD. Defaults to today. Example: 2026-01-31.

Example input: `{"administration_id":"<administration_id>","sales_invoice_id":"<sales_invoice_id>"}`

### `moneybird_send_estimate`

Send Estimate · Write

Send an estimate to the customer by email, post or manual delivery.
Returns the updated estimate including id, administration_id, contact_id, contact, contact_person_id, contact_person, estimate_id.
Use after create_estimate. This delivers the estimate to the customer.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `estimate_id` (`string`, required): Printed estimate number, for example 2026-0001. Example: 2026-0001.
- `delivery_method` (`string`, optional): How to deliver the document: Email, Manual, Post, Simplerinvoicing or Peppol. Defaults to the contact and workflow settings. Allowed values: Email, Manual. One of: `Email`, `Manual`.
- `email_address` (`string`, optional): Recipient email address. Only used when `delivery_method` is `Email`; defaults to the contact's email address. Example: billing@example.com.
- `email_message` (`string`, optional): Message included in the email. Only used when `delivery_method` is `Email`; defaults to the workflow's estimate email text. Example: Please find your invoice attached..
- `sign_online` (`boolean`, optional): Set to true to let the customer accept the estimate online. Example: false.

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

### `moneybird_send_sales_invoice`

Send Sales Invoice · Write

Send a sales invoice to the customer now, or schedule sending for a future date.
Returns the updated sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use after create_sales_invoice. This emails or delivers the invoice to the customer.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `sales_invoice_id` (`string`, required): Id of the sales invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `deliver_ubl` (`boolean`, optional): Attach a UBL (e-invoicing) file to the email. Only used when `delivery_method` is `Email`; defaults to the contact's UBL preference. Example: true.
- `delivery_method` (`string`, optional): How to deliver the document: Email, Manual, Post, Simplerinvoicing or Peppol. Defaults to the contact and workflow settings. Allowed values: Email, Peppol, Manual. One of: `Email`, `Peppol`, `Manual`.
- `email_address` (`string`, optional): Recipient email address. Only used when `delivery_method` is `Email`; overrides the contact's default email address. Example: billing@example.com.
- `email_message` (`string`, optional): Message included in the email. Only used when `delivery_method` is `Email`; defaults to the workflow's invoice email text. Example: Please find your invoice attached..
- `invoice_date` (`string`, optional): When scheduling, the date on which the invoice is sent. Example: 2026-01-31.
- `mergeable` (`boolean`, optional): When multiple scheduled invoices share the same contact, identity, workflow, document style, currency, language and invoice date, merge them into a single invoice before sending. Example: true.
- `sending_scheduled` (`boolean`, optional): Schedule the invoice to be sent in the future instead of immediately. Combine with `invoice_date` to set the date on which it is sent. Example: false.

Example input: `{"administration_id":"<administration_id>","sales_invoice_id":"<sales_invoice_id>"}`

### `moneybird_update_contact`

Update Contact · Write

Update fields of an existing contact. Only the fields you pass are changed.
Returns the updated contact including id, administration_id, company_name, firstname, lastname, address1, address2.
Use get_contact first to read current values.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, required): Id of the contact. Use list_contacts to find it.
- `address1` (`string`, optional): Primary street address of the contact. Example: Keizersgracht 1.
- `address2` (`string`, optional): Secondary address line (e.g. apartment number, building name). Example: Floor 2.
- `bank_account` (`string`, optional): The bank account number (IBAN) of the contact. Used for outgoing payments and displayed on documents. Example: NL91ABNA0417164300.
- `chamber_of_commerce` (`string`, optional): The CoC (Chamber of Commerce) registration number of the contact's business. Example: 12345678.
- `city` (`string`, optional): City or town of the contact's address. Example: Amsterdam.
- `company_name` (`string`, optional): A contact requires a non-blank `company_name`, `firstname` or `lastname`. Example: Acme B.V..
- `country` (`string`, optional): ISO two-character country code, e.g. NL or DE. Example: NL.
- `custom_fields_attributes` (`array`, optional): Array of custom field values. Each entry needs the custom field id (from list_custom_fields) and a value. Example: [{"id": "401892365587990113", "value": "PO-123"}].
- `customer_id` (`string`, optional): Will be assigned automatically if empty. Should be unique for the administration. Example: 1042.
- `delivery_method` (`string`, optional): Can be `Email`, `Simplerinvoicing`, `Peppol`, `Manual` or `Post`. Example: Email.
- `direct_debit` (`boolean`, optional): When `true`, invoices for this contact are collected via SEPA direct debit. Requires SEPA fields to be configured. Example: true.
- `email_ubl` (`boolean`, optional): When `true`, a UBL (Universal Business Language) XML file is attached when emailing invoices to this contact. Enables machine-readable invoice processing. Example: true.
- `estimate_workflow_id` (`string`, optional): Should be a valid estimate workflow id. Example: 401892365587990113.
- `firstname` (`string`, optional): A contact requires a non-blank `company_name`, `firstname` or `lastname`. Example: Jane.
- `invoice_workflow_id` (`string`, optional): Should be a valid invoice workflow id. Example: 401892365587990113.
- `lastname` (`string`, optional): A contact requires a non-blank `company_name`, `firstname` or `lastname`. Example: Doe.
- `phone` (`string`, optional): Phone number of the contact. Example: +31 20 123 4567.
- `send_estimates_to_attention` (`string`, optional): The name of the person to address estimates to (attention line). Example: example.
- `send_estimates_to_email` (`string`, optional): Should be one or more valid email addresses, separated by a comma. Example: example.
- `send_invoices_to_attention` (`string`, optional): The name of the person to address invoices to (attention line). Example: example.
- `send_invoices_to_email` (`string`, optional): Should be one or more valid email addresses, separated by a comma. Example: example.
- `sepa_active` (`boolean`, optional): When `true`, all other SEPA fields are required. Example: true.
- `sepa_bic` (`string`, optional): Should be a valid BIC. Example: ABNANL2A.
- `sepa_iban` (`string`, optional): Should be a valid IBAN. Example: NL91ABNA0417164300.
- `sepa_iban_account_name` (`string`, optional): The account holder name for the SEPA direct debit IBAN. Example: example.
- `sepa_mandate_date` (`string`, optional): Should be a date in the past. Example: 2026-01-31.
- `sepa_mandate_id` (`string`, optional): Should be unique for the administration. Example: 401892365587990113.
- `sepa_sequence_type` (`string`, optional): Can be `RCUR`, `FRST`, `OOFF` or `FNAL`. Example: example.
- `si_identifier` (`string`, optional): The Peppol/e-invoicing identifier value for this contact. The format depends on the `si_identifier_type`. Example: example.
- `si_identifier_type` (`string`, optional): Can be `0002`, `0007`, `0009`, `0037`, `0060`, `0088`, `0096`, `0097`, `0106`, `0130`, `0135`, `0142`, `0151`, `0183`, `0184`, `0188`, `0190`, `0191`, `0192`, `0193`, `0195`, `0196`, `0198`, `0199`, `0200`, `0201`, `0204`, `0205`, `0208`, `0209`, `0210`, `0211`, `0212`, `0213`, `0215`, `0216`, `0221`, `0230`, `9910`, `9913`, `9914`, `9915`, `9918`, `9919`, `9920`, `9922`, `9923`, `9924`, `9925`, `9926`, `9927`, `9928`, `9929`, `9930`, `9931`, `9932`, `9933`, `9934`, `9935`, `9936`, `9937`, `9938`, `9939`, `9940`, `9941`, `9942`, `9943`, `9944`, `9945`, `9946`, `9947`, `9948`, `9949`, `9950`, `9951`, `9952`, `9953`, `9957` or `9959`. Example: example.
- `tax_number` (`string`, optional): The tax identification number (VAT number) of the contact, e.g. `NL123456789B01`. Example: NL123456789B01.
- `zipcode` (`string`, optional): Postal code or ZIP code of the contact's address. Example: 1011 AB.

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

### `moneybird_update_contact_person`

Update Contact Person · Write

Update a contact person of a contact.
Returns the updated contact person including id, contact_id, administration_id, firstname, lastname, phone, email.
Only the fields you pass are changed.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, required): Id of the contact. Use list_contacts to find it.
- `contact_person_id` (`string`, required): Id of the contact person. Use the matching list tool to find it. Example: 401892365587990113.
- `department` (`string`, optional): Department or job title of the contact person, for example Finance. Example: Finance.
- `email` (`string`, optional): Should be a valid email addresses. Example: billing@example.com.
- `firstname` (`string`, optional): First name of the person. Example: Jane.
- `lastname` (`string`, optional): Last name of the person. Example: Doe.
- `phone` (`string`, optional): Phone number of the person, for example +31 20 123 4567. Example: +31 20 123 4567.

Example input: `{"administration_id":"<administration_id>","contact_id":"<contact_id>","contact_person_id":"<contact_person_id>"}`

### `moneybird_update_estimate`

Update Estimate · Write

Update a draft estimate. Only the fields you pass are changed.
Returns the updated estimate including id, administration_id, contact_id, contact, contact_person_id, contact_person, estimate_id.
Use get_estimate first to read current values.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `estimate_id` (`string`, required): Printed estimate number, for example 2026-0001. Example: 2026-0001.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `contact_person_id` (`string`, optional): Should be a valid contact person id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `custom_fields_attributes` (`array`, optional): Array of custom field values. Each entry needs the custom field id (from list_custom_fields) and a value. Example: [{"id": "401892365587990113", "value": "PO-123"}].
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `discount` (`number`, optional): Discount percentage, e.g. 10,0%. Should be a number 0 <= *n* <= 100. Example: 10.
- `document_style_id` (`string`, optional): Default document style is used when value is not provided. Should be a valid document style id. Example: 401892365587990113.
- `estimate_date` (`string`, optional): The date of the estimate. Example: 2026-01-31.
- `estimate_sequence_id` (`string`, optional): The ID of the numbering sequence to use for the estimate number. Example: 401892365587990113.
- `first_due_interval` (`integer`, optional): The number of days after the estimate date before the estimate expires. Example: 14.
- `language` (`string`, optional): Can be `bg`, `cs`, `da`, `de`, `el`, `en`, `es`, `fr`, `hr`, `hu`, `it`, `no`, `nl`, `nl-be`, `pl`, `pt`, `ro`, `sv`, `tr` or `uk`. Example: example.
- `original_sales_invoice_id` (`string`, optional): The ID of the sales invoice this estimate was created from. Example: 401892365587990113.
- `post_text` (`string`, optional): Closing text displayed below the details on the estimate document. Example: example.
- `pre_text` (`string`, optional): Introductory text displayed above the details on the estimate document. Example: example.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the estimate are inclusive of tax. Example: false.
- `reference` (`string`, optional): Your own reference for this estimate, e.g. a project code or PO number. Visible to the recipient. Example: PO-2026-0042.
- `remove_estimate_sequence_id` (`string`, optional): Set to `true` to remove the assigned numbering sequence, reverting to the administration default. Example: 401892365587990113.
- `show_tax` (`boolean`, optional): Whether to show tax amounts on the estimate. Example: true.
- `update_contact` (`boolean`, optional): When `true`, the contact's address and other details are updated on the estimate from the current contact record. Example: true.
- `workflow_id` (`string`, optional): If value is not provided, the workflow saved in the contact is used. If the contact doesn't have a default workflow, the administration's default workflow is used. Should be a valid workflow id. Example: 401892365587990113.

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

### `moneybird_update_external_sales_invoice`

Update External Sales Invoice · Write

Update an external sales invoice.
Returns the updated external sales invoice including id, administration_id, contact_id, contact, date, state, due_date.
Only the fields you pass are changed.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `external_sales_invoice_id` (`string`, required): Id of the external sales invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `date` (`string`, optional): The date of the invoice. Example: 2026-01-31.
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `due_date` (`string`, optional): The date by which the invoice should be paid. Example: 2026-02-28.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the invoice are inclusive of tax. Example: false.
- `reference` (`string`, optional): The invoice number or reference from the external system that created this invoice, e.g. a webshop order ID. Example: PO-2026-0042.
- `source` (`string`, optional): The name of the external system that created this invoice. Example: example.
- `source_url` (`string`, optional): A URL linking back to the invoice in the external system. Example: example.

Example input: `{"administration_id":"<administration_id>","external_sales_invoice_id":"<external_sales_invoice_id>"}`

### `moneybird_update_general_document`

Update General Document · Write

Update a general document.
Returns the updated general document including id, administration_id, contact_id, contact, reference, date, due_date.
Only the fields you pass are changed.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `general_document_id` (`string`, required): Id of the general document. Use the matching list tool to find it. Example: 401892365587990113.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `date` (`string`, optional): **Required**. Example: 2026-01-31.
- `due_date` (`string`, optional): Date by which the document is due, formatted YYYY-MM-DD. Example: 2026-02-28.
- `reference` (`string`, optional): **Required**. Example: PO-2026-0042.
- `reminder` (`object`, optional): Creates a reminder to-do for this document.
- `reminder_date` (`string`, optional): Date on which Moneybird should remind you about the document, formatted YYYY-MM-DD. Example: 2026-02-14.
- `remove_contact` (`boolean`, optional): Set to true to detach the contact from the document. Example: false.

Example input: `{"administration_id":"<administration_id>","general_document_id":"<general_document_id>"}`

### `moneybird_update_ledger_account`

Update Ledger Account · Write

Update the name, number or settings of an existing ledger account.
Returns the updated ledger account including id, administration_id, name, account_type, account_id, parent_id, active.
Use to rename or renumber a category.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `ledger_account_id` (`string`, required): Id of the ledger account. Use the matching list tool to find it. Example: 401892365587990113.
- `account_id` (`string`, optional): Optional field, also known as general ledger code. Should be unique. Example: 401892365587990113.
- `account_type` (`string`, optional): Type of ledger account, which decides where it appears in the reports, for example expenses, revenue, non_current_assets or equity. Allowed values: non_current_assets, current_assets, equity, provisions, non_current_liabilities, current_liabilities, revenue, direct_costs, expenses, other_income_expenses. One of: `non_current_assets`, `current_assets`, `equity`, `provisions`, `non_current_liabilities`, `current_liabilities`, `revenue`, `direct_costs`, `expenses`, `other_income_expenses`.
- `allowed_document_types` (`string`, optional): Restricts the document types this ledger account can be used on. Defaults to a set derived from the `account_type`. Allowed values: sales_invoice, purchase_invoice, general_journal_document, financial_mutation, payment. One of: `sales_invoice`, `purchase_invoice`, `general_journal_document`, `financial_mutation`, `payment`.
- `description` (`string`, optional): Free-text description of this record. Example: Consulting services.
- `name` (`string`, optional): Should be unique for this combination of administration and account type. Example: Acme.
- `parent_id` (`string`, optional): Id of the parent ledger account. Should be a valid ledger account id. Example: 401892365587990113.
- `rgs_code` (`string`, optional): Existing RGS version 3.5 code, e.g. 'WMfoBelMfo'. Example: example.

Example input: `{"administration_id":"<administration_id>","ledger_account_id":"<ledger_account_id>"}`

### `moneybird_update_product`

Update Product · Write

Update a product. Only the fields you pass are changed.
Returns the updated product including id, administration_id, description, title, identifier, price, currency.
Use get_product first to read current values.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `product_id` (`string`, required): Id of the product. Use the matching list tool to find it. Example: 401892365587990113.
- `checkout_description` (`string`, optional): A description shown on the checkout page when selling this product online. Example: example.
- `checkout_type` (`string`, optional): Can be `product` or `subscription`. Example: example.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `description` (`string`, optional): A description of the product. Used as the default detail description when adding this product to a document. Example: Consulting services.
- `document_style_id` (`string`, optional): Should be a valid document style id. Example: 401892365587990113.
- `frequency` (`integer`, optional): Should be an integer >= 1. Example: 10.
- `frequency_preset` (`string`, optional): A predefined billing interval label for subscription products, e.g. `monthly`, `quarterly`, `yearly`. Example: example.
- `frequency_type` (`string`, optional): Can be `day`, `week`, `month`, `quarter` or `year`. Example: example.
- `identifier` (`string`, optional): Should be unique for the administration. Example: SKU-1001.
- `ledger_account_id` (`string`, optional): Should be a valid ledger account id. Example: 401892365587990113.
- `max_amount_per_order` (`integer`, optional): When `checkout_type` is `subscription`, should be an integer 0 <= *n* < 2. Example: 10.
- `price` (`string`, optional): An amount of money. Both a decimal and a string '10,95' are accepted. A string is bound to the same range as a number, -1,000,000,000 <= *n* <= 1,000,000,000. Example: 125.00.
- `product_type` (`string`, optional): Can be `digital_service`, `service` or `product`. Example: example.
- `tax_rate_id` (`string`, optional): Should be a valid tax rate id. Example: 401892365587990113.
- `title` (`string`, optional): The name of the product, displayed on invoices and estimates. Example: example.
- `vat_rate_type` (`string`, optional): Can be `standard` or `reduced`. Example: example.
- `workflow_id` (`string`, optional): Should be a valid workflow id. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","product_id":"<product_id>"}`

### `moneybird_update_project`

Update Project · Write

Update the name or state of a project.
Returns the updated project including id, name, state, budget.
Use to rename or archive a project.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `project_id` (`string`, required): Id of the project. Use the matching list tool to find it. Example: 401892365587990113.
- `budget` (`string`, optional): The budget for this project in hours. Example: 1.0.
- `name` (`string`, optional): Should be unique for the administration. Example: Acme.

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

### `moneybird_update_purchase_invoice`

Update Purchase Invoice · Write

Update a purchase invoice. Only the fields you pass are changed.
Returns the updated purchase invoice including id, administration_id, contact_id, contact, reference, date, due_date.
Use get_purchase_invoice first to read current values.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `purchase_invoice_id` (`string`, required): Id of the purchase invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `date` (`string`, optional): The date on the supplier's invoice. Example: 2026-01-31.
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `due_date` (`string`, optional): The date by which the invoice should be paid. Example: 2026-02-28.
- `fiscal_allocations_attributes` (`array`, optional): Array of fiscal allocation lines, used to book partly private or partly deductible costs. Each line takes ledger_account_id, amount and optionally tax_rate_id. Most documents do not need this.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the purchase invoice are inclusive of tax. Example: false.
- `reference` (`string`, optional): The supplier's invoice number or reference. Example: PO-2026-0042.
- `revenue_invoice` (`boolean`, optional): When `true`, this purchase invoice is treated as a revenue invoice (e.g. a credit note from a supplier). Example: true.

Example input: `{"administration_id":"<administration_id>","purchase_invoice_id":"<purchase_invoice_id>"}`

### `moneybird_update_receipt`

Update Receipt · Write

Update a receipt. Only the fields you pass are changed.
Returns the updated receipt including id, administration_id, contact_id, contact, reference, date, due_date.
Use get_receipt first to read current values.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `receipt_id` (`string`, required): Id of the receipt. Use the matching list tool to find it. Example: 401892365587990113.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `date` (`string`, optional): The date of the receipt. Example: 2026-01-31.
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `financial_account_id` (`string`, optional): Should be a valid financial account id. Example: 401892365587990113.
- `fiscal_allocations_attributes` (`array`, optional): Array of fiscal allocation lines, used to book partly private or partly deductible costs. Each line takes ledger_account_id, amount and optionally tax_rate_id. Most documents do not need this.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the receipt are inclusive of tax. Example: false.
- `reference` (`string`, optional): A reference for this receipt, e.g. a receipt number or supplier name. Example: PO-2026-0042.

Example input: `{"administration_id":"<administration_id>","receipt_id":"<receipt_id>"}`

### `moneybird_update_recurring_sales_invoice`

Update Recurring Sales Invoice · Write

Update a recurring sales invoice template.
Returns the updated recurring sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, workflow_id.
Only the fields you pass are changed.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `recurring_sales_invoice_id` (`string`, required): Id of the recurring sales invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `auto_send` (`boolean`, optional): When `true`, each generated invoice is automatically sent to the contact. Example: true.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `contact_person_id` (`string`, optional): Should be a valid contact person id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `custom_fields_attributes` (`array`, optional): Array of custom field values. Each entry needs the custom field id (from list_custom_fields) and a value. Example: [{"id": "401892365587990113", "value": "PO-123"}].
- `desired_count` (`string`, optional): The maximum number of invoices to generate. Only applied when `has_desired_count` is `true`. Example: example.
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `discount` (`number`, optional): Discount percentage, e.g. 10,0%. Example: 10.
- `document_style_id` (`string`, optional): Should be a valid document style id. Example: 401892365587990113.
- `first_due_interval` (`integer`, optional): The number of days after the invoice date before each generated invoice is due. Example: 14.
- `frequency` (`string`, optional): The interval multiplier. Combined with `frequency_type` to determine the billing cycle. Example: example.
- `frequency_type` (`string`, optional): Can be `day`, `week`, `month`, `quarter` or `year`. Example: example.
- `has_desired_count` (`boolean`, optional): When `true`, the recurring invoice stops after `desired_count` invoices have been created. Example: true.
- `invoice_date` (`string`, optional): Should be in the future. Example: 2026-01-31.
- `mergeable` (`boolean`, optional): When `true`, generated invoices may be merged with other mergeable invoices for the same contact, if they share the same workflow, layout, currency, language and other invoice settings. Example: true.
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on generated invoices are inclusive of tax. Example: false.
- `reference` (`string`, optional): A reference to include on each generated invoice, e.g. a contract or project code. Example: PO-2026-0042.
- `update_contact` (`boolean`, optional): When `true`, the contact's address and other details are refreshed from the current contact record each time a new invoice is generated. Example: true.
- `workflow_id` (`string`, optional): Should be a valid workflow id. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","recurring_sales_invoice_id":"<recurring_sales_invoice_id>"}`

### `moneybird_update_sales_invoice`

Update Sales Invoice · Write

Update a draft sales invoice. Only the fields you pass are changed.
Returns the updated sales invoice including id, administration_id, contact_id, contact, contact_person_id, contact_person, invoice_id.
Use get_sales_invoice first. Invoices that were already sent have limited editable fields.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `sales_invoice_id` (`string`, required): Id of the sales invoice. Use the matching list tool to find it. Example: 401892365587990113.
- `contact_id` (`string`, optional): The ID of the contact associated with the sales invoice. This is mandatory when setting the contact_person_id. Should be a valid contact id. Example: 401892365587990113.
- `contact_person_id` (`string`, optional): The ID of the contact person associated with the sales invoice. Should be a valid contact person id. Example: 401892365587990113.
- `currency` (`string`, optional): ISO three-character currency code, e.g. EUR or USD. Example: EUR.
- `custom_fields_attributes` (`array`, optional): Array of custom field values. Each entry needs the custom field id (from list_custom_fields) and a value. Example: [{"id": "401892365587990113", "value": "PO-123"}].
- `details_attributes` (`array`, optional): Array of detail (line item) objects. Each line takes description, price (decimal string such as "125.00"), amount (quantity, default 1), tax_rate_id, ledger_account_id, product_id, project_id and period. To change an existing line on update, include its id; to remove one, include its id with _destroy set to true. Example: [{"description": "Consulting", "price": "125.00", "amount": "2", "tax_rate_id": "401892365587990113"}].
- `discount` (`number`, optional): Discount percentage applied to the entire invoice, e.g. `10.0` for 10%. Example: 10.
- `document_style_id` (`string`, optional): Default document style is used if value is not provided. Should be a valid document style id. Example: 401892365587990113.
- `first_due_interval` (`integer`, optional): The number of days after the invoice date before the invoice is due. Example: 14.
- `invoice_date` (`string`, optional): The date of the invoice. Example: 2026-01-31.
- `invoice_sequence_id` (`string`, optional): The ID of the numbering sequence to use for the invoice number. Example: 401892365587990113.
- `original_estimate_id` (`string`, optional): The ID of the estimate this invoice was created from. Used to link an invoice to its originating estimate. Example: 401892365587990113.
- `payment_conditions` (`string`, optional): Free-text payment conditions printed on the invoice, e.g. "Payment within 30 days". Example: Payable within 14 days..
- `prices_are_incl_tax` (`boolean`, optional): Whether the prices on the invoice are inclusive of tax. Example: false.
- `reference` (`string`, optional): Your own reference for this invoice, e.g. a project code or PO number. Visible to the recipient. Example: PO-2026-0042.
- `remove_invoice_sequence_id` (`string`, optional): Set to `true` to remove the assigned numbering sequence, reverting to the administration default. Example: 401892365587990113.
- `time_entry_ids` (`array`, optional): Array of time entry ids to bill on this invoice. Use list_time_entries to find them. Example: ["401892365587990113"].
- `update_contact` (`boolean`, optional): When `true`, the contact's address and other details are updated on the invoice from the current contact record. Example: true.
- `workflow_id` (`string`, optional): If value is not provided, the workflow saved in the contact is used. If the contact doesn't have a default workflow, the administration's default workflow is used. Should be a valid workflow id. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","sales_invoice_id":"<sales_invoice_id>"}`

### `moneybird_update_subscription`

Update Subscription · Write

Update a subscription, for example its end date or product.
Returns the updated subscription including id, administration_id, start_date, end_date, frequency, frequency_type, reference.
Only the fields you pass are changed.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `subscription_id` (`string`, required): Id of the subscription. Use the matching list tool to find it. Example: 401892365587990113.
- `amount` (`string`, optional): Quantity of the product billed each period. Example: 1.
- `contact_person_id` (`string`, optional): Should be a valid contact person id. Example: 401892365587990113.
- `discount` (`number`, optional): Both a decimal and a string '10,95' are accepted. Example: 10.
- `document_style_id` (`string`, optional): Should be a valid document style id. Example: 401892365587990113.
- `mergeable` (`boolean`, optional): Merge invoices from this subscription with other mergeable invoices for the same contact before sending. Only applies when invoices are sent automatically. Example: true.
- `prices_are_incl_tax` (`boolean`, optional): Whether the amounts on the generated invoices are inclusive of tax. Example: false.
- `product_id` (`string`, optional): Should be a valid product id. Example: 401892365587990113.
- `reference` (`string`, optional): Your own reference for this record, for example a project code or order number. Example: PO-2026-0042.
- `start_date` (`string`, optional): Date the subscription starts, formatted YYYY-MM-DD. Example: 2026-01-01.

Example input: `{"administration_id":"<administration_id>","subscription_id":"<subscription_id>"}`

### `moneybird_update_time_entry`

Update Time Entry · Write

Update a time entry. Only the fields you pass are changed.
Returns the updated time entry including id, administration_id, contact_id, project_id, sales_invoice_id, user_id, started_at.
Use get_time_entry first to read current values.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `time_entry_id` (`string`, required): Id of the time entry. Use the matching list tool to find it. Example: 401892365587990113.
- `billable` (`boolean`, optional): Whether this time entry is billable to the client. Example: true.
- `contact_id` (`string`, optional): Should be a valid contact id. Example: 401892365587990113.
- `description` (`string`, optional): A description of how the time was spent. May be shown on the invoice. Example: Consulting services.
- `ended_at` (`string`, optional): The end time of the time entry. Rounded down to full minutes. A time entry without `ended_at` is considered a running (active) time entry. Example: example.
- `paused_duration` (`integer`, optional): Total paused duration in seconds, is rounded down to full minutes. Example: 10.
- `project_id` (`string`, optional): Should be a valid project id. Example: 401892365587990113.
- `sales_invoice_id` (`string`, optional): Should be a valid sales invoice id. Example: 401892365587990113.
- `started_at` (`string`, optional): The start time of the time entry. Rounded down to full minutes. Example: example.

Example input: `{"administration_id":"<administration_id>","time_entry_id":"<time_entry_id>"}`

### `moneybird_archive_contact`

Archive Contact · Destructive

Archive a contact so it no longer appears in default lists.
Returns an empty body on success (HTTP 204).
Prefer this over delete_contact for contacts that have linked records.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, required): Id of the contact. Use list_contacts to find it.

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

### `moneybird_delete_contact`

Delete Contact · Destructive

Delete a contact permanently.
Returns an empty body on success (HTTP 204).
Use archive_contact instead when the contact has invoices or other records.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `contact_id` (`string`, required): Id of the contact. Use list_contacts to find it.

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

### `moneybird_delete_estimate`

Delete Estimate · Destructive

Delete an estimate.
Returns an empty body on success (HTTP 204).
Use change_estimate_state to reject or archive an estimate you want to keep.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `estimate_id` (`string`, required): Printed estimate number, for example 2026-0001. Example: 2026-0001.

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

### `moneybird_delete_general_document`

Delete General Document · Destructive

Delete a general document.
Returns an empty body on success (HTTP 204).
Use only for documents entered by mistake.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `general_document_id` (`string`, required): Id of the general document. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","general_document_id":"<general_document_id>"}`

### `moneybird_delete_general_journal_document`

Delete General Journal Document · Destructive

Delete a general journal document.
Returns an empty body on success (HTTP 204).
Use only for manual entries made by mistake.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `general_journal_document_id` (`string`, required): Id of the general journal document. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","general_journal_document_id":"<general_journal_document_id>"}`

### `moneybird_delete_product`

Delete Product · Destructive

Delete a product.
Returns an empty body on success (HTTP 204).
Existing invoice lines that use the product are kept.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `product_id` (`string`, required): Id of the product. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","product_id":"<product_id>"}`

### `moneybird_delete_purchase_invoice`

Delete Purchase Invoice · Destructive

Delete a purchase invoice.
Returns an empty body on success (HTTP 204).
Use only for bills entered by mistake.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `purchase_invoice_id` (`string`, required): Id of the purchase invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","purchase_invoice_id":"<purchase_invoice_id>"}`

### `moneybird_delete_purchase_invoice_payment`

Delete Purchase Invoice Payment · Destructive

Remove a registered payment from a purchase invoice.
Returns an empty body on success (HTTP 204).
Use to undo a payment registered by mistake.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `payment_id` (`string`, required): Id of the payment. Use the get tool of the parent record to see its payments. Example: 401892365587990113.
- `purchase_invoice_id` (`string`, required): Id of the purchase invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","payment_id":"<payment_id>","purchase_invoice_id":"<purchase_invoice_id>"}`

### `moneybird_delete_receipt`

Delete Receipt · Destructive

Delete a receipt.
Returns an empty body on success (HTTP 204).
Use only for receipts entered by mistake.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `receipt_id` (`string`, required): Id of the receipt. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","receipt_id":"<receipt_id>"}`

### `moneybird_delete_recurring_sales_invoice`

Delete Recurring Sales Invoice · Destructive

Delete a recurring sales invoice template.
Returns an empty body on success (HTTP 204).
Already generated invoices are kept.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `recurring_sales_invoice_id` (`string`, required): Id of the recurring sales invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","recurring_sales_invoice_id":"<recurring_sales_invoice_id>"}`

### `moneybird_delete_sales_invoice`

Delete Sales Invoice · Destructive

Delete a draft sales invoice.
Returns an empty body on success (HTTP 204).
Use create_credit_invoice instead for invoices that were already sent.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `sales_invoice_id` (`string`, required): Id of the sales invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","sales_invoice_id":"<sales_invoice_id>"}`

### `moneybird_delete_sales_invoice_payment`

Delete Sales Invoice Payment · Destructive

Remove a registered payment from a sales invoice.
Returns an empty body on success (HTTP 204).
Use to undo a payment registered by mistake.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `payment_id` (`string`, required): Id of the payment. Use the get tool of the parent record to see its payments. Example: 401892365587990113.
- `sales_invoice_id` (`string`, required): Id of the sales invoice. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","payment_id":"<payment_id>","sales_invoice_id":"<sales_invoice_id>"}`

### `moneybird_delete_subscription`

Delete Subscription · Destructive

Cancel and delete a subscription.
Returns an empty body on success (HTTP 204).
Use update_subscription to set an end date instead when you want to keep history.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `subscription_id` (`string`, required): Id of the subscription. Use the matching list tool to find it. Example: 401892365587990113.
- `end_date` (`string`, optional): Date the subscription ends, formatted YYYY-MM-DD. Leave empty for an open-ended subscription. Example: 2026-12-31.

Example input: `{"administration_id":"<administration_id>","subscription_id":"<subscription_id>"}`

### `moneybird_delete_time_entry`

Delete Time Entry · Destructive

Delete a time entry.
Returns an empty body on success (HTTP 204).
Use only for entries logged by mistake.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `time_entry_id` (`string`, required): Id of the time entry. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","time_entry_id":"<time_entry_id>"}`

### `moneybird_unlink_financial_mutation_booking`

Unlink Financial Mutation Booking · Destructive

Remove a booking link from a financial mutation.
Returns an empty body on success (HTTP 204).
Use to undo a reconciliation made by mistake.

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

Inputs:

- `administration_id` (`string`, required): Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
- `booking_id` (`string`, required): A unique record identifier. Example: 401892365587990113.
- `booking_type` (`string`, required): Can be `Payment` or `LedgerAccountBooking`. Allowed values: Payment, LedgerAccountBooking. One of: `Payment`, `LedgerAccountBooking`.
- `financial_mutation_id` (`string`, required): Id of the financial mutation. Use the matching list tool to find it. Example: 401892365587990113.

Example input: `{"administration_id":"<administration_id>","booking_id":"<booking_id>","booking_type":"Payment","financial_mutation_id":"<financial_mutation_id>"}`

## Related

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

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


---

## More Scalekit documentation

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