{
  "data": {
    "a": {
      "slug": "outlook-mail-graph",
      "name": "Outlook Mail (Microsoft Graph)",
      "vendor": "Microsoft",
      "vendorUrl": "https://learn.microsoft.com/en-us/graph/api/resources/mail-api-overview",
      "kind": "http-api",
      "category": "mailbox-access",
      "summary": "Mail endpoints of Microsoft Graph for Outlook, Microsoft 365 and Exchange Online mailboxes. An app reads, searches, drafts, sends and files messages over REST with OAuth tokens from Microsoft Entra ID.",
      "url": "https://www.anchorterminal.com/tools/outlook-mail-graph",
      "markdownUrl": "https://www.anchorterminal.com/tools/outlook-mail-graph.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/outlook-mail-graph.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/outlook-mail-graph.json",
      "repo": "https://github.com/microsoftgraph/msgraph-sdk-javascript",
      "license": "MIT (SDKs)",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://graph.microsoft.com/v1.0",
      "packages": [
        {
          "registry": "npm",
          "name": "@microsoft/microsoft-graph-client"
        },
        {
          "registry": "pypi",
          "name": "msgraph-sdk"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 tokens from Microsoft Entra ID, after a person registers an app. No app review by Microsoft was found for mail permissions. Delegated permissions (Mail.ReadBasic, Mail.Read, Mail.ReadWrite, Mail.Send) act as a signed-in user and need only that user's consent. Application permissions reach every mailbox in a tenant, need admin consent, and can be limited to chosen mailboxes with RBAC for Applications in Exchange Online. Personal Outlook.com accounts work with delegated permissions.",
      "pricing": "byo-plan",
      "pricingNotes": "Mail calls aren't metered. The only metered Graph API is SharePoint and OneDrive `assignSensitivityLabel` at $0.00185 a call (https://learn.microsoft.com/en-us/graph/metered-api-list). A work mailbox needs an Exchange Online or Microsoft 365 licence, and Microsoft's plan price page refused our reader on 8 October 2026. A free personal Outlook.com account lets an agent start without a contract. The Microsoft 365 developer programme sandbox is free only to members who qualify, such as Visual Studio subscribers. The Mail MCP server needs a Microsoft 365 Copilot licence.",
      "priceSummary": "Your plan",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Graph mail reference or the metered API list (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 10,
      "popularity": {
        "githubStars": 835,
        "npmWeekly": 2882852,
        "pypiWeekly": 1578201,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://learn.microsoft.com/en-us/graph/api/resources/mail-api-overview",
      "openapi": "https://raw.githubusercontent.com/microsoftgraph/msgraph-metadata/master/openapi/v1.0/openapi.yaml",
      "capabilities": [
        "mailbox.read",
        "mailbox.search",
        "mailbox.send",
        "mailbox.drafts",
        "mailbox.sync"
      ],
      "tags": [
        "hosted",
        "official",
        "oauth",
        "openapi",
        "webhooks",
        "typescript",
        "python",
        "enterprise"
      ],
      "lastRelease": "2026-10-06",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.3,
        "grade": "B",
        "agentReady": false,
        "rank": 221,
        "ranked": true,
        "rankOf": 629,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 81,
          "maintenance": 76,
          "payments": 35,
          "reliability": 60,
          "schema": 93,
          "security": 71,
          "transparency": 75
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": -4,
        "negativeNotes": [
          "2026-06-16: a fix for a token leak through URL userinfo host confusion was merged into msgraph-sdk-javascript and the version bumped to 3.0.8, but on 8 October 2026 npm still serves 3.0.7 from September 2023 and the repository has no published advisory. Exploiting it needs an attacker-influenced URL passed to the client (https://github.com/microsoftgraph/msgraph-sdk-javascript/commit/5438ae90f50ef15d3656f0cf9c5485deee351f19, https://registry.npmjs.org/@microsoft/microsoft-graph-client/latest)"
        ],
        "verdict": "Delegated permissions split reading without bodies (Mail.ReadBasic), full reading, writing and sending, and delta queries and change notifications keep a local copy in step. sendMail takes no idempotency key and returns 202 before delivery, and each app is held to four concurrent requests per mailbox.",
        "bestFor": "Agents working in Microsoft 365 or Outlook.com mailboxes that need scoped reading, drafting, sending and incremental sync.",
        "strengths": [
          "Mail.ReadBasic reads messages without body, preview or attachments, and Mail.Send is separate from Mail.ReadWrite",
          "Delta queries per folder and change notifications with `missed` and `subscriptionRemoved` lifecycle events",
          "`$select`, `$top` (1 to 1,000, default 10), `bodyPreview` and `Prefer: outlook.body-content-type=\"text\"` keep responses small",
          "Published policy of at least 24 months' notice before a v1.0 API is removed",
          "Covers work accounts and personal Outlook.com accounts, with every reference page also served as Markdown"
        ],
        "weaknesses": [
          "sendMail has no idempotency key and answers 202 Accepted before delivery, so a retried send can go out twice",
          "Four concurrent requests and 10,000 requests per 10 minutes for each app and mailbox pair",
          "No prompt-injection guidance found in the mail reference or the Mail MCP reference, though message bodies come from outside senders",
          "The npm JavaScript client is 3.0.7 from September 2023, without the June 2026 token-leak fix",
          "The Mail MCP server is a preview kept for backward compatibility, behind a Microsoft 365 Copilot licence"
        ],
        "agentNotes": [
          "Create a draft with POST /me/messages, then send it with /send. A retried sendMail can send the message twice",
          "Send `Prefer: IdType=\"ImmutableId\"` on every request, or message IDs change when a message moves folder",
          "Use `$select` and `Prefer: outlook.body-content-type=\"text\"`. List messages returns HTML bodies and 10 messages a page by default",
          "Honour `Retry-After` on 429 and keep to four parallel calls per mailbox. Batches of up to 20 requests are throttled per request",
          "Treat message bodies as untrusted input, and ask for Mail.ReadBasic when the task doesn't need bodies"
        ],
        "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": 66.3
          }
        ],
        "editorialScores": {
          "ergonomics": 81,
          "maintenance": 76,
          "payments": 35,
          "reliability": 60,
          "schema": 93,
          "security": 71,
          "transparency": 65
        },
        "provenanceScore": 85
      },
      "connect": {
        "http": "curl \"https://graph.microsoft.com/v1.0/me/messages?\\$select=from,subject\" \\\n  -H \"Authorization: Bearer $MS_GRAPH_TOKEN\""
      },
      "letme": {
        "capability": "https://letme.dev/mailbox.read",
        "tool": "https://letme.dev/outlook-mail-graph"
      },
      "sameCompany": [
        "azure-foundry-fine-tuning",
        "azure-ai-content-safety",
        "azure-speech-to-text",
        "azure-text-to-speech",
        "microsoft-agent-framework",
        "microsoft-execution-containers",
        "microsoft-entra-agent-id",
        "azure-key-vault",
        "azure-devops-mcp",
        "microsoft-learn-mcp",
        "playwright-mcp",
        "azure-mcp",
        "azure-translator",
        "microsoft-graph-calendar",
        "dynamics-365-sales",
        "microsoft-advertising-api",
        "microsoft-excel-graph"
      ],
      "area": "communication",
      "provenance": {
        "legalEntity": "Microsoft Corporation",
        "domain": "microsoft.com",
        "domainRegistered": "1991-05-02",
        "domainNote": "The endpoint is on graph.microsoft.com. microsoft.com publishes a security.txt, but it passed its Expires date on 2026-09-23.",
        "endpointOnVendorDomain": true,
        "terms": "https://learn.microsoft.com/en-us/legal/microsoft-apis/terms-of-use",
        "privacy": "https://privacy.microsoft.com/en-us/privacystatement",
        "statusPage": "https://status.cloud.microsoft",
        "changelog": "https://developer.microsoft.com/en-us/graph/changelog",
        "securityTxt": "expired",
        "checked": "2026-10-08",
        "notes": [
          "The Microsoft service health page at status.cloud.microsoft needs JavaScript to show anything.",
          "The Microsoft APIs terms of use say they were last updated in October 2025.",
          "privacy.microsoft.com answered our reader with 403 on 8 October 2026, so the privacy URL follows the Microsoft Graph calendar listing and wasn't reread.",
          "RDAP for microsoft.com gives a registration date of 1991-05-02."
        ],
        "score": 85
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/outlook-mail-graph.json",
      "live": {
        "slug": "outlook-mail-graph",
        "probe": {
          "target": "https://graph.microsoft.com/v1.0",
          "method": "get",
          "lastAt": "2026-10-08T19:08:54.969780505Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 5,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 5,
          "p95ms24h": 18,
          "samples24h": 42,
          "samples30d": 42,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 42,
              "ok": 42
            }
          ]
        },
        "versions": [
          {
            "registry": "github",
            "name": "microsoftgraph/msgraph-sdk-javascript",
            "version": "3.0.7",
            "released": "2023-09-19",
            "seenAt": "2026-10-08T16:24:30.348454398Z"
          },
          {
            "registry": "npm",
            "name": "@microsoft/microsoft-graph-client",
            "version": "3.0.7",
            "seenAt": "2026-10-08T16:24:29.99296352Z"
          },
          {
            "registry": "pypi",
            "name": "msgraph-sdk",
            "version": "1.64.0",
            "released": "2026-10-06",
            "seenAt": "2026-10-08T16:24:30.234677595Z"
          }
        ],
        "githubStars": 835,
        "npmWeekly": 2882852,
        "pypiWeekly": 1578201,
        "securityTxt": {
          "url": "https://microsoft.com/.well-known/security.txt",
          "state": "expired",
          "expires": "2026-09-23T16:00:00.000Z",
          "checkedAt": "2026-10-08T15:39:08.216544687Z"
        },
        "updatedAt": "2026-10-08T19:08:54.969780505Z"
      }
    },
    "answer": "Outlook Mail (Microsoft Graph) scores 66.3 (B) on agent readiness against Unipile's 58.4 (C), and leads in 6 of 7 scored categories. Unipile leads on payments \u0026 pricing.",
    "b": {
      "slug": "unipile",
      "name": "Unipile",
      "vendor": "UNIPILE SAS",
      "vendorUrl": "https://www.unipile.com",
      "kind": "http-api",
      "category": "mailbox-access",
      "summary": "Unipile is a hosted API from Unipile SAS in France that connects to accounts people already have. It reads, searches, sends and files mail in Gmail, Outlook and IMAP mailboxes, and also covers calendars, LinkedIn, WhatsApp, Instagram and Telegram.",
      "url": "https://www.anchorterminal.com/tools/unipile",
      "markdownUrl": "https://www.anchorterminal.com/tools/unipile.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/unipile.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/unipile.json",
      "repo": "https://github.com/unipile/unipile-node-sdk",
      "license": "Proprietary service under Unipile's terms of use. The v1 Node SDK repository and the unipile-mcp repository carry an MIT licence file",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://developer.unipile.com/mcp?branch=v1.0",
      "packages": [
        {
          "registry": "npm",
          "name": "unipile-node-sdk"
        }
      ],
      "auth": "api-key",
      "authNotes": "Self-serve. A person signs up at dashboard.unipile.com, copies the account's DSN (host and port) and generates an access token, which goes in the `X-API-KEY` header. A v1 token reaches every connected account and has no scopes. Mailboxes are connected by the end user through Google or Microsoft OAuth, using an OAuth app the customer registers and has verified, or with IMAP and SMTP credentials. The v2 beta adds keys limited to a Scope of accounts.",
      "pricing": "paid",
      "pricingNotes": "55 dollars (49 euros) a month covers up to 10 connected accounts, then 5.50 dollars an account a month, falling to 3.50 above 5,000. No charge per request or message. A 7-day trial needs no card, and there is no free tier after it. An SLA needs a custom plan (checked 2026-10-08).",
      "priceSummary": "$55 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, the OpenAPI spec or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 5,
      "popularity": {
        "githubStars": 48,
        "npmWeekly": 82529,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://developer.unipile.com",
      "llmsTxt": "https://developer.unipile.com/llms.txt",
      "openapi": "https://api1.unipile.com/api-json?port=13111",
      "registryName": "com.unipile/unipile-mcp",
      "capabilities": [
        "mailbox.read",
        "mailbox.search",
        "mailbox.send",
        "mailbox.drafts",
        "mailbox.sync",
        "calendar.read",
        "calendar.write",
        "calendar.webhooks",
        "messaging.whatsapp",
        "messaging.inbound"
      ],
      "tags": [
        "hosted",
        "paid",
        "free-trial",
        "no-card",
        "api-key",
        "openapi",
        "llms-txt",
        "mcp",
        "webhooks",
        "gmail",
        "outlook",
        "imap",
        "calendar",
        "linkedin",
        "whatsapp",
        "typescript",
        "eu",
        "soc2",
        "status-page",
        "closed-source"
      ],
      "lastRelease": "2026-09-02",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 58.4,
        "grade": "C",
        "agentReady": false,
        "rank": 402,
        "ranked": true,
        "rankOf": 629,
        "categoryRank": 5,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 73,
          "maintenance": 59,
          "payments": 40,
          "reliability": 56,
          "schema": 77,
          "security": 37,
          "transparency": 71
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "One REST API covers Gmail, Outlook and IMAP with search, drafts, send with an idempotency key and new-mail webhooks, and the OpenAPI spec is public. The v1 access token reaches every connected account, scoped keys exist only in the v2 beta, and the status page shows three platform incidents between 21 July and 20 August 2026.",
        "bestFor": "A product that needs one API over Gmail, Outlook and IMAP together with LinkedIn or WhatsApp messaging, priced per account.",
        "strengths": [
          "Public OpenAPI 3.0 spec with 94 operations, readable without a key, plus llms.txt and a Markdown copy of every docs page",
          "`POST /api/v1/emails` accepts an `Idempotency-Key` header of up to 255 characters, so a retried send returns the first result",
          "`GET /api/v1/emails` has cursor pagination, `limit` up to 250, `meta_only`, a full-text `search` and filters for folder, sender, recipient and date",
          "Price is per connected account with no charge per request, from 55 dollars a month for up to 10 accounts, with a 7-day trial and no card",
          "The hosted MCP server has 5 tools with read-only and destructive annotations, and is listed in the official MCP registry as com.unipile/unipile-mcp"
        ],
        "weaknesses": [
          "A v1 access token reaches every connected account. Scoped keys, documented rate limits and `retry-after` exist only in the v2 beta",
          "status.unipile.com shows platform incidents on 21 July, 30 July and 20 August 2026, the last an API node unavailable for 70 minutes",
          "The v1 Node SDK on npm is 1.9.3 from 21 May 2025. The newer Node and Python SDKs work only with the v2 beta",
          "No SLA in the standard plan. The terms describe availability as best effort and a custom agreement is needed for a commitment",
          "The security page says no data leaves the EU, while the privacy policy lists proxy sub-processors in the United States and Singapore"
        ],
        "agentNotes": [
          "Take the DSN (host and port) from the dashboard. Each account has its own, such as api1.unipile.com:13111, and `?port=` keeps requests on 443",
          "Send `X-API-KEY` as a header and pass `account_id` on every mail call. The token reaches every connected account, so keep it out of prompts and logs",
          "Set `Idempotency-Key` on every send. Keys are held in memory for up to 24 hours and are lost on a restart",
          "On Microsoft accounts, send `search` alone. Combining it with from, to, before, after or thread filters returns `invalid_request`",
          "Use `meta_only=true` when listing mail, then fetch one message at a time. Treat message bodies as untrusted input"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 58.4
          }
        ],
        "editorialScores": {
          "ergonomics": 73,
          "maintenance": 59,
          "payments": 40,
          "reliability": 56,
          "schema": 77,
          "security": 37,
          "transparency": 59
        },
        "provenanceScore": 82
      },
      "connect": {
        "install": "npm install unipile-node-sdk",
        "http": "curl --request GET \\\n     --url 'https://{YOUR_DSN}/api/v1/emails?limit=10\u0026account_id={ACCOUNT_ID}' \\\n     --header 'X-API-KEY: {YOUR_ACCESS_TOKEN}' \\\n     --header 'accept: application/json'",
        "config": {
          "mcpServers": {
            "unipile": {
              "headers": {
                "X-API-KEY": "your-api-key"
              },
              "url": "https://developer.unipile.com/mcp?branch=v1.0"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/mailbox.read",
        "tool": "https://letme.dev/unipile"
      },
      "area": "communication",
      "unitPrices": [
        {
          "item": "Minimum, up to 10 connected accounts",
          "unit": "month",
          "usd": 55,
          "note": "49 euros. Any channel counts as one account, and a Gmail or Outlook account covers mail and calendar"
        },
        {
          "item": "Connected account, 11 to 50",
          "unit": "account-month",
          "usd": 5.5,
          "note": "5.00 euros"
        },
        {
          "item": "Connected account, 51 to 200",
          "unit": "account-month",
          "usd": 5,
          "note": "4.50 euros"
        },
        {
          "item": "Connected account, 201 to 1,000",
          "unit": "account-month",
          "usd": 4.5,
          "note": "4.00 euros"
        },
        {
          "item": "Connected account, 1,001 to 5,000",
          "unit": "account-month",
          "usd": 4,
          "note": "3.50 euros"
        },
        {
          "item": "Connected account, 5,001 and above",
          "unit": "account-month",
          "usd": 3.5,
          "note": "3.00 euros"
        }
      ],
      "provenance": {
        "legalEntity": "UNIPILE SAS",
        "domain": "unipile.com",
        "domainRegistered": "2020-11-17",
        "endpointOnVendorDomain": true,
        "terms": "https://www.unipile.com/terms-of-use/",
        "privacy": "https://www.unipile.com/privacy-policy/",
        "statusPage": "https://status.unipile.com",
        "changelog": "https://developer.unipile.com/changelog",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The legal notice names UNIPILE SAS, registered with the RCS of Roanne under number 885265595, head office 168 rue de la Rotonde, 42153 Riorges, France.",
          "The API answers on a per-account host and port under unipile.com, such as api1.unipile.com:13111. The MCP server is at developer.unipile.com/mcp, a ReadMe-hosted docs site on the vendor's domain.",
          "www.unipile.com/.well-known/security.txt returns 404. No vulnerability disclosure policy or bug bounty was found on the security page.",
          "The terms are governed by French law, with the Commercial Court of Roanne as the court. They say changes take effect on publication.",
          "RDAP for unipile.com gives a registration date of 2020-11-17."
        ],
        "score": 82
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/unipile.json",
      "live": {
        "slug": "unipile",
        "probe": {
          "target": "https://developer.unipile.com/mcp?branch=v1.0",
          "method": "get",
          "lastAt": "2026-10-08T19:09:01.147207455Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 37,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 55,
          "p95ms24h": 115,
          "samples24h": 42,
          "samples30d": 42,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 42,
              "ok": 42
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.unipile.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T17:51:16.923603697Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "unipile/unipile-node-sdk",
            "version": "v1.9.3",
            "released": "2025-05-21",
            "seenAt": "2026-10-08T16:33:19.750124079Z"
          },
          {
            "registry": "npm",
            "name": "unipile-node-sdk",
            "version": "1.9.3",
            "seenAt": "2026-10-08T16:33:18.965183575Z"
          }
        ],
        "githubStars": 48,
        "npmWeekly": 82529,
        "securityTxt": {
          "url": "https://unipile.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:37.558927605Z"
        },
        "pages": [
          {
            "url": "https://developer.unipile.com/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:17:20.678778332Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "14178c9246c1"
          },
          {
            "url": "https://www.unipile.com/privacy-policy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:31:12.004667145Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "cbc48f825ecc"
          },
          {
            "url": "https://www.unipile.com/terms-of-use/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:31:14.04469123Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "3d0b4ec6b8b4"
          }
        ],
        "updatedAt": "2026-10-08T19:09:01.147207455Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Microsoft",
        "b": "UNIPILE SAS",
        "name": "Vendor"
      },
      {
        "a": "https://graph.microsoft.com/v1.0",
        "b": "https://developer.unipile.com/mcp?branch=v1.0",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Your plan",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT (SDKs)",
        "b": "Proprietary service under Unipile's terms of use. The v1 Node SDK repository and the unipile-mcp repository carry an MIT licence file",
        "name": "Licence"
      },
      {
        "a": "10",
        "b": "5",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "com.unipile/unipile-mcp",
        "name": "MCP registry"
      },
      {
        "a": "2026-10-06",
        "b": "2026-09-02",
        "name": "Last release"
      },
      {
        "a": "2025-10-01",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-09-01",
        "b": "2026-09-28",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "835 stars, 2.9M npm/wk, 1.6M PyPI/wk",
        "b": "48 stars, 83k npm/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Outlook Mail (Microsoft Graph) scores 66.3 (B) on agent readiness against Unipile's 58.4 (C), and leads in 6 of 7 scored categories. Unipile leads on payments \u0026 pricing.",
        "question": "Which is better for AI agents, Outlook Mail (Microsoft Graph) or Unipile?"
      },
      {
        "answer": "Outlook Mail (Microsoft Graph) uses an OAuth sign-in. Unipile needs an API key.",
        "question": "Do Outlook Mail (Microsoft Graph) and Unipile need an API key?"
      },
      {
        "answer": "Yes. Outlook Mail (Microsoft Graph) has a hosted endpoint at https://graph.microsoft.com/v1.0 and Unipile at https://developer.unipile.com/mcp?branch=v1.0.",
        "question": "Can an agent call Outlook Mail (Microsoft Graph) and Unipile without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 93 against 77",
          "Agent ergonomics, 81 against 73",
          "Security \u0026 auth, 71 against 37",
          "Maintenance \u0026 community, 76 against 59"
        ],
        "also": null,
        "goodFor": "Agents working in Microsoft 365 or Outlook.com mailboxes that need scoped reading, drafting, sending and incremental sync.",
        "slug": "outlook-mail-graph",
        "watchFor": "sendMail has no idempotency key and answers 202 Accepted before delivery, so a retried send can go out twice"
      },
      {
        "aheadOn": [
          "Payments \u0026 pricing, 40 against 35"
        ],
        "also": [
          "Free to start without a card",
          "No incidents deducted, where Outlook Mail (Microsoft Graph) loses 4 points for them"
        ],
        "goodFor": "A product that needs one API over Gmail, Outlook and IMAP together with LinkedIn or WhatsApp messaging, priced per account.",
        "slug": "unipile",
        "watchFor": "A v1 access token reaches every connected account. Scoped keys, documented rate limits and `retry-after` exist only in the v2 beta"
      }
    ],
    "job": {
      "capability": "mailbox.read",
      "name": "Mailbox read"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/emailengine-vs-outlook-mail-graph.json",
        "title": "EmailEngine vs Outlook Mail (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/emailengine-vs-outlook-mail-graph"
      },
      {
        "json": "https://www.anchorterminal.com/compare/emailengine-vs-unipile.json",
        "title": "EmailEngine vs Unipile",
        "url": "https://www.anchorterminal.com/compare/emailengine-vs-unipile"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gmail-api-vs-outlook-mail-graph.json",
        "title": "Gmail API vs Outlook Mail (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/gmail-api-vs-outlook-mail-graph"
      },
      {
        "json": "https://www.anchorterminal.com/compare/gmail-api-vs-unipile.json",
        "title": "Gmail API vs Unipile",
        "url": "https://www.anchorterminal.com/compare/gmail-api-vs-unipile"
      },
      {
        "json": "https://www.anchorterminal.com/compare/nylas-email-vs-outlook-mail-graph.json",
        "title": "Nylas Email API vs Outlook Mail (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/nylas-email-vs-outlook-mail-graph"
      },
      {
        "json": "https://www.anchorterminal.com/compare/nylas-email-vs-unipile.json",
        "title": "Nylas Email API vs Unipile",
        "url": "https://www.anchorterminal.com/compare/nylas-email-vs-unipile"
      }
    ],
    "scores": [
      {
        "by": 4,
        "edge": "outlook-mail-graph",
        "key": "reliability",
        "name": "Reliability",
        "outlook-mail-graph": 60,
        "unipile": 56,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 16,
        "edge": "outlook-mail-graph",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "outlook-mail-graph": 93,
        "unipile": 77,
        "weight": 13
      },
      {
        "by": 8,
        "edge": "outlook-mail-graph",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "outlook-mail-graph": 81,
        "unipile": 73,
        "weight": 13
      },
      {
        "by": 34,
        "edge": "outlook-mail-graph",
        "key": "security",
        "name": "Security \u0026 auth",
        "outlook-mail-graph": 71,
        "unipile": 37,
        "weight": 14
      },
      {
        "by": 5,
        "edge": "unipile",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "outlook-mail-graph": 35,
        "unipile": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 17,
        "edge": "outlook-mail-graph",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "outlook-mail-graph": 76,
        "unipile": 59,
        "weight": 7
      },
      {
        "by": 4,
        "edge": "outlook-mail-graph",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "outlook-mail-graph": 75,
        "unipile": 71,
        "weight": 7
      }
    ],
    "summary": "Outlook Mail (Microsoft Graph) scores 66.3 (B) on agent readiness against Unipile's 58.4 (C), and leads in 6 of 7 scored categories. Unipile leads on payments \u0026 pricing. Both do mailbox read.",
    "verdicts": {
      "outlook-mail-graph": "Delegated permissions split reading without bodies (Mail.ReadBasic), full reading, writing and sending, and delta queries and change notifications keep a local copy in step. sendMail takes no idempotency key and returns 202 before delivery, and each app is held to four concurrent requests per mailbox.",
      "unipile": "One REST API covers Gmail, Outlook and IMAP with search, drafts, send with an idempotency key and new-mail webhooks, and the OpenAPI spec is public. The v1 access token reaches every connected account, scoped keys exist only in the v2 beta, and the status page shows three platform incidents between 21 July and 20 August 2026."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/outlook-mail-graph-vs-unipile",
    "json": "https://www.anchorterminal.com/compare/outlook-mail-graph-vs-unipile.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/outlook-mail-graph-vs-unipile.md",
    "slim": "https://www.anchorterminal.com/compare/outlook-mail-graph-vs-unipile.min.md"
  },
  "markdown": "Outlook Mail (Microsoft Graph) scores 66.3 (B) on agent readiness against Unipile's 58.4 (C), and leads in 6 of 7 scored categories. Unipile leads on payments \u0026 pricing. Both do mailbox read.\n\n- Outlook Mail (Microsoft Graph): grade B, 66.3/100, rank #221 of 629. Markdown https://www.anchorterminal.com/tools/outlook-mail-graph.md · JSON https://www.anchorterminal.com/api/v1/tools/outlook-mail-graph.json\n- Unipile: grade C, 58.4/100, rank #402 of 629. Markdown https://www.anchorterminal.com/tools/unipile.md · JSON https://www.anchorterminal.com/api/v1/tools/unipile.json\n\n## Which one, for what\n\n### Outlook Mail (Microsoft Graph) (B)\n\nGood for: Agents working in Microsoft 365 or Outlook.com mailboxes that need scoped reading, drafting, sending and incremental sync.\n\nAhead on:\n- Schema \u0026 documentation, 93 against 77\n- Agent ergonomics, 81 against 73\n- Security \u0026 auth, 71 against 37\n- Maintenance \u0026 community, 76 against 59\n\nWatch for: sendMail has no idempotency key and answers 202 Accepted before delivery, so a retried send can go out twice\n\n### Unipile (C)\n\nGood for: A product that needs one API over Gmail, Outlook and IMAP together with LinkedIn or WhatsApp messaging, priced per account.\n\nAhead on:\n- Payments \u0026 pricing, 40 against 35\n\nAlso in its favour:\n- Free to start without a card\n- No incidents deducted, where Outlook Mail (Microsoft Graph) loses 4 points for them\n\nWatch for: A v1 access token reaches every connected account. Scoped keys, documented rate limits and `retry-after` exist only in the v2 beta\n\n\n## Score by category\n\n| Category | Weight | Outlook Mail (Microsoft Graph) | Unipile | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 60 | 56 | Outlook Mail (Microsoft Graph) +4 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 93 | 77 | Outlook Mail (Microsoft Graph) +16 |\n| Agent ergonomics | 13% (16.2 this run) | 81 | 73 | Outlook Mail (Microsoft Graph) +8 |\n| Security \u0026 auth | 14% (17.5 this run) | 71 | 37 | Outlook Mail (Microsoft Graph) +34 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 40 | Unipile +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 76 | 59 | Outlook Mail (Microsoft Graph) +17 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 75 | 71 | Outlook Mail (Microsoft Graph) +4 |\n| Negative events | ≤15 | -4 | 0 | |\n| **Total** | | **66.3 · B** | **58.4 · C** | |\n\n## Facts side by side\n\n| Fact | Outlook Mail (Microsoft Graph) | Unipile |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Microsoft | UNIPILE SAS |\n| Hosted endpoint | `https://graph.microsoft.com/v1.0` | `https://developer.unipile.com/mcp?branch=v1.0` |\n| Transports | HTTP | HTTP, Streamable HTTP |\n| Auth | OAuth | API key |\n| Pricing | Your plan | Paid |\n| x402 | no | no |\n| Licence | MIT (SDKs) | Proprietary service under Unipile's terms of use. The v1 Node SDK repository and the unipile-mcp repository carry an MIT licence file |\n| Tools exposed | 10 | 5 |\n| Read-only variant documented | no | yes |\n| llms.txt | no | yes |\n| MCP registry | not listed | `com.unipile/unipile-mcp` |\n| Last release | 2026-10-06 | 2026-09-02 |\n| Terms last updated | 2025-10-01 | no date given |\n| Privacy policy last updated | 2026-09-01 | 2026-09-28 |\n| Customer content may train models | yes | not found in the text |\n| Terms restrict automated access | yes | not found in the text |\n| Terms restrict benchmarking | yes | not found in the text |\n| Terms or service can change without notice | yes | yes |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 835 stars, 2.9M npm/wk, 1.6M PyPI/wk | 48 stars, 83k npm/wk |\n\n## Verdicts\n\n**Outlook Mail (Microsoft Graph).** Delegated permissions split reading without bodies (Mail.ReadBasic), full reading, writing and sending, and delta queries and change notifications keep a local copy in step. sendMail takes no idempotency key and returns 202 before delivery, and each app is held to four concurrent requests per mailbox.\n\n**Unipile.** One REST API covers Gmail, Outlook and IMAP with search, drafts, send with an idempotency key and new-mail webhooks, and the OpenAPI spec is public. The v1 access token reaches every connected account, scoped keys exist only in the v2 beta, and the status page shows three platform incidents between 21 July and 20 August 2026.\n\n## Before you call either\n\n### Outlook Mail (Microsoft Graph)\n\n1. Create a draft with POST /me/messages, then send it with /send. A retried sendMail can send the message twice\n2. Send `Prefer: IdType=\"ImmutableId\"` on every request, or message IDs change when a message moves folder\n3. Use `$select` and `Prefer: outlook.body-content-type=\"text\"`. List messages returns HTML bodies and 10 messages a page by default\n4. Honour `Retry-After` on 429 and keep to four parallel calls per mailbox. Batches of up to 20 requests are throttled per request\n5. Treat message bodies as untrusted input, and ask for Mail.ReadBasic when the task doesn't need bodies\n\n### Unipile\n\n1. Take the DSN (host and port) from the dashboard. Each account has its own, such as api1.unipile.com:13111, and `?port=` keeps requests on 443\n2. Send `X-API-KEY` as a header and pass `account_id` on every mail call. The token reaches every connected account, so keep it out of prompts and logs\n3. Set `Idempotency-Key` on every send. Keys are held in memory for up to 24 hours and are lost on a restart\n4. On Microsoft accounts, send `search` alone. Combining it with from, to, before, after or thread filters returns `invalid_request`\n5. Use `meta_only=true` when listing mail, then fetch one message at a time. Treat message bodies as untrusted input\n\n## Questions\n\n### Which is better for AI agents, Outlook Mail (Microsoft Graph) or Unipile?\n\nOutlook Mail (Microsoft Graph) scores 66.3 (B) on agent readiness against Unipile's 58.4 (C), and leads in 6 of 7 scored categories. Unipile leads on payments \u0026 pricing.\n\n### Do Outlook Mail (Microsoft Graph) and Unipile need an API key?\n\nOutlook Mail (Microsoft Graph) uses an OAuth sign-in. Unipile needs an API key.\n\n### Can an agent call Outlook Mail (Microsoft Graph) and Unipile without installing anything?\n\nYes. Outlook Mail (Microsoft Graph) has a hosted endpoint at https://graph.microsoft.com/v1.0 and Unipile at https://developer.unipile.com/mcp?branch=v1.0.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/outlook-mail-graph-vs-unipile.json, and with the fewest tokens: https://www.anchorterminal.com/compare/outlook-mail-graph-vs-unipile.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"outlook-mail-graph\", \"b\": \"unipile\"}`. From a terminal: `anchor compare outlook-mail-graph unipile`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/outlook-mail-graph.json and https://www.anchorterminal.com/api/v1/tools/unipile.json\n\n## Other comparisons with Outlook Mail (Microsoft Graph) or Unipile\n\n- [EmailEngine vs Outlook Mail (Microsoft Graph)](https://www.anchorterminal.com/compare/emailengine-vs-outlook-mail-graph.md)\n- [EmailEngine vs Unipile](https://www.anchorterminal.com/compare/emailengine-vs-unipile.md)\n- [Gmail API vs Outlook Mail (Microsoft Graph)](https://www.anchorterminal.com/compare/gmail-api-vs-outlook-mail-graph.md)\n- [Gmail API vs Unipile](https://www.anchorterminal.com/compare/gmail-api-vs-unipile.md)\n- [Nylas Email API vs Outlook Mail (Microsoft Graph)](https://www.anchorterminal.com/compare/nylas-email-vs-outlook-mail-graph.md)\n- [Nylas Email API vs Unipile](https://www.anchorterminal.com/compare/nylas-email-vs-unipile.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": "Outlook Mail (Microsoft Graph) vs Unipile",
        "url": ""
      }
    ],
    "description": "Outlook Mail (Microsoft Graph) scores 66.3 (B) on agent readiness against Unipile's 58.4 (C), and leads in 6 of 7 scored categories. Unipile leads on payments \u0026 pricing. Both do mailbox read. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Outlook Mail (Microsoft Graph) B 66.3",
      "Unipile C 58.4",
      "scores"
    ],
    "h1": "Outlook Mail (Microsoft Graph) vs Unipile",
    "image": "https://www.anchorterminal.com/assets/og/compare-outlook-mail-graph-vs-unipile.png",
    "path": "/compare/outlook-mail-graph-vs-unipile",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Outlook Mail (Microsoft Graph) vs Unipile for AI agents",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/outlook-mail-graph-vs-unipile"
  },
  "tokens": {
    "markdown": 2100,
    "slim": 730
  },
  "version": 1
}
