{
  "data": {
    "a": {
      "slug": "expensify",
      "name": "Expensify",
      "vendor": "Expensify, Inc.",
      "vendorUrl": "https://www.expensify.com",
      "kind": "http-api",
      "category": "spend-management",
      "summary": "Expensify is an expense management service with receipt scanning, expense reports, approvals, reimbursement and company cards. Its Integration Server API exports report and card data and creates expenses, reports and workspace settings. A hosted MCP server gives read-only search.",
      "url": "https://www.anchorterminal.com/tools/expensify",
      "markdownUrl": "https://www.anchorterminal.com/tools/expensify.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/expensify.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/expensify.json",
      "license": "Proprietary service under the Expensify Terms of Service. The Expensify app client and help articles on GitHub (Expensify/App) are MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations",
      "packages": [],
      "auth": "mixed",
      "authNotes": "Access is self-serve for anyone with an Expensify account. Signing in at https://www.expensify.com/tools/integrations/ generates a partnerUserID and partnerUserSecret pair, shown once and replaceable on the same page. The pair travels inside the `requestJobDescription` form field and acts with the account's own rights, so domain and workspace admin jobs need an admin's credentials. Creating reports or expenses in other users' accounts needs Expensify to enable it for the domain by email to Concierge. OAuth2 for the API (authorisation code grant, scope `integrations:api`, two-hour access tokens, rotating refresh tokens) is in private beta by request form. The MCP server uses OAuth 2.1 with PKCE and the `mcp:tools` scope.",
      "pricing": "freemium",
      "pricingNotes": "No separate API fee is published. Collect is $5 per unique member a month, pay-per-use. Control is $18 per member a month on an annual subscription or $36 per active member pay-per-use, and as low as $9 with Expensify Card spend. A workspace starts a 30-day free trial, with a payment card asked for when it ends, and a free Submit workspace exists for individuals. An agent can start on the trial without a contract. No sandbox was found, and whether the API works without a paid plan wasn't established (checked 2026-10-08).",
      "priceSummary": "$5 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Integration Server reference, the help articles or the pricing article (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://integrations.expensify.com/Integration-Server/doc/",
      "capabilities": [
        "spend.transactions",
        "spend.expenses"
      ],
      "tags": [
        "hosted",
        "freemium",
        "api-key",
        "oauth",
        "mcp",
        "soc2",
        "pci-dss"
      ],
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 41.1,
        "grade": "E",
        "agentReady": false,
        "rank": 593,
        "ranked": true,
        "rankOf": 629,
        "categoryRank": 5,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 45,
          "maintenance": 23,
          "payments": 30,
          "reliability": 62,
          "schema": 28,
          "security": 34,
          "transparency": 58
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "One endpoint exports reports through caller-written templates and creates expenses, reports, rules and workspace settings, with limits of 5 requests per 10 seconds published and a status page that tracks the API separately. There is no OpenAPI spec, changelog, SDK, pagination or idempotency key, and one credential pair carries the whole account's rights.",
        "bestFor": "A finance team already on Expensify that wants an agent to export approved reports to an accounting system, create expenses and reports, keep categories, tags and employees in step with an HR system, or mark reports reimbursed.",
        "strengths": [
          "Export templates written in Freemarker let the caller choose every output field, in CSV, XLS, XLSX, TXT, PDF, JSON or XML, filtered by date, state, workspace and report ID",
          "Rate limits are published as 5 requests per 10 seconds and 20 per 60 seconds, with status 429 when exceeded",
          "The status page lists Integration APIs as its own component, and no incident in the 90 days to 8 October 2026 names it",
          "The hosted MCP server at https://www.expensify.com/mcp is read-only and uses OAuth 2.1 with PKCE, the `mcp:tools` scope and a revocation endpoint",
          "Every job in the reference has a curl example, a parameter table with valid values and a sample error response"
        ],
        "weaknesses": [
          "No OpenAPI spec, llms.txt, version number or changelog was found for the Integration Server API",
          "The partnerUserID and partnerUserSecret pair acts with all of the account's rights. No scopes or read-only credential were found for the API",
          "No idempotency key or pagination is documented, and no official SDK was found",
          "Errors arrive as `responseCode` in the body. An invalid credential returned HTTP 200 with `responseCode` 404 when we tried it on 8 October 2026",
          "The Terms of Service allow Expensify to modify or discontinue the service at any time without prior notice, and no SLA was found"
        ],
        "agentNotes": [
          "POST `requestJobDescription` as a form field to the single endpoint. Keep it out of the URL query string, because it carries the secret",
          "Read `responseCode` in the body on every reply. HTTP status can be 200 on failure, and validation errors use 410",
          "Stay under 5 requests per 10 seconds and 20 per 60 seconds. No Retry-After header is documented, so space retries yourself",
          "Export in two calls. A `file` job returns a filename, then a `download` job fetches it. Amounts are in cents",
          "Don't retry a create job blindly. No idempotency key exists, so export and check before resending. Set `dry-run` to true when testing the Advanced Employee Updater"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 41.1
          }
        ],
        "editorialScores": {
          "ergonomics": 45,
          "maintenance": 23,
          "payments": 30,
          "reliability": 62,
          "schema": 28,
          "security": 34,
          "transparency": 41
        },
        "provenanceScore": 75
      },
      "connect": {
        "http": "curl -X POST 'https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations' \\\n  -d 'requestJobDescription={\"type\":\"get\",\"credentials\":{\"partnerUserID\":\"_REPLACE_\",\"partnerUserSecret\":\"_REPLACE_\"},\"inputSettings\":{\"type\":\"policyList\"}}'"
      },
      "letme": {
        "capability": "https://letme.dev/spend.transactions",
        "tool": "https://letme.dev/expensify"
      },
      "area": "domain-data",
      "unitPrices": [
        {
          "item": "Collect plan, pay-per-use",
          "unit": "seat-month",
          "usd": 5,
          "note": "Per unique member. No separate API fee is published"
        },
        {
          "item": "Control plan, annual subscription",
          "unit": "seat-month",
          "usd": 18,
          "note": "As low as $9 with Expensify Card spend. Active members above the subscription size are $36"
        },
        {
          "item": "Control plan, pay-per-use",
          "unit": "seat-month",
          "usd": 36,
          "note": "Per active member"
        }
      ],
      "provenance": {
        "legalEntity": "Expensify, Inc.",
        "domain": "expensify.com",
        "domainRegistered": "2007-10-26",
        "endpointOnVendorDomain": true,
        "terms": "https://www.expensify.com/terms",
        "privacy": "https://www.expensify.com/privacy",
        "statusPage": "https://status.expensify.com",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The Terms of Service (last updated 10 September 2026) name Expensify, Inc., 401 SW 5th Ave, Portland, OR 97204, and govern the Expensify Service including related software and tools. No separate API agreement was found.",
          "The privacy policy (last updated 1 April 2026) is issued for the Expensify group and names Expensify, Inc. as controller.",
          "The API answers at integrations.expensify.com and the MCP server at www.expensify.com/mcp.",
          "https://www.expensify.com/.well-known/security.txt returned 404 on 8 October 2026.",
          "No changelog was found for the Integration Server API.",
          "RDAP for expensify.com gives a registration date of 2007-10-26."
        ],
        "score": 75
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/expensify.json",
      "live": {
        "slug": "expensify",
        "probe": {
          "target": "https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations",
          "method": "get",
          "lastAt": "2026-10-08T19:08:46.235159528Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 550,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 447,
          "p95ms24h": 550,
          "samples24h": 19,
          "samples30d": 19,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 19,
              "ok": 19
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.expensify.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-08T19:06:38.6773069Z"
        },
        "pages": [
          {
            "url": "https://www.expensify.com/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:27:38.986175098Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "a6875581ee6f"
          },
          {
            "url": "https://www.expensify.com/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:27:41.220273608Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "2df10b1a9dea"
          }
        ],
        "updatedAt": "2026-10-08T19:08:46.235159528Z"
      }
    },
    "answer": "Spendesk API + MCP scores 62.3 (B) on agent readiness against Expensify's 41.1 (E), and leads in 5 of 7 scored categories. Expensify leads on reliability and payments \u0026 pricing.",
    "b": {
      "slug": "spendesk",
      "name": "Spendesk API + MCP",
      "vendor": "Spendesk SAS",
      "vendorUrl": "https://www.spendesk.com",
      "kind": "http-api",
      "category": "spend-management",
      "summary": "Spend management platform from Spendesk SAS in Paris, covering company cards, expense claims, supplier invoices, purchase orders and accounting exports. Outside agents reach it through a REST API with scoped keys or OAuth, and a hosted MCP server.",
      "url": "https://www.anchorterminal.com/tools/spendesk",
      "markdownUrl": "https://www.anchorterminal.com/tools/spendesk.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/spendesk.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/spendesk.json",
      "license": "Proprietary service under Spendesk's terms and conditions and a separate Spendesk API agreement",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://public-api.spendesk.com",
      "packages": [],
      "auth": "mixed",
      "authNotes": "Access is granted by Spendesk, not self-serve. A customer asks its Spendesk representative for API access, then an Account Owner or Admin creates an API key (client ID and secret) with chosen scopes and an expiry of up to one year. The key is exchanged at POST /v1/auth/token with HTTP Basic for a Bearer token that lasts 60 minutes and can carry fewer scopes than the key. Partner integrations use OAuth 2.0 authorisation code with PKCE after approval by the partnerships team. The MCP server accepts only OAuth user tokens, refuses API keys, and limits use to Controllers and Account Owners. Experimental scopes are added on request.",
      "pricing": "paid",
      "pricingNotes": "No public prices. The pricing page describes a fixed monthly platform fee plus variable fees per transaction (card purchases, invoice payments and expense claims) and asks for a quote. It lists the open API and the MCP connection in the base package. No free tier, trial or self-serve sandbox was found. A demo environment exists at public-api.demo.spendesk.com, with credentials requested alongside API access (checked 2026-10-08).",
      "priceSummary": "Paid",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, the OpenAPI definition or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 62,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://developer.spendesk.com",
      "llmsTxt": "https://developer.spendesk.com/llms.txt",
      "openapi": "https://developer.spendesk.com/openapi/spendesk-public-api.json",
      "capabilities": [
        "spend.transactions",
        "spend.expenses",
        "spend.cards",
        "spend.bills",
        "spend.procurement"
      ],
      "tags": [
        "hosted",
        "enterprise",
        "api-key",
        "oauth",
        "mcp",
        "openapi",
        "llms-txt",
        "webhooks",
        "sales-led",
        "status-page",
        "iso27001",
        "bug-bounty"
      ],
      "lastRelease": "2026-09-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 62.3,
        "grade": "B",
        "agentReady": false,
        "rank": 306,
        "ranked": true,
        "rankOf": 629,
        "categoryRank": 2,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 62,
          "maintenance": 57,
          "payments": 0,
          "reliability": 55,
          "schema": 87,
          "security": 86,
          "transparency": 80
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Scoped credentials, MCP write permissions that are off by default, an action log and published guidance on prompt injection suit delegated finance work. Access needs a paying customer and a request to Spendesk, most write endpoints are experimental, no official SDK was found, and the status page lists three critical incidents between 2 and 29 September 2026.",
        "bestFor": "A finance team already on Spendesk that wants an assistant to analyse spend, follow invoices and prepare the accounting close, or an ERP sync reading payables and settlements.",
        "strengths": [
          "OpenAPI 3.1 definition with 106 operations, llms.txt and a Markdown copy of every docs page, all public without sign-in",
          "37 documented scopes split by resource and by read or write. A token can carry fewer scopes than its key, and keys expire within one year",
          "MCP write permissions are off by default, enabled per connection by an admin with a second factor, then ticked by each user",
          "Every MCP tool call is recorded in an action log with date, tool, status, user, company and correlation ID",
          "Rate limits are published (1,000 requests a minute per company and credential) with x-ratelimit headers on every response"
        ],
        "weaknesses": [
          "No public price, free tier or self-serve signup. API access and demo credentials are requested from a Spendesk representative",
          "Cards, transactions, invoices, purchase orders, webhooks and most writes sit behind experimental scopes granted on request, and may change",
          "No official SDK found on npm or PyPI, and the MCP server isn't in the official MCP registry",
          "status.spendesk.com has no API component and lists three critical and three major incidents opened between 2 and 29 September 2026",
          "An Idempotency-Key is documented only for creating an intake. A repeated purchase order or supplier request creates a second record"
        ],
        "agentNotes": [
          "Request a token at POST /v1/auth/token with HTTP Basic (client ID and secret). It lasts 3,600 seconds, so renew on a 401",
          "Stop paging at the last page calculated from `total` and `pageSize` (maximum 30). A page past the end returns 404, not an empty list",
          "With an organisation-level token, send `X-Company-Id` on every v1 call or expect a 400",
          "The MCP server refuses API keys. Connect with OAuth authorisation code and PKCE, and treat `Tool not found` (-32601) as a missing permission",
          "After an unclear write result, read the object again before retrying. Creating a purchase order or supplier twice creates two"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 62.3
          }
        ],
        "editorialScores": {
          "ergonomics": 62,
          "maintenance": 57,
          "payments": 0,
          "reliability": 55,
          "schema": 87,
          "security": 86,
          "transparency": 64
        },
        "provenanceScore": 96
      },
      "connect": {
        "http": "curl -X POST https://public-api.demo.spendesk.com/v1/auth/token \\\n  -u \"YOUR_CLIENT_ID:YOUR_CLIENT_SECRET\"\n\ncurl https://public-api.demo.spendesk.com/v1/wallet-summary \\\n  -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\""
      },
      "letme": {
        "capability": "https://letme.dev/spend.transactions",
        "tool": "https://letme.dev/spendesk"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Spendesk SAS",
        "domain": "spendesk.com",
        "domainRegistered": "2015-10-30",
        "endpointOnVendorDomain": true,
        "terms": "https://www.spendesk.com/legals/terms/",
        "privacy": "https://www.spendesk.com/legals/privacy/",
        "statusPage": "https://status.spendesk.com",
        "changelog": "https://developer.spendesk.com/changelog",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "The legal notice names Spendesk SAS, 7 Rue de Madrid, 75008 Paris, registration 821 893 286 R.C.S. Paris. The privacy policy (March 2025, version 0.5) gives the registered office as 51 rue de Londres, 75008 Paris.",
          "Payment services are supplied by Spendesk Financial Services (a French payment institution licensed by the ACPR, number 17518) in the EEA, Adyen in the UK and Sutton Bank in the US, per the site footer.",
          "The API and the MCP server answer at public-api.spendesk.com. An unauthenticated POST to /v1/mcp returned 401 with a WWW-Authenticate header naming the protected resource metadata.",
          "www.spendesk.com/.well-known/security.txt is present with a contact and an expiry of 31 December 2026. developer.spendesk.com/.well-known/security.txt returns 404.",
          "The terms page lists the customer terms, a DORA addendum, a Spendesk API agreement and partner programme terms. The document links are drawn by JavaScript and we couldn't open them.",
          "RDAP for spendesk.com gives a registration date of 2015-10-30."
        ],
        "score": 96
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/spendesk.json",
      "live": {
        "slug": "spendesk",
        "probe": {
          "target": "https://public-api.spendesk.com",
          "method": "get",
          "lastAt": "2026-10-08T19:08:59.237952658Z",
          "lastOk": true,
          "lastStatus": 403,
          "lastMs": 65,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 65,
          "p95ms24h": 110,
          "samples24h": 42,
          "samples30d": 42,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 42,
              "ok": 42
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.spendesk.com",
          "indicator": "minor",
          "summary": "Partially Degraded Service",
          "checkedAt": "2026-10-08T19:06:59.782257412Z"
        },
        "securityTxt": {
          "url": "https://spendesk.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2026-12-31T22:00:00.000Z",
          "checkedAt": "2026-10-08T15:38:39.004780879Z"
        },
        "pages": [
          {
            "url": "https://developer.spendesk.com/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:17:18.275650963Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "0a7493461e82"
          },
          {
            "url": "https://www.spendesk.com/legals/privacy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:30:38.654232386Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f77c18596c95"
          },
          {
            "url": "https://www.spendesk.com/legals/terms/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:30:41.303104049Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "880e4794e2b0"
          }
        ],
        "updatedAt": "2026-10-08T19:08:59.237952658Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Expensify, Inc.",
        "b": "Spendesk SAS",
        "name": "Vendor"
      },
      {
        "a": "https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations",
        "b": "https://public-api.spendesk.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under the Expensify Terms of Service. The Expensify app client and help articles on GitHub (Expensify/App) are MIT",
        "b": "Proprietary service under Spendesk's terms and conditions and a separate Spendesk API agreement",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "62",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "none",
        "b": "2026-09-29",
        "name": "Last release"
      },
      {
        "a": "2026-09-10",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2026-04-01",
        "b": "2025-03-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      }
    ],
    "faq": [
      {
        "answer": "Spendesk API + MCP scores 62.3 (B) on agent readiness against Expensify's 41.1 (E), and leads in 5 of 7 scored categories. Expensify leads on reliability and payments \u0026 pricing.",
        "question": "Which is better for AI agents, Expensify or Spendesk API + MCP?"
      },
      {
        "answer": "Both take an API key or an OAuth sign-in.",
        "question": "Do Expensify and Spendesk API + MCP need an API key?"
      },
      {
        "answer": "Yes. Expensify has a hosted endpoint at https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations and Spendesk API + MCP at https://public-api.spendesk.com.",
        "question": "Can an agent call Expensify and Spendesk API + MCP without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 62 against 55",
          "Payments \u0026 pricing, 30 against 0"
        ],
        "also": null,
        "goodFor": "A finance team already on Expensify that wants an agent to export approved reports to an accounting system, create expenses and reports, keep categories, tags and employees in step with an HR system, or mark reports reimbursed.",
        "slug": "expensify",
        "watchFor": "No OpenAPI spec, llms.txt, version number or changelog was found for the Integration Server API"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 87 against 28",
          "Agent ergonomics, 62 against 45",
          "Security \u0026 auth, 86 against 34",
          "Maintenance \u0026 community, 57 against 23",
          "Transparency \u0026 trust, 80 against 58"
        ],
        "also": null,
        "goodFor": "A finance team already on Spendesk that wants an assistant to analyse spend, follow invoices and prepare the accounting close, or an ERP sync reading payables and settlements.",
        "slug": "spendesk",
        "watchFor": "No public price, free tier or self-serve signup. API access and demo credentials are requested from a Spendesk representative"
      }
    ],
    "job": {
      "capability": "spend.transactions",
      "name": "Spend transactions"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/brex-vs-expensify.json",
        "title": "Brex vs Expensify",
        "url": "https://www.anchorterminal.com/compare/brex-vs-expensify"
      },
      {
        "json": "https://www.anchorterminal.com/compare/brex-vs-spendesk.json",
        "title": "Brex vs Spendesk API + MCP",
        "url": "https://www.anchorterminal.com/compare/brex-vs-spendesk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/expensify-vs-pleo.json",
        "title": "Expensify vs Pleo API + MCP",
        "url": "https://www.anchorterminal.com/compare/expensify-vs-pleo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/expensify-vs-ramp.json",
        "title": "Expensify vs Ramp",
        "url": "https://www.anchorterminal.com/compare/expensify-vs-ramp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/pleo-vs-spendesk.json",
        "title": "Pleo API + MCP vs Spendesk API + MCP",
        "url": "https://www.anchorterminal.com/compare/pleo-vs-spendesk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ramp-vs-spendesk.json",
        "title": "Ramp vs Spendesk API + MCP",
        "url": "https://www.anchorterminal.com/compare/ramp-vs-spendesk"
      }
    ],
    "scores": [
      {
        "by": 7,
        "edge": "expensify",
        "expensify": 62,
        "key": "reliability",
        "name": "Reliability",
        "spendesk": 55,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 59,
        "edge": "spendesk",
        "expensify": 28,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "spendesk": 87,
        "weight": 13
      },
      {
        "by": 17,
        "edge": "spendesk",
        "expensify": 45,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "spendesk": 62,
        "weight": 13
      },
      {
        "by": 52,
        "edge": "spendesk",
        "expensify": 34,
        "key": "security",
        "name": "Security \u0026 auth",
        "spendesk": 86,
        "weight": 14
      },
      {
        "by": 30,
        "edge": "expensify",
        "expensify": 30,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "spendesk": 0,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 34,
        "edge": "spendesk",
        "expensify": 23,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "spendesk": 57,
        "weight": 7
      },
      {
        "by": 22,
        "edge": "spendesk",
        "expensify": 58,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "spendesk": 80,
        "weight": 7
      }
    ],
    "summary": "Spendesk API + MCP scores 62.3 (B) on agent readiness against Expensify's 41.1 (E), and leads in 5 of 7 scored categories. Expensify leads on reliability and payments \u0026 pricing. Both do spend transactions.",
    "verdicts": {
      "expensify": "One endpoint exports reports through caller-written templates and creates expenses, reports, rules and workspace settings, with limits of 5 requests per 10 seconds published and a status page that tracks the API separately. There is no OpenAPI spec, changelog, SDK, pagination or idempotency key, and one credential pair carries the whole account's rights.",
      "spendesk": "Scoped credentials, MCP write permissions that are off by default, an action log and published guidance on prompt injection suit delegated finance work. Access needs a paying customer and a request to Spendesk, most write endpoints are experimental, no official SDK was found, and the status page lists three critical incidents between 2 and 29 September 2026."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/expensify-vs-spendesk",
    "json": "https://www.anchorterminal.com/compare/expensify-vs-spendesk.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/expensify-vs-spendesk.md",
    "slim": "https://www.anchorterminal.com/compare/expensify-vs-spendesk.min.md"
  },
  "markdown": "Spendesk API + MCP scores 62.3 (B) on agent readiness against Expensify's 41.1 (E), and leads in 5 of 7 scored categories. Expensify leads on reliability and payments \u0026 pricing. Both do spend transactions.\n\n- Expensify: grade E, 41.1/100, rank #593 of 629. Markdown https://www.anchorterminal.com/tools/expensify.md · JSON https://www.anchorterminal.com/api/v1/tools/expensify.json\n- Spendesk API + MCP: grade B, 62.3/100, rank #306 of 629. Markdown https://www.anchorterminal.com/tools/spendesk.md · JSON https://www.anchorterminal.com/api/v1/tools/spendesk.json\n\n## Which one, for what\n\n### Expensify (E)\n\nGood for: A finance team already on Expensify that wants an agent to export approved reports to an accounting system, create expenses and reports, keep categories, tags and employees in step with an HR system, or mark reports reimbursed.\n\nAhead on:\n- Reliability, 62 against 55\n- Payments \u0026 pricing, 30 against 0\n\nWatch for: No OpenAPI spec, llms.txt, version number or changelog was found for the Integration Server API\n\n### Spendesk API + MCP (B)\n\nGood for: A finance team already on Spendesk that wants an assistant to analyse spend, follow invoices and prepare the accounting close, or an ERP sync reading payables and settlements.\n\nAhead on:\n- Schema \u0026 documentation, 87 against 28\n- Agent ergonomics, 62 against 45\n- Security \u0026 auth, 86 against 34\n- Maintenance \u0026 community, 57 against 23\n- Transparency \u0026 trust, 80 against 58\n\nWatch for: No public price, free tier or self-serve signup. API access and demo credentials are requested from a Spendesk representative\n\n\n## Score by category\n\n| Category | Weight | Expensify | Spendesk API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 62 | 55 | Expensify +7 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 28 | 87 | Spendesk API + MCP +59 |\n| Agent ergonomics | 13% (16.2 this run) | 45 | 62 | Spendesk API + MCP +17 |\n| Security \u0026 auth | 14% (17.5 this run) | 34 | 86 | Spendesk API + MCP +52 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 0 | Expensify +30 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 23 | 57 | Spendesk API + MCP +34 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 58 | 80 | Spendesk API + MCP +22 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **41.1 · E** | **62.3 · B** | |\n\n## Facts side by side\n\n| Fact | Expensify | Spendesk API + MCP |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Expensify, Inc. | Spendesk SAS |\n| Hosted endpoint | `https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations` | `https://public-api.spendesk.com` |\n| Transports | HTTP | HTTP |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Freemium | Paid |\n| x402 | no | no |\n| Licence | Proprietary service under the Expensify Terms of Service. The Expensify app client and help articles on GitHub (Expensify/App) are MIT | Proprietary service under Spendesk's terms and conditions and a separate Spendesk API agreement |\n| Tools exposed | none | 62 |\n| Read-only variant documented | yes | no |\n| llms.txt | no | yes |\n| Last release | none | 2026-09-29 |\n| Terms last updated | 2026-09-10 | couldn't be read |\n| Privacy policy last updated | 2026-04-01 | 2025-03-01 |\n| Customer content may train models | not found in the text | couldn't be read |\n| Terms restrict automated access | yes | couldn't be read |\n| Terms restrict benchmarking | not found in the text | couldn't be read |\n| Terms or service can change without notice | yes | couldn't be read |\n| Arbitration or class-action waiver | yes | couldn't be read |\n\n## Verdicts\n\n**Expensify.** One endpoint exports reports through caller-written templates and creates expenses, reports, rules and workspace settings, with limits of 5 requests per 10 seconds published and a status page that tracks the API separately. There is no OpenAPI spec, changelog, SDK, pagination or idempotency key, and one credential pair carries the whole account's rights.\n\n**Spendesk API + MCP.** Scoped credentials, MCP write permissions that are off by default, an action log and published guidance on prompt injection suit delegated finance work. Access needs a paying customer and a request to Spendesk, most write endpoints are experimental, no official SDK was found, and the status page lists three critical incidents between 2 and 29 September 2026.\n\n## Before you call either\n\n### Expensify\n\n1. POST `requestJobDescription` as a form field to the single endpoint. Keep it out of the URL query string, because it carries the secret\n2. Read `responseCode` in the body on every reply. HTTP status can be 200 on failure, and validation errors use 410\n3. Stay under 5 requests per 10 seconds and 20 per 60 seconds. No Retry-After header is documented, so space retries yourself\n4. Export in two calls. A `file` job returns a filename, then a `download` job fetches it. Amounts are in cents\n5. Don't retry a create job blindly. No idempotency key exists, so export and check before resending. Set `dry-run` to true when testing the Advanced Employee Updater\n\n### Spendesk API + MCP\n\n1. Request a token at POST /v1/auth/token with HTTP Basic (client ID and secret). It lasts 3,600 seconds, so renew on a 401\n2. Stop paging at the last page calculated from `total` and `pageSize` (maximum 30). A page past the end returns 404, not an empty list\n3. With an organisation-level token, send `X-Company-Id` on every v1 call or expect a 400\n4. The MCP server refuses API keys. Connect with OAuth authorisation code and PKCE, and treat `Tool not found` (-32601) as a missing permission\n5. After an unclear write result, read the object again before retrying. Creating a purchase order or supplier twice creates two\n\n## Questions\n\n### Which is better for AI agents, Expensify or Spendesk API + MCP?\n\nSpendesk API + MCP scores 62.3 (B) on agent readiness against Expensify's 41.1 (E), and leads in 5 of 7 scored categories. Expensify leads on reliability and payments \u0026 pricing.\n\n### Do Expensify and Spendesk API + MCP need an API key?\n\nBoth take an API key or an OAuth sign-in.\n\n### Can an agent call Expensify and Spendesk API + MCP without installing anything?\n\nYes. Expensify has a hosted endpoint at https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations and Spendesk API + MCP at https://public-api.spendesk.com.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/expensify-vs-spendesk.json, and with the fewest tokens: https://www.anchorterminal.com/compare/expensify-vs-spendesk.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"expensify\", \"b\": \"spendesk\"}`. From a terminal: `anchor compare expensify spendesk`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/expensify.json and https://www.anchorterminal.com/api/v1/tools/spendesk.json\n\n## Other comparisons with Expensify or Spendesk API + MCP\n\n- [Brex vs Expensify](https://www.anchorterminal.com/compare/brex-vs-expensify.md)\n- [Brex vs Spendesk API + MCP](https://www.anchorterminal.com/compare/brex-vs-spendesk.md)\n- [Expensify vs Pleo API + MCP](https://www.anchorterminal.com/compare/expensify-vs-pleo.md)\n- [Expensify vs Ramp](https://www.anchorterminal.com/compare/expensify-vs-ramp.md)\n- [Pleo API + MCP vs Spendesk API + MCP](https://www.anchorterminal.com/compare/pleo-vs-spendesk.md)\n- [Ramp vs Spendesk API + MCP](https://www.anchorterminal.com/compare/ramp-vs-spendesk.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-08",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "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": "Expensify vs Spendesk API + MCP",
        "url": ""
      }
    ],
    "description": "Spendesk API + MCP scores 62.3 (B) on agent readiness against Expensify's 41.1 (E), and leads in 5 of 7 scored categories. Expensify leads on reliability and payments \u0026 pricing. Both do spend transactions. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Expensify E 41.1",
      "Spendesk API + MCP B 62.3",
      "scores"
    ],
    "h1": "Expensify vs Spendesk API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/compare-expensify-vs-spendesk.png",
    "path": "/compare/expensify-vs-spendesk",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Expensify vs Spendesk API + MCP for AI agents, E 41.1 vs B 62.3",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/expensify-vs-spendesk"
  },
  "tokens": {
    "markdown": 2100,
    "slim": 780
  },
  "version": 1
}
