{"openapi":"3.1.0","info":{"title":"Moneybird (BYOK) API","version":"0.1.0","description":"Moneybird (BYOK) lets an AI assistant read your own Moneybird data through the Moneybird API with a key you supply (Moneybird personal API token (read scopes only)). Read-only: 11 tools (list_administrations, list_contacts, list_sales_invoices, list_purchase_invoices, list_estimates, list_products, list_financial_mutations, get_profit_loss_report, get_debtors_report, get_bank_balance_report,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-moneybird.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-moneybird/docs"},"termsOfService":"https://connectorbay.com/byok-moneybird/terms"},"servers":[{"url":"https://byok-moneybird.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-moneybird/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_administrations":{"post":{"operationId":"list_administrations","summary":"List the Moneybird administrations (companies) the token can access with id, name, currency, country and period start. U","description":"List the Moneybird administrations (companies) the token can access with id, name, currency, country and period start. Use for \"Which Moneybird administrations can I access\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_administrationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_contacts":{"post":{"operationId":"list_contacts","summary":"List customers and suppliers (contacts) with company, name, city, country, customer id and email, optionally searched by","description":"List customers and suppliers (contacts) with company, name, city, country, customer id and email, optionally searched by free text. Use for \"Find the Moneybird contact for Acme BV\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Free-text search across name, address, email, phone, customer id, tax number and similar fields.","title":"Query"},"include_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include archived contacts.","title":"Include Archived"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Records per page (default 50, maximum 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["administration_id"],"title":"list_contactsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_sales_invoices":{"post":{"operationId":"list_sales_invoices","summary":"List sales invoices with number, contact, state, dates, totals, amount paid and unpaid. Default period is this financial","description":"List sales invoices with number, contact, state, dates, totals, amount paid and unpaid. Default period is this financial year. Use for \"Which Moneybird sales invoices are unpaid and late\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated key:value filters, for example period:this_year,state:all. Keys: state (all, draft, open, scheduled, pending_payment, late, reminded, paid, uncollectible; join with |), period (this_year, prev_month, 20260101..20260331), reference, contact_id, created_after, updated_after. A filter you pass replaces the defaults, so give every key you need.","title":"Filter"},"sort":{"anyOf":[{"enum":["date_desc","date_asc"],"type":"string"},{"type":"null"}],"default":"date_desc","description":"date_desc (newest first) or date_asc.","title":"Sort"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Records per page (default 50, maximum 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["administration_id"],"title":"list_sales_invoicesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_purchase_invoices":{"post":{"operationId":"list_purchase_invoices","summary":"List purchase invoices (bills from suppliers) with contact, reference, state, dates and totals. Needs the documents scop","description":"List purchase invoices (bills from suppliers) with contact, reference, state, dates and totals. Needs the documents scope. Use for \"What supplier invoices are still open in Moneybird\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated key:value filters, for example period:this_year,state:all. Keys include period (this_year, 20260101..20260331) and state (for example open or paid). A filter you pass replaces the defaults, so give every key you need.","title":"Filter"},"sort":{"anyOf":[{"enum":["date_desc","date_asc"],"type":"string"},{"type":"null"}],"default":"date_desc","description":"date_desc (newest first) or date_asc.","title":"Sort"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Records per page (default 50, maximum 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["administration_id"],"title":"list_purchase_invoicesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_estimates":{"post":{"operationId":"list_estimates","summary":"List estimates (quotes) with contact, state, dates and totals. Needs the estimates scope. Use for \"Which Moneybird estim","description":"List estimates (quotes) with contact, state, dates and totals. Needs the estimates scope. Use for \"Which Moneybird estimates were accepted this year\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated key:value filters, for example period:this_year,state:all. Keys: state (all, draft, open, late, accepted, rejected, billed, archived), period, contact_id, workflow_id. A filter you pass replaces the defaults, so give every key you need.","title":"Filter"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Records per page (default 50, maximum 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["administration_id"],"title":"list_estimatesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_products":{"post":{"operationId":"list_products","summary":"List products with title, description, identifier, price, currency and billing frequency (10 products per page). Needs t","description":"List products with title, description, identifier, price, currency and billing frequency (10 products per page). Needs the settings scope. Use for \"What products are defined in Moneybird\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search the title, description and identifier.","title":"Query"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["administration_id"],"title":"list_productsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_financial_mutations":{"post":{"operationId":"list_financial_mutations","summary":"List bank transactions (financial mutations), at most 100, with date, amount, description message, counter party name an","description":"List bank transactions (financial mutations), at most 100, with date, amount, description message, counter party name and processing state. Needs the bank scope. Use for \"What bank transactions are unprocessed in Moneybird\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"filter":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated key:value filters, for example period:this_year,state:all. Keys: period, state (all, unprocessed, processed, auto_booked), mutation_type (all, debit, credit), financial_account_id, amount_from, amount_to. A filter you pass replaces the defaults, so give every key you need.","title":"Filter"}},"required":["administration_id"],"title":"list_financial_mutationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_profit_loss_report":{"post":{"operationId":"get_profit_loss_report","summary":"Get the profit and loss report for a period: total revenue, total expenses, gross profit, operating profit and net profi","description":"Get the profit and loss report for a period: total revenue, total expenses, gross profit, operating profit and net profit. Use for \"What was my Moneybird net profit last quarter\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"period":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":"this_month","description":"Report period: a preset (this_month, prev_month, this_quarter, prev_quarter, this_year, prev_year) or whole months as YYYYMM, YYYYMM..YYYYMM or YYYYMMDD..YYYYMMDD. Maximum 12 months.","title":"Period"},"granularity":{"anyOf":[{"enum":["month","quarter","year"],"type":"string"},{"type":"null"}],"default":null,"description":"Also split the report into month, quarter or year periods.","title":"Granularity"},"project_id":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings of this project id.","title":"Project Id"}},"required":["administration_id"],"title":"get_profit_loss_reportArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_debtors_report":{"post":{"operationId":"get_debtors_report","summary":"Get each debtor's open balance at the end of a period (contact id and amount). Use for \"Which customers owe me money in ","description":"Get each debtor's open balance at the end of a period (contact id and amount). Use for \"Which customers owe me money in Moneybird\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"period":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":"this_month","description":"Report period: a preset (this_month, prev_month, this_quarter, prev_quarter, this_year, prev_year) or whole months as YYYYMM, YYYYMM..YYYYMM or YYYYMMDD..YYYYMMDD. Maximum 12 months.","title":"Period"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Records per page (default 50, maximum 100).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["administration_id"],"title":"get_debtors_reportArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_bank_balance_report":{"post":{"operationId":"get_bank_balance_report","summary":"Get the booked balance of each financial account at the end of a period, with the total. Use for \"What are my Moneybird ","description":"Get the booked balance of each financial account at the end of a period, with the total. Use for \"What are my Moneybird bank balances\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"period":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":"this_month","description":"Report period: a preset (this_month, prev_month, this_quarter, prev_quarter, this_year, prev_year) or whole months as YYYYMM, YYYYMM..YYYYMM or YYYYMMDD..YYYYMMDD. Maximum 12 months.","title":"Period"},"granularity":{"anyOf":[{"enum":["month","quarter","year"],"type":"string"},{"type":"null"}],"default":null,"description":"Also split the report into month, quarter or year periods.","title":"Granularity"}},"required":["administration_id"],"title":"get_bank_balance_reportArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_tax_report":{"post":{"operationId":"get_tax_report","summary":"Get the VAT/tax report for a period: amount and tax per tax rate. Use for \"What VAT do I owe in Moneybird this quarter\".","description":"Get the VAT/tax report for a period: amount and tax per tax rate. Use for \"What VAT do I owe in Moneybird this quarter\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"administration_id":{"description":"Moneybird administration id (a long number; from list_administrations or the number in your Moneybird URL).","maxLength":200,"title":"Administration Id","type":"string"},"period":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":"this_month","description":"Report period: a preset (this_month, prev_month, this_quarter, prev_quarter, this_year, prev_year) or whole months as YYYYMM, YYYYMM..YYYYMM or YYYYMMDD..YYYYMMDD. Maximum 12 months.","title":"Period"},"granularity":{"anyOf":[{"enum":["month","quarter","year"],"type":"string"},{"type":"null"}],"default":null,"description":"Also split the report into month, quarter or year periods.","title":"Granularity"}},"required":["administration_id"],"title":"get_tax_reportArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}