{
 "slug": "moneybird",
 "name": "Moneybird",
 "url": "https://moneybird.com",
 "domain": "moneybird.com",
 "category": "invoicing",
 "category_name": "Invoicing",
 "tested_at": "2026-10-06",
 "run": "20261006T084049Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T202213Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   },
   "drives": 3
  },
  {
   "run": "20261006T084049Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 3,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/10",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "current",
    "behind": null,
    "value": "cimd"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 4,
 "drives": 4,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Google reCAPTCHA v2 (invisible)",
  "visible": false,
  "type": "network",
  "human": null,
  "how": "Check the Web Bot Auth signature on the sign-up request and skip reCAPTCHA (or lower the score threshold) for signed agents; or offer a documented sign-up API with email verification.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "form"
  },
  "signed": {
   "state": "page",
   "kind": "home",
   "at": "2026-10-13"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "developer.moneybird.com: llms.txt, .md pages, llms-full.txt; OpenAPI 3.1.0 on GitHub (297 operations); MCP and CLI pages."
  },
  "signup": {
   "status": "blocked",
   "note": "Only route is the web form (POST /register_from_website) behind invisible Google reCAPTCHA v2. In our agent's browser the click produced no token, no visible puzzle, and no error: the form silently never submitted. No visible challenge existed for a human to solve either. Nothing, agent or human, could get past this path on the evidence gathered: blocked, not human."
  },
  "verify": {
   "status": "",
   "note": "No sign-up went through, so no mail to verify.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "API tokens are made inside an account (Settings > External applications and AI connections). OAuth DCR at /oauth/register worked headless (201), but /oauth/authorize redirects to a login we have no account for. No device flow or agent registration.",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "No token; unauthenticated API calls get 401 JSON 'no applicable policies'.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No token.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [
    "direct debit",
    "credit card"
   ],
   "rail_ids": [
    "other",
    "card"
   ],
   "first_party": true,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No agent payment rail: no 402 on API paths, x402./mpp./agents. subdomains 404, no /.well-known/ucp, no x-payment-info, not in x402 Bazaar or mpp.dev. Pricing FAQ: paid plans are paid by monthly direct debit or credit card, chosen in the app after a 60-day trial (llms.txt: no credit card for the trial). Not reached: sign-up needs a human (reCAPTCHA), so; the in-app checkout itself was not seen.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "No plan started. Pricing FAQ: 'You can cancel at any time, without notice.' The OpenAPI has no billing operations, so cancelling is not an API call; the in-app route was not seen (not verified).",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created, so nothing to delete. Two OAuth clients registered via DCR have no documented delete (no registration_client_uri).",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "card",
    "name": "Card checkout",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": true,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST v2, 212 paths / 297 operations",
  "openapi": "3.1.0, info.version v2-20261006-23627e8bd2, on GitHub",
  "mcp": "official, read_only and read_write endpoints, OAuth",
  "cli": "official moneybird-cli (bash, reads OpenAPI at runtime), installs headless, needs a token"
 },
 "can_do": [
  "Read all developer docs, llms.txt and the OpenAPI spec as plain text",
  "Register an OAuth client headless via dynamic client registration",
  "Install the official CLI headless"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "Invisible reCAPTCHA on the sign-up form gave our agent's browser no token and showed no challenge; no sign-up API"
  },
  {
   "what": "Get an API token or OAuth token",
   "why": "Tokens need a logged-in account"
  },
  {
   "what": "Any invoicing, bookkeeping or bank task",
   "why": "No account, so no credentials for API, CLI or MCP"
  }
 ],
 "blockers": [
  "Sign-up form silently does not submit: invisible Google reCAPTCHA v2, no visible fallback, no error"
 ],
 "tips_for_owner": [
  "Let verified agents sign up",
  "Show a challenge or error when reCAPTCHA fails",
  "Add device flow for API and CLI tokens",
  "Make the MCP endpoints discoverable without a token",
  "Serve markdown on Accept: text/markdown"
 ],
 "tips_for_agents": [
  "Sign-up needs a human: have the user create the account and a personal API token (Settings > External applications and AI connections) with the scopes you need, then use the CLI or API.",
  "The CLI (moneybird-cli) reads the OpenAPI at runtime; install with MONEYBIRD_CLI_DIR set to a writable dir.",
  "Use developer.moneybird.com/llms-full.txt and the .md pages; Accept: text/markdown is not negotiated.",
  "OAuth: DCR at /oauth/register works and CIMD is advertised; a human still approves at /oauth/authorize. No device flow."
 ],
 "selfhost": null,
 "summary": "Moneybird has unusually good agent tooling on paper: an official MCP server with OAuth (PRM, DCR and CIMD), an official CLI, a 297-operation OpenAPI 3.1 spec and llms.txt. But an agent cannot get in on its own: the only sign-up is a web form behind invisible reCAPTCHA, which gave our agent's browser no token, no puzzle and no error, so no account, token or API call was possible and no core capability could be driven.",
 "wall": "Invisible reCAPTCHA silently blocks the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Moneybird is online invoicing and bookkeeping software with a real developer API, full documentation, and an AI connector (MCP). An agent could read all the docs and even register itself as a technical client, but could never create an account: the sign-up form's hidden bot check silently failed with nothing visible for anyone to respond to, so nothing past that point was reachable.",
  "can_do": [
   "Read all the developer documentation, including a version made for AI tools",
   "Register as a technical client with the service (this alone does not grant access)",
   "Install the official command-line tool"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "The sign-up form's hidden bot check failed silently with nothing visible to respond to"
   },
   {
    "what": "Get a login key for the API, command line, or AI connector",
    "why": "Keys are only issued from inside an account"
   },
   {
    "what": "Do any invoicing, bookkeeping or banking task",
    "why": "No account was ever created"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Sales invoices",
   "capability": "Create a sales invoice",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/sales_invoices",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli sales_invoices create",
    "ui": "Sales > New invoice"
   },
   "check": "GET /api/v2/:administration_id/sales_invoices/:id returns the invoice with state draft",
   "source": "https://developer.moneybird.com/integration/creating-sales-invoices; https://developer.moneybird.com/llms-full.txt"
  },
  {
   "id": "cap-02",
   "group": "Sales invoices",
   "capability": "Send an invoice to a customer",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /api/v2/:administration_id/sales_invoices/:id/send_invoice",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli sales_invoices send",
    "ui": "Sales invoice detail > Send"
   },
   "check": "GET sales_invoices/:id shows state open and sent_at timestamp set",
   "source": "https://developer.moneybird.com/introduction (api/sales-invoices#sends-an-invoice); https://developer.moneybird.com/integration/creating-sales-invoices"
  },
  {
   "id": "cap-04",
   "group": "Sales invoices",
   "capability": "Record a payment / mark invoice paid",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/sales_invoices/:id/payments",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli sales_invoices payments create",
    "ui": "Sales invoice detail > Register payment"
   },
   "check": "GET sales_invoices/:id shows state paid and payments array populated",
   "source": "https://developer.moneybird.com/llms-full.txt (api/sales_invoices)"
  },
  {
   "id": "cap-05",
   "group": "Sales invoices",
   "capability": "Set up a recurring sales invoice",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/recurring_sales_invoices",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli recurring_sales_invoices create",
    "ui": "Sales > Recurring invoices"
   },
   "check": "GET recurring_sales_invoices/:id returns the template with frequency and next invoice date",
   "source": "https://developer.moneybird.com/llms-full.txt (api/recurring_sales_invoices); https://www.moneybird.com/pricing/ (Recurring invoices: Start plan+)"
  },
  {
   "id": "cap-06",
   "group": "Sales invoices",
   "capability": "Create and convert a quote/estimate to an invoice",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/estimates; PATCH estimates/:id/create_sales_invoice",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli estimates create",
    "ui": "Sales > Quotes"
   },
   "check": "GET sales_invoices/:id shows a reference back to the originating estimate",
   "source": "https://developer.moneybird.com/llms-full.txt (api/estimates)"
  },
  {
   "id": "cap-07",
   "group": "Purchases",
   "capability": "Scan and process a receipt/purchase invoice (smart document processing)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/documents/purchase_invoices",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli documents create",
    "ui": "Purchases > Upload document / mobile app scan"
   },
   "check": "GET documents/purchase_invoices/:id shows parsed fields (total_price_incl_tax, contact) extracted from the scan",
   "source": "https://developer.moneybird.com/llms-full.txt (api/documents_purchase_invoices); https://www.moneybird.com/ (featureList: Smart document processing, Scan and recognize)"
  },
  {
   "id": "cap-08",
   "group": "Bookkeeping",
   "capability": "Connect a bank account and import transactions",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "GET /api/v2/:administration_id/financial_mutations",
    "mcp": "read_only/read_write MCP endpoint",
    "cli": "moneybird-cli financial_mutations list",
    "ui": "Banking > Connect account"
   },
   "check": "GET financial_mutations lists transactions with a financial_account reference for the connected bank",
   "source": "https://www.moneybird.com/ (featureList: Connect external account, Process bank transactions); https://www.moneybird.com/pricing/ (External Bank Connection fees)"
  },
  {
   "id": "cap-09",
   "group": "Bookkeeping",
   "capability": "Match/categorize a bank transaction to an invoice or ledger account",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /api/v2/:administration_id/financial_mutations/:id/link_booking",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli financial_mutations link",
    "ui": "Banking > match transaction"
   },
   "check": "GET financial_mutations/:id shows state matched/booked with linked_entries",
   "source": "https://developer.moneybird.com/llms-full.txt (api/financial_mutations)"
  },
  {
   "id": "cap-10",
   "group": "Tax",
   "capability": "File an electronic VAT return",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Taxes > VAT return"
   },
   "check": "VAT return overview in UI shows filed status and confirmation reference for the period",
   "source": "https://www.moneybird.com/ (featureList: Electronic VAT return); https://www.moneybird.com/pricing/"
  },
  {
   "id": "cap-11",
   "group": "Reporting",
   "capability": "View financial reports and dashboard (P&L, balance sheet)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v2/:administration_id/reports/...",
    "mcp": "read_only MCP endpoint",
    "cli": "moneybird-cli reports",
    "ui": "Insights > Reports"
   },
   "check": "GET a report endpoint returns period totals matching the ledger balances shown in the UI",
   "source": "https://www.moneybird.com/ (featureList: Reports and dashboard); https://developer.moneybird.com/introduction (reports throttling note)"
  },
  {
   "id": "cap-03",
   "group": "Sales invoices",
   "capability": "Send an invoice over Peppol e-invoicing",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /api/v2/:administration_id/sales_invoices/:id/send_invoice (delivery_method peppol)",
    "mcp": "read_write MCP endpoint",
    "cli": null,
    "ui": "Sales invoice detail > Send via Peppol"
   },
   "check": "GET sales_invoices/:id shows delivery_status/peppol delivery confirmation",
   "source": "https://developer.moneybird.com/integration/sending-sales-invoices-peppol; https://www.moneybird.com/pricing/"
  },
  {
   "id": "cap-12",
   "group": "Contacts",
   "capability": "Create and manage contacts",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST/PATCH/DELETE /api/v2/:administration_id/contacts",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli contacts create",
    "ui": "Contacts"
   },
   "check": "GET contacts/:id returns the updated contact fields",
   "source": "https://developer.moneybird.com/introduction (api/contacts); https://developer.moneybird.com/llms-full.txt (api/contacts)"
  },
  {
   "id": "cap-13",
   "group": "Sales invoices",
   "capability": "Set up online payment methods on invoices (iDEAL, card, direct debit)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Online payments"
   },
   "check": "Invoice payment page in UI offers the enabled payment method and a successful payment flips invoice state to paid",
   "source": "https://www.moneybird.com/pricing/ (Online payment methods; Payment Methods Fees table)"
  },
  {
   "id": "cap-14",
   "group": "Sales invoices",
   "capability": "Collect payment via SEPA direct debit",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > SEPA direct debit"
   },
   "check": "Invoice shows SEPA direct debit mandate and payment status after collection",
   "source": "https://www.moneybird.com/pricing/ (SEPA direct debit; Payment Methods Fees table)"
  },
  {
   "id": "cap-15",
   "group": "Sales invoices",
   "capability": "Customize invoice branding (logo, colors, template)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /api/v2/:administration_id/document_styles",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli document_styles",
    "ui": "Settings > Invoice layout"
   },
   "check": "GET document_styles/:id reflects the uploaded logo/colors, new invoice PDFs render it",
   "source": "https://developer.moneybird.com/llms-full.txt (api/document_styles); https://www.moneybird.com/ (featureList: Custom branding)"
  },
  {
   "id": "cap-16",
   "group": "Sales invoices",
   "capability": "Send automatic payment reminders",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Payment reminders"
   },
   "check": "Overdue invoice shows a reminder sent log entry/email timestamp",
   "source": "https://www.moneybird.com/ (featureList: Automatic reminders); https://www.moneybird.com/pricing/"
  },
  {
   "id": "cap-17",
   "group": "Purchases",
   "capability": "Import a UBL/e-invoice purchase invoice",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/documents/purchase_invoices (UBL import)",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli documents create",
    "ui": "Purchases > Import"
   },
   "check": "GET documents/purchase_invoices/:id shows fields parsed directly from the UBL XML",
   "source": "https://www.moneybird.com/ (featureList: Process UBL invoices); https://www.moneybird.com/pricing/"
  },
  {
   "id": "cap-18",
   "group": "Purchases",
   "capability": "Receive purchase invoices via Peppol network",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Purchases > Peppol inbox"
   },
   "check": "Incoming Peppol invoice appears in Purchases inbox with sender identifier",
   "source": "https://www.moneybird.com/ (featureList: Receive via Peppol); https://www.moneybird.com/pricing/"
  },
  {
   "id": "cap-19",
   "group": "Purchases",
   "capability": "Pay a purchase invoice directly from Moneybird",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Purchase invoice detail > Pay"
   },
   "check": "Purchase invoice state flips to paid with a linked outgoing payment/financial mutation",
   "source": "https://www.moneybird.com/ (featureList: Pay from Moneybird)"
  },
  {
   "id": "cap-20",
   "group": "Bookkeeping",
   "capability": "Import external sales invoices from another system",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/external_sales_invoices",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli external_sales_invoices create",
    "ui": null
   },
   "check": "GET external_sales_invoices/:id returns the imported invoice record alongside native sales invoices in reports",
   "source": "https://developer.moneybird.com/integration/importing-external-invoices; https://developer.moneybird.com/llms-full.txt (api/external_sales_invoices)"
  },
  {
   "id": "cap-21",
   "group": "Tax",
   "capability": "View VAT overview and ICP declaration",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v2/:administration_id/tax_rates",
    "mcp": "read_only MCP endpoint",
    "cli": "moneybird-cli tax_rates list",
    "ui": "Taxes > VAT overview / ICP"
   },
   "check": "VAT overview page totals match sum of tax amounts on period invoices",
   "source": "https://www.moneybird.com/ (featureList: VAT overview, ICP declaration)"
  },
  {
   "id": "cap-22",
   "group": "Bookkeeping",
   "capability": "Manage ledger (general ledger) accounts",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /api/v2/:administration_id/ledger_accounts",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli ledger_accounts",
    "ui": "Settings > Ledger accounts"
   },
   "check": "GET ledger_accounts/:id returns the created/edited account and it appears in report breakdowns",
   "source": "https://developer.moneybird.com/llms-full.txt (api/ledger-accounts); https://www.moneybird.com/ (featureList: Ledger accounts)"
  },
  {
   "id": "cap-23",
   "group": "Time & projects",
   "capability": "Track time entries and bill them",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/time_entries",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli time_entries create",
    "ui": "Time tracking"
   },
   "check": "GET time_entries/:id shows the logged hours, and billable entries appear on a generated invoice",
   "source": "https://developer.moneybird.com/llms-full.txt (api/time_entries); https://www.moneybird.com/ (featureList: Time tracking)"
  },
  {
   "id": "cap-24",
   "group": "Time & projects",
   "capability": "Organize work into projects",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /api/v2/:administration_id/projects",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli projects create",
    "ui": "Projects"
   },
   "check": "GET projects/:id returns the project, and invoices/time entries tagged with project_id filter correctly",
   "source": "https://developer.moneybird.com/llms-full.txt (api/projects)"
  },
  {
   "id": "cap-25",
   "group": "Bookkeeping",
   "capability": "Register and depreciate fixed assets",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Bookkeeping > Assets"
   },
   "check": "Asset detail page shows depreciation schedule and current book value",
   "source": "https://www.moneybird.com/ (featureList: Assets and depreciation)"
  },
  {
   "id": "cap-26",
   "group": "Products & catalog",
   "capability": "Manage a product/price catalog",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /api/v2/:administration_id/products",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli products list",
    "ui": "Settings > Products"
   },
   "check": "GET products/:id returns the created product and it is selectable when adding invoice line items",
   "source": "https://developer.moneybird.com/introduction (api/products#list-all-products-of-an-administration)"
  },
  {
   "id": "cap-27",
   "group": "Sales invoices",
   "capability": "Track online sales channel revenue",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Sales > Online sales"
   },
   "check": "Online sales overview lists imported webshop order totals per period",
   "source": "https://www.moneybird.com/ (featureList: Online sales)"
  },
  {
   "id": "cap-28",
   "group": "Automation",
   "capability": "Register a webhook to react to administration changes",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/webhooks",
    "mcp": null,
    "cli": "moneybird-cli webhooks create",
    "ui": "Settings > Webhooks"
   },
   "check": "GET webhooks/:id shows the registered URL, and a triggering event delivers a signed POST with matching Idempotency-Key",
   "source": "https://developer.moneybird.com/webhooks/getting-started; https://developer.moneybird.com/webhooks/events"
  },
  {
   "id": "cap-29",
   "group": "Automation",
   "capability": "Create a SaaS subscription / recurring billing plan via API",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/subscriptions",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli subscriptions create",
    "ui": null
   },
   "check": "GET subscriptions/:id returns the active subscription and it generates recurring sales invoices on schedule",
   "source": "https://developer.moneybird.com/integration/managing-subscriptions; https://developer.moneybird.com/llms-full.txt (api/subscriptions)"
  },
  {
   "id": "cap-30",
   "group": "Automation",
   "capability": "Use the hosted subscription checkout and customer portal",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v2/:administration_id/subscription_templates",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Hosted checkout URL completes and creates a matching subscription record readable via GET subscriptions/:id",
   "source": "https://developer.moneybird.com/integration/hosted-subscription-management"
  },
  {
   "id": "cap-32",
   "group": "Automation",
   "capability": "Operate the administration from a terminal (CLI)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "moneybird-cli (reads OpenAPI spec at runtime)",
    "ui": null
   },
   "check": "`moneybird-cli contacts list` returns live contact records after `moneybird-cli login <token>`",
   "source": "https://developer.moneybird.com/tools/cli"
  },
  {
   "id": "cap-33",
   "group": "Collaboration",
   "capability": "Invite additional users and set permissions",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v2/:administration_id/users",
    "mcp": "read_only MCP endpoint",
    "cli": "moneybird-cli users list",
    "ui": "Settings > Users"
   },
   "check": "GET users lists the invited user, and they can log in with the assigned role's permissions",
   "source": "https://developer.moneybird.com/llms-full.txt (api/users); https://www.moneybird.com/pricing/ (Users limits per plan)"
  },
  {
   "id": "cap-34",
   "group": "Collaboration",
   "capability": "Give an accountant access to the administration",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Accountant"
   },
   "check": "Accountant account shows the administration under 'accountant_company' access in their administrations list",
   "source": "https://www.moneybird.com/pricing/ (Accountant: Yes on all plans); https://developer.moneybird.com/api/ (access enum accountant_company)"
  },
  {
   "id": "cap-35",
   "group": "Integrations",
   "capability": "Connect third-party integrations (webshops, POS, payroll, time tracking)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations marketplace"
   },
   "check": "Integrations page shows the connected app as active with a last-sync timestamp",
   "source": "https://www.moneybird.com/llms.txt (Integrations: webshops, point of sale, payment providers, payroll, time tracking)"
  },
  {
   "id": "cap-36",
   "group": "Custom fields",
   "capability": "Add custom fields to contacts/invoices",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /api/v2/:administration_id/custom_fields",
    "mcp": "read_write MCP endpoint",
    "cli": "moneybird-cli custom_fields list",
    "ui": "Settings > Custom fields"
   },
   "check": "GET custom_fields/:id returns the defined field, and it is settable on a contact/invoice record",
   "source": "https://developer.moneybird.com/llms-full.txt (api/custom-fields)"
  },
  {
   "id": "cap-37",
   "group": "Mobile",
   "capability": "Use the iOS/Android mobile app",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "iOS and Android app"
   },
   "check": "Mobile app login succeeds and shows the same administration data as the web app",
   "source": "https://www.moneybird.com/ (applicationCategory/operatingSystem: Android, iOS); https://www.moneybird.com/llms.txt"
  },
  {
   "id": "cap-38",
   "group": "Automation",
   "capability": "Manage API/OAuth tokens for external applications",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET https://moneybird.com/user/applications/new",
    "mcp": null,
    "cli": null,
    "ui": "Settings > External and AI integrations"
   },
   "check": "New token/app appears in the applications list and successfully authenticates an API request",
   "source": "https://developer.moneybird.com/authentication"
  }
 ],
 "attempts": [
  {
   "t": "00:58",
   "cap": "discovery",
   "capability": "MCP discovery",
   "task": "POST server/discover to https://moneybird.com/mcp/v1/read_write and read_only",
   "route": "mcp",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Both answered HTTP 401 application/json {\"error\":\"no applicable policies\"} with WWW-Authenticate: Bearer resource_metadata=\"https://moneybird.com/.well-known/oauth-protected-resource\"; no version info without a token",
   "notes": "auth-required before discover"
  },
  {
   "t": "00:58",
   "cap": "discovery",
   "capability": "OAuth metadata",
   "task": "GET /.well-known/oauth-protected-resource and oauth-authorization-server",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PRM 200 JSON resource=https://moneybird.com/mcp, AS=https://moneybird.com; AS metadata: registration_endpoint /oauth/register, client_id_metadata_document_supported:true, S256, grants authorization_code+refresh_token, no device_authorization_endpoint, no agent_auth block",
   "notes": "PRM resource 'https://moneybird.com/mcp' differs from endpoint URLs /mcp/v1/read_write; path-suffixed PRM 404"
  },
  {
   "t": "00:58",
   "cap": "discovery",
   "capability": "cards",
   "task": "GET /.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json, <mcp>/server-card, /auth.md, /SKILL.md, /.well-known/ucp",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "all 404 text/html",
   "notes": ""
  },
  {
   "t": "00:58",
   "cap": "discovery",
   "capability": "llms.txt",
   "task": "GET developer.moneybird.com/llms.txt and www.moneybird.com/llms.txt",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "both 200 text/plain; developer llms.txt links .md pages; www llms.txt points to MCP, CLI, API, and llms-full.txt",
   "notes": ""
  },
  {
   "t": "00:58",
   "cap": "discovery",
   "capability": "markdown",
   "task": "Accept: text/markdown on developer.moneybird.com/introduction; and /introduction.md",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Accept negotiation returned text/html (no Vary); /introduction.md returned 200 content-type text/markdown",
   "notes": "md-url only"
  },
  {
   "t": "00:58",
   "cap": "discovery",
   "capability": "aipref",
   "task": "robots.txt Content-Usage lines and Content-Usage header",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "robots.txt (www/moneybird.com) has User-agent: * with Disallow incl. /api/, /user/, /app/; no Content-Usage or Content-signal lines; no Content-Usage header on www",
   "notes": "none found"
  },
  {
   "t": "00:58",
   "cap": "discovery",
   "capability": "OpenAPI",
   "task": "GET github moneybird/openapi openapi.json",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "openapi 3.1.0, info.version v2-20261006-23627e8bd2, 212 paths / 297 operations, no x-payment-info",
   "notes": ""
  },
  {
   "t": "01:09",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Find a headless sign-up route",
   "route": "none",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "No documented signup API (developer docs: tokens are created inside an account at moneybird.com/user/applications/new). Website form POSTs to https://moneybird.com/register_from_website with hidden captcha_token (reCAPTCHA); not submitted headless, to avoid skipping the check",
   "notes": "web form only"
  },
  {
   "t": "05:42",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Sign up at https://www.moneybird.com/aanmelden/ in the drive browser (name, email, password)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Form #sign-up-for-moneybird-form (POST https://moneybird.com/register_from_website) is guarded by invisible Google reCAPTCHA v2 (site key [redacted], api2 anchor+bframe). After clicking 'Sign up for free' (after declining optional cookies) the page stays on /aanmelden/, hidden captcha_token stays empty, no POST to register_from_website, no visible puzzle (bframe hidden), no error text. No mail arrived at the agent's inbox.",
   "notes": "Invisible reCAPTCHA did not issue a token to our signed, honestly-labelled browser; no visible challenge to hand to a human.",
   "quality": {
    "error_legibility": "silent",
    "recoverable": "no"
   }
  },
  {
   "t": "05:42",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Human own-browser handoff for the reCAPTCHA-guarded sign-up form",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "",
   "notes": "Step needs a human"
  },
  {
   "t": "05:54",
   "cap": "credentials",
   "capability": "OAuth client registration",
   "task": "Register an OAuth client via DCR at https://moneybird.com/oauth/register (from AS metadata)",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "POST /oauth/register -> 201 JSON client_id 2baa9dac…, grant_types authorization_code+refresh_token, scope all six; asked token_endpoint_auth_method none, got client_secret_basic",
   "notes": "Client registered headless, but a token still needs a Moneybird user to log in and approve at /oauth/authorize; we have no account. AS metadata also advertises CIMD.",
   "quality": {
    "docs_match": "undocumented"
   }
  },
  {
   "t": "06:57",
   "cap": "docs",
   "capability": "Docs",
   "task": "Read developer docs, llms.txt, OpenAPI, MCP and CLI pages headless",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "developer.moneybird.com/llms.txt + .md pages (authentication, tools/mcp, tools/cli, integration/*), llms-full.txt, OpenAPI 3.1.0 at github.com/moneybird/openapi (297 operations)",
   "notes": "",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "06:57",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Read verification mail",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "inbox read the agent's inbox: 'no mail'no sign-up was submitted",
   "notes": "depends on sign-up"
  },
  {
   "t": "06:57",
   "cap": "credentials",
   "capability": "Personal API token / OAuth token",
   "task": "Get an API token",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Tokens are created inside an account (Settings > External applications and AI connections, or /user/applications/new); /oauth/authorize 302 -> https://moneybird.com/login",
   "notes": "No account; login page itself has no CAPTCHA (password + WebAuthn forms). No device flow, no auth.md agent registration in AS metadata."
  },
  {
   "t": "06:57",
   "cap": "first_call",
   "capability": "First API call",
   "task": "GET /api/v2/administrations.json without credentials",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "401 application/json {\"error\":\"no applicable policies\",\"symbolic\":{\"request\":\"invalid_grant\"}}",
   "notes": "not problem+json; no token available",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "06:57",
   "cap": "cap-32",
   "capability": "Operate the administration from a terminal (CLI)",
   "task": "Install the official moneybird-cli and list contacts",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "install.sh (MONEYBIRD_CLI_DIR=run dir) cloned moneybird-cli 2e34e51; `contacts list` -> 'Error: No administration selected. Run: moneybird-cli login <token>'",
   "notes": "CLI installs headless (bash+curl+jq, reads OpenAPI at runtime) but needs a token from an account",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "06:57",
   "cap": "pay",
   "capability": "Pay",
   "task": "Probe agent payment rails and billing",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "No 402 on API paths (401 JSON); x402./mpp./agents. subdomains 404; /.well-known/ucp 404; no x-payment-info in OpenAPI; no moneybird entries in x402 Bazaar or mpp.dev/api/services; llms-full.txt has no x402/MPP/ACP mentions. Pricing page: plans from €3, €41/month, 60-day trial; FAQ: 'you give us permission to debit the subscription fee from your account by means of a monthly direct debit or credit card transaction'. www llms.txt: 'Free trial ... 60 days, no limits, no credit card.'",
   "notes": "Plan purchase happens inside the app after sign-up; not reached (no account)"
  },
  {
   "t": "06:57",
   "cap": "cap-01",
   "capability": "Create a sales invoice",
   "task": "Drive via POST /api/v2/:administration_id/sales_invoices",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cap-02",
   "capability": "Send an invoice to a customer",
   "task": "Drive via PATCH /api/v2/:administration_id/sales_invoices/:id/send_invoice",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cap-04",
   "capability": "Record a payment / mark invoice paid",
   "task": "Drive via POST /api/v2/:administration_id/sales_invoices/:id/payments",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cap-05",
   "capability": "Set up a recurring sales invoice",
   "task": "Drive via POST /api/v2/:administration_id/recurring_sales_invoices",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cap-06",
   "capability": "Create and convert a quote/estimate to an invoice",
   "task": "Drive via POST /api/v2/:administration_id/estimates; PATCH estimates/:id/create_sales_invoice",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cap-07",
   "capability": "Scan and process a receipt/purchase invoice (smart document processing)",
   "task": "Drive via POST /api/v2/:administration_id/documents/purchase_invoices",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cap-08",
   "capability": "Connect a bank account and import transactions",
   "task": "Drive via GET /api/v2/:administration_id/financial_mutations",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cap-09",
   "capability": "Match/categorize a bank transaction to an invoice or ledger account",
   "task": "Drive via PATCH /api/v2/:administration_id/financial_mutations/:id/link_booking",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cap-10",
   "capability": "File an electronic VAT return",
   "task": "Drive via API",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cap-11",
   "capability": "View financial reports and dashboard (P&L, balance sheet)",
   "task": "Drive via GET /api/v2/:administration_id/reports/...",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by invisible reCAPTCHA (see signup attempt); no token for API/CLI/MCP",
   "notes": "not attempted beyond access ladder"
  },
  {
   "t": "06:57",
   "cap": "cancel",
   "capability": "Cancel plan",
   "task": "Cancel a plan",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No plan started (no account). Pricing FAQ: 'You can cancel at any time, without notice.' No billing endpoints in OpenAPI (grep: no plan/billing operations for the Moneybird subscription itself)",
   "notes": ""
  },
  {
   "t": "06:57",
   "cap": "delete",
   "capability": "Delete account",
   "task": "Delete the account and data",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No account was created; nothing to delete. DCR clients 2baa9dac…/one more were registered at /oauth/register; registration response carried no registration_client_uri/registration_access_token, so no documented way to delete them",
   "notes": ""
  }
 ],
 "stale": false,
 "icon": "/logos/moneybird.png",
 "monitored": false,
 "verdict": "Needs a person to sign up: L1 · Needs a person. Our agent stopped at signup, behind an invisible Google reCAPTCHA on the only account-creation route, a web form. The click produced no token, no puzzle and no error in our agent's browser: the form never submitted, and no challenge appeared for a person to solve either. With no account, no key followed, so no API call, MCP connection or CLI run reached the work itself. Pricing, checkout and cancelling stayed unseen, since the trial needs a person to sign up first. Moneybird ships an official MCP server, CLI and a full OpenAPI spec, but none of it opens without a person at the door.",
 "page": "https://agentdrives.com/tools/moneybird?via=api"
}