Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Moneybird

Scalekit connector
Open markdown

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.

Tools
119
What they doRead · write · destructive
60 · 44 · 1560 read44 write15 destructive
Users sign in with
OAuth app
Your own Moneybird app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

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

  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

    quickstart.mts
    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)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • moneybird_fetch_contacts_by_idsFetch up to 100 contacts by their ids in a single request.Read-only

    Fetch Contacts By IDS

    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.

    Inputs

    administration_idstringrequired
    Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
    idsarrayrequired
    Array of record ids to fetch, at most 100. Use the list_*_versions tool to find ids that changed. Example: ["401892365587990113", "401892365587990114"].
  • moneybird_fetch_sales_invoices_by_idsFetch up to 100 sales invoices by their ids in a single request.Read-only

    Fetch Sales Invoices By IDS

    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.

    Inputs

    administration_idstringrequired
    Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
    idsarrayrequired
    Array of record ids to fetch, at most 100. Use the list_*_versions tool to find ids that changed. Example: ["401892365587990113", "401892365587990114"].
  • moneybird_filter_contactsList contacts matching key:value filter terms or a free-text query.Read-only

    Filter Contacts

    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.

    Inputs

    administration_idstringrequired
    Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
    filterstring
    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_archivedboolean
    Set to true to include archived contacts in the results. Archived contacts are hidden by default. Example: false.
    pageinteger
    Page number to return, starting at 1. Use together with per_page to walk through large result sets. Example: 1.
    per_pageinteger
    Number of records per page, between 1 and 100. The default is 25. Example: 50.
    querystring
    Free-text search across name, contact people, email, phone, customer id, tax number, chamber of commerce, IBAN, and address fields. Example: acme.
  • moneybird_find_estimate_by_estimate_idFind an estimate by its printed estimate number.Read-only

    Find Estimate By Estimate ID

    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.

    Inputs

    administration_idstringrequired
    Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
    estimate_idstringrequired
    Printed estimate number, for example 2026-0001. Example: 2026-0001.
  • moneybird_find_sales_invoice_by_invoice_idFind a sales invoice by its invoice number (for example 2026-0001).Read-only

    Find Sales Invoice By Invoice ID

    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.

    Inputs

    administration_idstringrequired
    Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
    invoice_idstringrequired
    Printed invoice number of the sales invoice, for example 2026-0001. Example: 2026-0001.
  • moneybird_find_sales_invoice_by_referenceFind sales invoices by the reference you set on them.Read-only

    Find Sales Invoice By Reference

    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.

    Inputs

    administration_idstringrequired
    Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
    referencestringrequired
    The reference value that was set on the sales invoice. Example: PO-2026-0042.
  • moneybird_get_balance_sheet_reportGet the balance sheet report as of a date or period.Read-only

    Get Balance Sheet Report

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

    Inputs

    administration_idstringrequired
    Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
    granularitystring
    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 monthquarteryear
    periodstring
    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.
  • moneybird_get_bank_balance_reportGet the balance per bank account for a period.Read-only

    Get Bank Balance Report

    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.

    Inputs

    administration_idstringrequired
    Id of the Moneybird administration (bookkeeping account) to work in. Use list_administrations to find it.
    granularitystring
    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 monthquarteryear
    periodstring
    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.