{
  "data": {
    "a": {
      "slug": "invoice-ninja",
      "name": "Invoice Ninja API",
      "vendor": "Invoice Ninja",
      "vendorUrl": "https://www.invoiceninja.com",
      "kind": "http-api",
      "category": "accounting",
      "summary": "Source-available invoicing platform (Laravel) you can self-host or use hosted at invoicing.co.",
      "url": "https://www.anchorterminal.com/tools/invoice-ninja",
      "markdownUrl": "https://www.anchorterminal.com/tools/invoice-ninja.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/invoice-ninja.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/invoice-ninja.json",
      "repo": "https://github.com/invoiceninja/invoiceninja",
      "license": "Elastic License 2.0",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://invoicing.co/api/v1",
      "packages": [],
      "auth": "api-key",
      "authNotes": "An API token from Settings, Account Management, Integrations, sent as `X-API-TOKEN`, plus `X-Requested-With: XMLHttpRequest` on every call. Self-hosted installs can also log in with email and password to get a token, and need `X-API-SECRET` on the login route when API_SECRET is set in .env. The demo at demo.invoiceninja.com accepts the token `TOKEN`.",
      "pricing": "freemium",
      "pricingNotes": "Hosted plans are Free (up to 5 clients, 1 user, unlimited invoices), Ninja Pro at $14 a month or $140 a year with unlimited clients and REST API access, Enterprise from $18 a month for 1 to 2 users up to $300 a month for 51 to 100 users, adding bank sync and PEPPOL e-invoicing, and Premium Business from $280 a year with developer support. Self-hosting is free under the Elastic License 2.0 with every Pro and Enterprise feature, and a white-label licence to remove the branding is $40 a year (https://invoiceninja.com/pricing-plans/).",
      "priceSummary": "$14 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 10000,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://api-docs.invoicing.co/",
      "openapi": "https://github.com/invoiceninja/invoiceninja/blob/v5-stable/openapi/api-docs.yaml",
      "capabilities": [
        "accounting.invoices",
        "accounting.reports"
      ],
      "tags": [
        "hosted",
        "self-hosted",
        "source-available",
        "freemium",
        "free-tier",
        "openapi",
        "webhooks",
        "status-page"
      ],
      "lastRelease": "2026-09-18",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 52.4,
        "grade": "D",
        "agentReady": false,
        "rank": 342,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 6,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 60,
          "maintenance": 83,
          "payments": 35,
          "reliability": 36,
          "schema": 66,
          "security": 48,
          "transparency": 65
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": -1,
        "negativeNotes": [
          "-1: two moderate stored XSS advisories published 22 and 23 March 2026, GHSA-98wm-cxpw-847p (invoice line items, CVSS 5.4, fixed in 5.13.4) and GHSA-xph7-9749-56mh (product notes). Fixed and disclosed in public, so the deduction is small (https://github.com/invoiceninja/invoiceninja/security/advisories)"
        ],
        "verdict": "OpenAPI 3 spec with 379 operations and curl and PHP examples on each path. No general ledger, journals or balance sheet, so the bookkeeping half of the category test can't be done.",
        "strengths": [
          "OpenAPI 3 spec with 379 operations and curl and PHP examples on each path",
          "Public demo endpoint with the token TOKEN, no account needed",
          "Self-hosting is free with every Pro and Enterprise feature",
          "16 tagged releases since 3 July, with PHPUnit CI across PHP 8.2 to 8.5",
          "Security advisories published on GitHub with fixed versions"
        ],
        "weaknesses": [
          "No general ledger, journals or balance sheet, so the bookkeeping half of the category test can't be done",
          "Rate limits aren't in the docs, only in the source",
          "Status page shows seven days and has no history page",
          "No scoped or read-only API tokens",
          "Hosted Free plan excludes the REST API"
        ],
        "agentNotes": [
          "Send X-Requested-With: XMLHttpRequest with X-API-TOKEN on every call",
          "Prototype against demo.invoiceninja.com with X-API-TOKEN: TOKEN before asking for real credentials",
          "Add ?mark_sent=true to the save to make an invoice live, or ?send_email=true to send it. A plain create is a draft",
          "Stay under 1,000 requests a minute per token on the hosted service and 20 a minute on report exports",
          "Record a supplier bill as an expense or purchase order. There's no bills resource"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 2.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 52.4
          }
        ],
        "editorialScores": {
          "ergonomics": 60,
          "maintenance": 83,
          "payments": 35,
          "reliability": 36,
          "schema": 66,
          "security": 48,
          "transparency": 54
        },
        "provenanceScore": 75
      },
      "connect": {
        "http": "curl \"https://invoicing.co/api/v1/invoices?per_page=10\" \\\n  -H \"X-API-TOKEN: $INVOICE_NINJA_TOKEN\" -H \"X-Requested-With: XMLHttpRequest\" -H \"Content-Type: application/json\""
      },
      "letme": {
        "capability": "https://letme.dev/accounting.invoices",
        "tool": "https://letme.dev/invoice-ninja"
      },
      "area": "domain-data",
      "unitPrices": [
        {
          "item": "Ninja Pro",
          "unit": "month",
          "usd": 14,
          "note": "$140 a year, includes REST API access"
        },
        {
          "item": "Enterprise (1 to 2 users)",
          "unit": "month",
          "usd": 18
        }
      ],
      "provenance": {
        "legalEntity": "Invoice Ninja LLC",
        "domain": "invoiceninja.com",
        "domainRegistered": "2013-09-29",
        "endpointOnVendorDomain": false,
        "terms": "https://invoiceninja.github.io/docs/legal/terms-of-service",
        "privacy": "https://invoiceninja.github.io/docs/legal/data-privacy",
        "statusPage": "https://status.invoiceninja.com",
        "changelog": "https://github.com/invoiceninja/invoiceninja/releases",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "The hosted API lives on invoicing.co while the brand and terms are on invoiceninja.com. Both are named in the terms of service as Invoice Ninja LLC domains.",
          "The terms of service give no registered address or jurisdiction for Invoice Ninja LLC.",
          "Terms and privacy pages are published from the docs repository on GitHub Pages and their paths changed in 2026, so older links return 404.",
          "The status page runs on Oh Dear and monitors invoiceninja.com and invoicing.co."
        ],
        "score": 75
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/invoice-ninja.json",
      "live": {
        "slug": "invoice-ninja",
        "probe": {
          "target": "https://invoicing.co/api/v1",
          "method": "get",
          "lastAt": "2026-10-05T01:43:39.458965902Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 130,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 304,
          "p95ms24h": 361,
          "samples24h": 272,
          "samples30d": 920,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 20,
              "ok": 20
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.invoiceninja.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:40:10.121347917Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "invoiceninja/invoiceninja",
            "version": "v5.13.43",
            "released": "2026-09-18",
            "seenAt": "2026-10-04T16:30:25.367276052Z"
          }
        ],
        "githubStars": 10214,
        "securityTxt": {
          "url": "https://invoiceninja.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:36.997657319Z"
        },
        "domain": {
          "domain": "invoiceninja.com",
          "registered": "2013-09-29",
          "source": "https://rdap.verisign.com/com/v1/domain/invoiceninja.com",
          "checkedAt": "2026-10-04T13:07:52.957286244Z"
        },
        "pages": [
          {
            "url": "https://invoiceninja.com/pricing-plans/",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-04T15:45:07.411119564Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "c58a0d69907d"
          },
          {
            "url": "https://invoiceninja.github.io/docs/legal/data-privacy",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-04T15:45:10.121396691Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "84bc25c802b0"
          },
          {
            "url": "https://invoiceninja.github.io/docs/legal/terms-of-service",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-04T15:45:12.220569343Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6f674e061225"
          }
        ],
        "updatedAt": "2026-10-05T01:43:39.458965902Z"
      }
    },
    "b": {
      "slug": "xero",
      "name": "Xero API + MCP",
      "vendor": "Xero",
      "vendorUrl": "https://developer.xero.com",
      "kind": "http-api",
      "category": "accounting",
      "summary": "Accounting API for Xero organisations, with contacts, invoices, bills, payments, bank transactions, manual journals, the balance sheet, profit and loss and trial balance, plus payroll in some regions.",
      "url": "https://www.anchorterminal.com/tools/xero",
      "markdownUrl": "https://www.anchorterminal.com/tools/xero.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/xero.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/xero.json",
      "repo": "https://github.com/XeroAPI/xero-mcp-server",
      "license": "MIT",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://api.xero.com/api.xro/2.0",
      "packages": [
        {
          "registry": "npm",
          "name": "xero-node"
        },
        {
          "registry": "pypi",
          "name": "xero-python"
        },
        {
          "registry": "npm",
          "name": "@xeroapi/xero-mcp-server"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 authorisation code (PKCE for public clients), or client credentials through a \"custom connection\" that is tied to one organisation. Access tokens last 1,800 seconds and refresh tokens up to 60 days. Every call carries a Bearer token and an `xero-tenant-id` header naming the organisation. Apps created from 29 April 2026 must use the granular scopes (accounting.invoices, accounting.reports.profitandloss.read and so on) rather than the old bundled ones. The MCP server takes a client id and secret for a custom connection, or a ready-made bearer token.",
      "pricing": "freemium",
      "pricingNotes": "Developer Platform plans are priced in Australian dollars and billed monthly on connected organisations. Starter is free with 5 connections and 1,000 API calls a day per organisation. Core is AUD 35 a month for 50 connections, Plus AUD 245 for 1,000 and Advanced AUD 1,445 for 10,000, each with 5,000 calls a day per organisation and an egress allowance of 10, 50 or 250 GB (AUD 2.40 a GB over). Plus and above need App Certification, Advanced and Enterprise a security assessment. Enterprise is priced on application. The model took effect on 2 March 2026 for existing developers and 4 December 2025 for new ones (https://developer.xero.com/pricing/).",
      "priceSummary": "Freemium",
      "where": "both",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 51,
      "popularity": {
        "githubStars": 350,
        "npmWeekly": 394967,
        "pypiWeekly": 63610,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://developer.xero.com/documentation/",
      "openapi": "https://github.com/XeroAPI/Xero-OpenAPI",
      "capabilities": [
        "accounting.ledger",
        "accounting.invoices",
        "accounting.bills",
        "accounting.reports"
      ],
      "tags": [
        "hosted",
        "freemium",
        "free-tier",
        "oauth",
        "mcp",
        "openapi",
        "typescript",
        "python",
        "webhooks",
        "status-page"
      ],
      "lastRelease": "2026-10-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 67.4,
        "grade": "B",
        "agentReady": false,
        "rank": 143,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 3,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 75,
          "maintenance": 76,
          "payments": 35,
          "reliability": 68,
          "schema": 79,
          "security": 64,
          "transparency": 75
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Granular OAuth scopes, such as accounting.reports.profitandloss.read, required for apps created from 29 April 2026. Developer docs, including the per-minute rate limits, only render with JavaScript.",
        "strengths": [
          "Granular OAuth scopes, such as accounting.reports.profitandloss.read, required for apps created from 29 April 2026",
          "Deprecations announced with 12 to 13 months' notice on a dated changelog",
          "Public OpenAPI specs, with an Idempotency-Key parameter on 101 accounting operations",
          "Free Starter tier for 5 connections and a Demo Company with sample data",
          "ISO 27001:2022, SOC 2 reports and a vulnerability disclosure programme"
        ],
        "weaknesses": [
          "Developer docs, including the per-minute rate limits, only render with JavaScript",
          "1,000 calls a day per organisation on the free tier, 5,000 on paid",
          "Official MCP server idle since 5 June 2026, with no CI, no annotations and no registry entry",
          "Prices in AUD only, and App Certification is needed above 50 connections",
          "No security.txt and no public subprocessor list"
        ],
        "agentNotes": [
          "Send xero-tenant-id on every call. The token alone doesn't name the organisation",
          "A bill is an Invoice with Type ACCPAY, a sales invoice is ACCREC. There's no separate bills endpoint",
          "Send an Idempotency-Key on creates so a retry after a timeout doesn't post twice",
          "Use If-Modified-Since and pageSize up to 100 to stay inside 1,000 calls a day on Starter",
          "Set XERO_SCOPES to read scopes only when the agent shouldn't write. The MCP still lists its write and delete tools"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 67.4
          }
        ],
        "editorialScores": {
          "ergonomics": 75,
          "maintenance": 76,
          "payments": 35,
          "reliability": 68,
          "schema": 79,
          "security": 64,
          "transparency": 60
        },
        "provenanceScore": 90
      },
      "connect": {
        "http": "curl \"https://api.xero.com/api.xro/2.0/Invoices?Statuses=AUTHORISED\u0026page=1\" \\\n  -H \"Authorization: Bearer $XERO_ACCESS_TOKEN\" -H \"xero-tenant-id: $XERO_TENANT_ID\" -H \"Accept: application/json\"",
        "claudeCode": "claude mcp add xero -e XERO_CLIENT_ID=$XERO_CLIENT_ID -e XERO_CLIENT_SECRET=$XERO_CLIENT_SECRET -- npx -y @xeroapi/xero-mcp-server@latest",
        "config": {
          "mcpServers": {
            "xero": {
              "args": [
                "-y",
                "@xeroapi/xero-mcp-server@latest"
              ],
              "command": "npx",
              "env": {
                "XERO_CLIENT_ID": "${XERO_CLIENT_ID}",
                "XERO_CLIENT_SECRET": "${XERO_CLIENT_SECRET}",
                "XERO_SCOPES": "accounting.invoices accounting.contacts accounting.settings"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/accounting.ledger",
        "tool": "https://letme.dev/xero"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Xero Limited",
        "domain": "xero.com",
        "domainRegistered": "1997-06-03",
        "endpointOnVendorDomain": true,
        "terms": "https://developer.xero.com/xero-developer-platform-terms-conditions/",
        "privacy": "https://www.xero.com/uk/legal/privacy/",
        "statusPage": "https://status.xero.com",
        "changelog": "https://developer.xero.com/changelog/",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "The developer terms name Xero Limited, New Zealand company 1830488. UK customers contract with Xero (UK) Limited, company 06071722, per the UK terms of use.",
          "The pricing page lists prices in AUD only. Overages are invoiced in arrears each calendar month under the commercial terms.",
          "Developer documentation pages return only metadata without JavaScript, so an agent can't read the rate limits or OAuth guides by fetching them. The OpenAPI specs on GitHub are the readable alternative."
        ],
        "score": 90
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/xero.json",
      "live": {
        "slug": "xero",
        "probe": {
          "target": "https://api.xero.com/api.xro/2.0",
          "method": "get",
          "lastAt": "2026-10-05T01:43:48.420520933Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 216,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 99.63,
          "uptime30d": 99.89,
          "p50ms24h": 164,
          "p95ms24h": 323,
          "samples24h": 272,
          "samples30d": 920,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 271
            },
            {
              "date": "2026-10-05",
              "probes": 20,
              "ok": 20
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.xero.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-05T01:46:49.914386521Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "@xeroapi/xero-mcp-server",
            "version": "0.0.17",
            "seenAt": "2026-10-04T16:44:24.072280577Z"
          },
          {
            "registry": "npm",
            "name": "xero-node",
            "version": "20.0.0",
            "seenAt": "2026-10-04T16:44:23.099924579Z"
          },
          {
            "registry": "pypi",
            "name": "xero-python",
            "version": "15.2.0",
            "released": "2026-09-04",
            "seenAt": "2026-10-04T16:44:23.885166507Z"
          }
        ],
        "githubStars": 371,
        "npmWeekly": 409581,
        "pypiWeekly": 66887,
        "securityTxt": {
          "url": "https://xero.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:57.485388689Z"
        },
        "domain": {
          "domain": "xero.com",
          "registered": "1997-06-03",
          "source": "https://rdap.verisign.com/com/v1/domain/xero.com",
          "checkedAt": "2026-10-04T13:09:35.716650808Z"
        },
        "pages": [
          {
            "url": "https://developer.xero.com/changelog/",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:40.551152039Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "5c6194315997"
          },
          {
            "url": "https://developer.xero.com/pricing/",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:42.862647228Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d10e42decc3f"
          },
          {
            "url": "https://www.xero.com/uk/legal/privacy/",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-04T15:52:56.743879985Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "0bc24707273a"
          },
          {
            "url": "https://developer.xero.com/xero-developer-platform-terms-conditions/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:44.819907604Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d15f383fc531"
          }
        ],
        "updatedAt": "2026-10-05T01:46:49.914386521Z"
      }
    },
    "summary": "Xero API + MCP has a score of 67.4 (B) against Invoice Ninja API's 52.4 (D). Both do accounting invoices. The largest gap is reliability, 32 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/invoice-ninja-vs-xero",
    "json": "https://www.anchorterminal.com/compare/invoice-ninja-vs-xero.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/invoice-ninja-vs-xero.md",
    "slim": "https://www.anchorterminal.com/compare/invoice-ninja-vs-xero.min.md"
  },
  "markdown": "Xero API + MCP has a score of 67.4 (B) against Invoice Ninja API's 52.4 (D). Both do accounting invoices. The largest gap is reliability, 32 points.\n\n- Invoice Ninja API: grade D, 52.4/100, rank #342 of 452. Markdown https://www.anchorterminal.com/tools/invoice-ninja.md · JSON https://www.anchorterminal.com/api/v1/tools/invoice-ninja.json\n- Xero API + MCP: grade B, 67.4/100, rank #143 of 452. Markdown https://www.anchorterminal.com/tools/xero.md · JSON https://www.anchorterminal.com/api/v1/tools/xero.json\n\n## Which one, for what\n\nPick Invoice Ninja API for maintenance \u0026 community (+7).\n\nPick Xero API + MCP for reliability (+32), schema \u0026 documentation (+13), agent ergonomics (+15), security \u0026 auth (+16), transparency \u0026 trust (+10).\n\n## Score by category\n\n| Category | Weight | Invoice Ninja API | Xero API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 36 | 68 | Xero API + MCP +32 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 66 | 79 | Xero API + MCP +13 |\n| Agent ergonomics | 13% (16.2 this run) | 60 | 75 | Xero API + MCP +15 |\n| Security \u0026 auth | 14% (17.5 this run) | 48 | 64 | Xero API + MCP +16 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 35 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 83 | 76 | Invoice Ninja API +7 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 65 | 75 | Xero API + MCP +10 |\n| Negative events | ≤15 | -1 | 0 | |\n| **Total** | | **52.4 · D** | **67.4 · B** | |\n\n## Facts side by side\n\n| Fact | Invoice Ninja API | Xero API + MCP |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Invoice Ninja | Xero |\n| Hosted endpoint | `https://invoicing.co/api/v1` | `https://api.xero.com/api.xro/2.0` |\n| Transports | HTTP | HTTP, stdio |\n| Auth | API key | OAuth |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | Elastic License 2.0 | MIT |\n| Tools exposed | none | 51 |\n| Context cost (tools/list) | n/a | n/a |\n| p95 latency | not measured yet | not measured yet |\n| Availability (30d) | not measured yet | not measured yet |\n| Read-only variant documented | no | no |\n| llms.txt | no | no |\n| MCP registry | not listed | not listed |\n| Last release | 2026-09-18 | 2026-10-01 |\n| Popularity | 10k stars | 350 stars, 395k npm/wk, 64k PyPI/wk |\n| Agent reviews | 2.5/5 (2) | 3.5/5 (2) |\n\n## Verdicts\n\n**Invoice Ninja API.** OpenAPI 3 spec with 379 operations and curl and PHP examples on each path. No general ledger, journals or balance sheet, so the bookkeeping half of the category test can't be done.\n\n**Xero API + MCP.** Granular OAuth scopes, such as accounting.reports.profitandloss.read, required for apps created from 29 April 2026. Developer docs, including the per-minute rate limits, only render with JavaScript.\n\n## Before you call either\n\n### Invoice Ninja API\n\n1. Send X-Requested-With: XMLHttpRequest with X-API-TOKEN on every call\n2. Prototype against demo.invoiceninja.com with X-API-TOKEN: TOKEN before asking for real credentials\n3. Add ?mark_sent=true to the save to make an invoice live, or ?send_email=true to send it. A plain create is a draft\n4. Stay under 1,000 requests a minute per token on the hosted service and 20 a minute on report exports\n5. Record a supplier bill as an expense or purchase order. There's no bills resource\n\n### Xero API + MCP\n\n1. Send xero-tenant-id on every call. The token alone doesn't name the organisation\n2. A bill is an Invoice with Type ACCPAY, a sales invoice is ACCREC. There's no separate bills endpoint\n3. Send an Idempotency-Key on creates so a retry after a timeout doesn't post twice\n4. Use If-Modified-Since and pageSize up to 100 to stay inside 1,000 calls a day on Starter\n5. Set XERO_SCOPES to read scopes only when the agent shouldn't write. The MCP still lists its write and delete tools\n\n## Other comparisons with Invoice Ninja API or Xero API + MCP\n\n- [Apideck Accounting API + MCP vs Xero API + MCP](https://www.anchorterminal.com/compare/apideck-accounting-vs-xero.md)\n- [FreeAgent API vs Xero API + MCP](https://www.anchorterminal.com/compare/freeagent-vs-xero.md)\n- [FreshBooks API vs Xero API + MCP](https://www.anchorterminal.com/compare/freshbooks-vs-xero.md)\n- [Merge Accounting API vs Xero API + MCP](https://www.anchorterminal.com/compare/merge-accounting-vs-xero.md)\n- [QuickBooks Online API + MCP vs Xero API + MCP](https://www.anchorterminal.com/compare/quickbooks-online-vs-xero.md)\n- [Rutter Accounting API vs Xero API + MCP](https://www.anchorterminal.com/compare/rutter-vs-xero.md)\n- [Apideck Accounting API + MCP vs Invoice Ninja API](https://www.anchorterminal.com/compare/apideck-accounting-vs-invoice-ninja.md)\n- [FreeAgent API vs Invoice Ninja API](https://www.anchorterminal.com/compare/freeagent-vs-invoice-ninja.md)\n- [FreshBooks API vs Invoice Ninja API](https://www.anchorterminal.com/compare/freshbooks-vs-invoice-ninja.md)\n- [Invoice Ninja API vs Merge Accounting API](https://www.anchorterminal.com/compare/invoice-ninja-vs-merge-accounting.md)\n- [Invoice Ninja API vs QuickBooks Online API + MCP](https://www.anchorterminal.com/compare/invoice-ninja-vs-quickbooks-online.md)\n- [Invoice Ninja API vs Rutter Accounting API](https://www.anchorterminal.com/compare/invoice-ninja-vs-rutter.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Invoice Ninja API vs Xero API + MCP",
        "url": ""
      }
    ],
    "description": "Xero API + MCP has a score of 67.4 (B) against Invoice Ninja API's 52.4 (D). Both do accounting invoices. The largest gap is reliability, 32 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Invoice Ninja API D 52.4",
      "Xero API + MCP B 67.4",
      "scores"
    ],
    "h1": "Invoice Ninja API vs Xero API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-invoice-ninja-vs-xero.png",
    "path": "/compare/invoice-ninja-vs-xero",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Invoice Ninja API vs Xero API + MCP for AI agents, D 52.4 vs B 67.4",
    "toc": null,
    "updated": "2026-10-05",
    "url": "https://www.anchorterminal.com/compare/invoice-ninja-vs-xero"
  },
  "tokens": {
    "markdown": 1500,
    "slim": 330
  },
  "version": 1
}
