[
  {
    "id": 1,
    "name": "Salesforce",
    "category": "CRM and Sales",
    "hint": "salesforce.com",
    "one_liner": "Salesforce is a CRM/sales platform with an extensive suite of official REST, SOAP, Bulk, Metadata, and GraphQL APIs for automating and extending its platform.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "jwt",
      "oauth2",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest_and_graphql",
    "api_breadth": "large",
    "docs_url": "https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_what_is_rest_api.htm",
    "mcp": {
      "status": "official",
      "url": "https://github.com/salesforcecli/mcp"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.75,
    "agreement": 0.84,
    "grounding_rate": 0.78,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2",
          "other"
        ],
        "apis_guru_spec": [
          "api_key"
        ],
        "pass2": [
          "bearer_token",
          "jwt",
          "oauth2"
        ],
        "pass1": [
          "jwt",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest_and_graphql",
        "apis_guru_spec": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "apis_guru_spec": "small",
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://developer.salesforce.com/docs/platform/connect-rest-api/guide/quickstart_dev_org.html",
        "quote": "Step One: Sign up for Salesforce Developer Edition",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_oauth_and_connected_apps.htm",
        "quote": "Authorization Through External Client Apps or Connected Apps and OAuth 2.0",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://login.salesforce.com/.well-known/openid-configuration",
        "quote": "private_key_jwt",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.apis.guru/v2/specs/salesforce.local/einstein/2.0.1/openapi.json",
        "quote": "bearer_token",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developer.salesforce.com/blogs/2025/06/introducing-mcp-support-across-salesforce",
        "quote": "Introducing MCP Support Across Salesforce",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/salesforcecli/mcp",
        "quote": "salesforcecli/mcp",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://login.salesforce.com/services/oauth2/token",
        "quote": "{\"error\":\"unsupported_grant_type\",\"error_description\":\"grant type not supported\"}",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.salesforce.com/signup",
        "quote": "developer.salesforce.com/signup",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://docs.composio.dev/toolkits/salesforce",
        "quote": "223",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/salesforce",
        "quote": "Composio catalog: auth ['OAUTH2', 'S2S_OAUTH2'], 223 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/salesforce.local/einstein/2.0.1/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 45 operations, securitySchemes ['bearer_token']",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "SALESFORCE",
      "tools": 223,
      "auth": [
        "oauth2",
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/salesforce"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 45
    },
    "probe": {
      "status": 400,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "developer.salesforce.com returned HTTP 403 to direct fetches (bot protection), so REST/OAuth doc claims rely on search-result snippets/titles and a direct fetch of login.salesforce.com/.well-known/openid-configuration rather than fully verbatim doc-page quotes; confidence lowered accordingly. Confirmed via search: Developer Edition signup (developer.salesforce.com/signup) grants a free org with full REST/SOAP/Bulk/Metadata/GraphQL API access; auth is OAuth 2.0 (authorization_code, JWT bearer, client_credentials, refresh_token flows) using bearer access tokens, with client auth methods client_secret_post/client_secret_basic/private_key_jwt per the OIDC discovery doc. Salesforce also publishes an official MCP server (salesforcecli/mcp, Salesforce DX MCP, hosted MCP available in every Dev Edition org per the June 2025 dev blog), alongside many community MCP servers (tsmztech, kablewy, cirra, kodey). API surface is very large (sObjects, Bulk, Metadata, Tooling, GraphQL, Streaming, Composite, plus product-specific APIs), well over 300 endpoints, so api_breadth=large despite the smaller Einstein-only OpenAPI spec (45 endpoints) apis.guru indexed.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.55
    },
    "cost_usd": 0.4
  },
  {
    "id": 2,
    "name": "HubSpot",
    "category": "CRM and Sales",
    "hint": "hubspot.com",
    "one_liner": "HubSpot is a CRM and sales/marketing platform with a broad REST (plus supplementary GraphQL) API for CRM objects, marketing, and CMS.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest_and_graphql",
    "api_breadth": "large",
    "docs_url": "https://developers.hubspot.com/docs/guides/apps/authentication/intro-to-auth",
    "mcp": {
      "status": "official",
      "url": "https://developers.hubspot.com/ai-tools/mcp"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.9,
    "agreement": 0.96,
    "grounding_rate": 0.88,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "unauth_probe": [
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest_and_graphql",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.hubspot.com/docs/guides/apps/authentication/intro-to-auth",
        "quote": "If you want to limit distribution of your app to a single authorized account, you'll use a static auth access token.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.hubspot.com/docs/guides/apps/private-apps/overview",
        "quote": "When making a call to one of the HubSpot API endpoints, set the value of the Authorization field to Bearer [YOUR_TOKEN].",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.hubspot.com/get-started",
        "quote": "Create developer account with a HubSpot Developer account",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.hubspot.com/changelog/graphql-live",
        "quote": "GraphQL for CMS Developers is live for CMS Hub Pro and Enterprise",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.hubspot.com/ai-tools/mcp",
        "quote": "HubSpot offers two distinct MCP (Model Context Protocol) servers — one for connecting any MCP-compatible AI tool or agent to your CRM...",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.hubspot.com/changelog/hubspot-developer-mcp-server-for-app-and-cms-development-now-in-ga",
        "quote": "HubSpot Developer MCP server (local) for App and CMS Development Now in GA",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://api.hubapi.com/crm/v3/objects/contacts",
        "quote": "This API supports OAuth 2.0 authentication and you can find more details at https://developers.hubspot.com/docs/methods/auth/oauth-ov",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.hubspot.com/docs/guides/apps/authentication/intro-to-auth",
        "quote": "If you plan to distribute your app to multiple accounts...your app must be built using OAuth authentication.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/hubspot",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 245 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.hubapi.com/crm/v3/objects/contacts",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"status\":\"error\",\"message\":\"Authentication credentials not found. This API supports OAuth 2.0 authentication and you can find more details at https://developers.hubspot.com/docs/methods/auth/oauth-ov",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://developers.hubspot.com/ai-tools/mcp",
        "quote": "MCP initialize POST -> HTTP 403 (text/plain;charset=UTF-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "HUBSPOT",
      "tools": 245,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/hubspot"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": "oauth2"
    },
    "notes": "HubSpot free developer accounts allow creating private apps (bearer token auth) or OAuth apps immediately, no sales contact required for base API access; higher-volume/enterprise scopes and marketplace listing require app review/OAuth. Two official vendor-published MCP servers exist (remote CRM MCP at mcp.hubspot.com, and local Developer MCP via HubSpot CLI), both GA as of Feb 2026. API is predominantly REST (v3, hundreds of endpoints across CRM/Marketing/CMS/etc.) with a supplementary GraphQL API for CRM/CMS data querying (CMS Hub Pro/Enterprise for some GraphQL features).",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.33599999999999997
  },
  {
    "id": 3,
    "name": "Pipedrive",
    "category": "CRM and Sales",
    "hint": "pipedrive.com",
    "one_liner": "Pipedrive is a sales CRM and pipeline-management platform with a broad REST API (OAuth2 or per-user API token) and a vendor-official MCP server, accessible via a no-credit-card 14-day trial before requiring a paid plan.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developers.pipedrive.com/docs/api/v1",
    "mcp": {
      "status": "official",
      "url": "https://www.pipedrive.com/en/features/mcp-server"
    },
    "verdict": "green",
    "score": 95,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.76,
    "agreement": 0.87,
    "grounding_rate": 0.62,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://www.pipedrive.com/en/register",
        "quote": "100% access. No credit card required",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://api.pipedrive.com/v1/deals",
        "quote": "{\"success\":false,\"error\":\"unauthorized access\",\"errorCode\":401,\"error_info\":\"Please check developers.pipedrive.com\"}",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.pipedrive.com/en/features/mcp-server",
        "quote": "An official, reliable and fully supported connection built and maintained by Pipedrive.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.pipedrive.com/en/features/mcp-server",
        "quote": "Pipedrive MCP is available on all Pipedrive plans. Usage is based on token limits included in your plan and additional tokens can be purchased if needed.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.pipedrive.com/en/register",
        "quote": "100% access. No credit card required",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://pipedrive.readme.io/docs/marketplace-oauth-authorization",
        "quote": "Authorization via OAuth 2.0 is a well-known and stable way to get fine-grained access to an API.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://pipedrive.readme.io/docs/core-api-concepts-authentication",
        "quote": "The API token must be provided in the `x-api-token` header for all requests.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://pipedrive.readme.io/docs/core-api-concepts-authentication",
        "quote": "an API token is tied to a specific user and company, giving access to all user's data",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/pipedrive",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 402 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.pipedrive.com/v1/deals",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"success\":false,\"error\":\"unauthorized access\",\"errorCode\":401,\"error_info\":\"Please check developers.pipedrive.com\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "PIPEDRIVE",
      "tools": 402,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/pipedrive"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Pipedrive has no permanent free tier; API access comes via a 14-day self-serve free trial (no credit card) that converts to a paid plan (from $12.50/user/mo). Both API token (x-api-token header, aka api_key) and OAuth2 (for Marketplace apps) are documented; HTTP Basic Auth appears only as the client_id/client_secret step of the OAuth2 code exchange, not a standalone API auth method, so it was not listed separately. Pipedrive shipped an official, vendor-hosted MCP server (mcp.pipedrive.ai) in 2026, bundled into all plans via OAuth connect — no separate approval needed beyond having a Pipedrive account. api_breadth is estimated \"large\" based on the breadth of REST resources (Deals, Persons, Organizations, Activities, Leads, Products, Pipelines, Users, Files, Webhooks, etc.) and third-party tool wrappers reporting 400+ operations; I could not load the official endpoint index (404/timeout) to verify an exact count, so this figure carries lower confidence than the auth/access findings.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.78
    },
    "cost_usd": 0.39
  },
  {
    "id": 4,
    "name": "Attio",
    "category": "CRM and Sales",
    "hint": "attio.com",
    "one_liner": "Attio is a CRM and relationship-intelligence platform for sales and go-to-market teams, offering a REST API, App SDK, and hosted MCP server for programmatic workspace access.",
    "auth_methods": [
      "api_key",
      "basic",
      "bearer_token",
      "oauth2"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://docs.attio.com/rest-api/guides/authentication",
    "mcp": {
      "status": "official",
      "url": "https://mcp.attio.com/mcp"
    },
    "verdict": "yellow",
    "score": 77,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.83,
    "agreement": 0.79,
    "grounding_rate": 0.88,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (admin_approval vs paid_plan)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "basic",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "admin_approval",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "community"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.attio.com/rest-api/guides/authentication",
        "quote": "Attio implements the standard OAuth 2.0 specification.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.attio.com/rest-api/guides/authentication",
        "quote": "We also support HTTP Basic Authentication, where the username is the token and the password is left blank.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.attio.com/rest-api/guides/authentication",
        "quote": "you can generate an API key in the developer settings page of your apps",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://attio.com/pricing",
        "quote": "API and webhook access",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.attio.com/mcp/overview",
        "quote": "Attio MCP is Attio's hosted MCP server",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.attio.com/mcp/overview",
        "quote": "Attio MCP uses OAuth authentication, so you simply log in with your Attio account—no API keys required.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://attio.com/pricing",
        "quote": "API and webhook access",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.attio.com/",
        "quote": "REST API",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/attio",
        "quote": "Composio catalog: auth ['OAUTH2'], 109 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.attio.com/v2/objects",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"status_code\":401,\"type\":\"auth_error\",\"code\":\"unauthorized\",\"message\":\"The Authorization header was not provided. Double check that you are including the header and that there is not a typo in the na",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://mcp.attio.com/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "ATTIO",
      "tools": 109,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/attio"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Attio's REST API supports OAuth2 (multi-workspace apps) or single-workspace API keys generated in Workspace Settings > Developers, both used as Bearer tokens (Basic Auth also supported). API/webhook access is gated behind paid plans (Plus/Pro/Enterprise) — the Free plan does not include it, so credentials aren't obtainable on a free tier, hence paid_plan/yellow rather than green. Attio also publishes an official hosted MCP server (mcp.attio.com) authenticated via OAuth login to the user's Attio account, in addition to several community MCP servers (kesslerio/attio-mcp-server etc.) seen in the registry hints. API breadth estimated as medium based on object/record/list/attribute/note/task/webhook endpoint surface and third-party wrappers (e.g. Composio) exposing ~109 tools built on it; exact endpoint count not verified.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "admin_approval",
      "api_type": "rest_and_graphql",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "app_review"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token",
        "basic"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.82
    },
    "cost_usd": 0.512
  },
  {
    "id": 5,
    "name": "Twenty",
    "category": "CRM and Sales",
    "hint": "twenty.com (open-source CRM)",
    "one_liner": "Twenty is an open-source CRM (self-hostable or cloud-hosted) offering REST and GraphQL APIs for records and workspace schema management.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest_and_graphql",
    "api_breadth": "small",
    "docs_url": "https://docs.twenty.com/developers/extend/api",
    "mcp": {
      "status": "community",
      "url": "https://github.com/mhenry3164/twenty-crm-mcp-server"
    },
    "verdict": "green",
    "score": 91,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.78,
    "agreement": 0.96,
    "grounding_rate": 0.62,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest_and_graphql",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "unknown",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "community",
        "pass1": "community"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.twenty.com/developers/extend/api",
        "quote": "Authorization: Bearer YOUR_API_KEY",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.twenty.com/developers/extend/api",
        "quote": "Create an API key in Settings → API & Webhooks → + Create key. Copy it immediately — it's shown once.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://twenty.com/pricing",
        "quote": "Start your free trial today without credit card.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/mhenry3164/twenty-crm-mcp-server",
        "quote": "A Model Context Protocol (MCP) server for Twenty CRM integration. Enables natural language interactions with your CRM data through Claude and other AI assistants.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://twenty.com/pricing",
        "quote": "REST & GraphQL API",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.twenty.com/developers/extend/api",
        "quote": "For OAuth-based access (external apps acting on behalf of users), see [OAuth](/developers/extend/oauth).",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://twenty.com/pricing",
        "quote": "Self-host the open source core for free, or upgrade to Organization for SSO and row-level permissions.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.twenty.com/developers/extend/api",
        "quote": "Core API (/rest/ and /graphql/) — Handles CRUD operations on records like People, Companies, and custom objects",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/twenty",
        "quote": "Composio catalog: auth ['API_KEY'], 8 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.twenty.com/rest/companies",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: {\"statusCode\":403,\"messages\":[\"Missing authentication token\"],\"error\":\"FORBIDDEN_EXCEPTION\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "TWENTY",
      "tools": 8,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/twenty"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": "bearer_token"
    },
    "notes": "Twenty is open-source and self-hostable (Docker Compose) for free with unrestricted REST/GraphQL API access via API key (bearer token) — this is the most accessible self-serve path. The managed cloud offering has a no-credit-card free trial, then requires a paid plan (Pro $9/user/mo+) for API access; endpoint count is not fixed since the API is dynamically generated per workspace schema. OAuth2 is documented for third-party apps acting on behalf of users. No official vendor MCP server found; several community MCP servers exist (github.com/mhenry3164, igorwarzocha, jezweb) and an open GitHub issue (twentyhq/twenty#12953) requesting an official one.",
    "pass1": {
      "auth_methods": [
        "bearer_token",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.72
    },
    "cost_usd": 0.33
  },
  {
    "id": 6,
    "name": "Podio",
    "category": "CRM and Sales",
    "hint": "podio.com",
    "one_liner": "Podio is a customizable work-management/CRM platform (owned by Citrix/Progress) with a REST API covering apps, items, tasks, and workflows.",
    "auth_methods": [
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developers.podio.com/authentication",
    "mcp": {
      "status": "none",
      "url": null
    },
    "verdict": "green",
    "score": 95,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.89,
    "agreement": 0.96,
    "grounding_rate": 0.88,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "pass2": "none",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.podio.com/authentication",
        "quote": "Your application is assigned a unique identifier, called 'Client ID', together with a 'Client Secret'. You will need both of these to authenticate.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.podio.com/authentication",
        "quote": "Authorization: OAuth2 ACCESS_TOKEN",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.podio.com/api-key",
        "quote": "It's easy to get one or more API keys for accessing your Podio data. You just have to sign in or sign up with Podio, and go to the API key tab in your settings.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.podio.com/",
        "quote": "you should review our Terms of API use and then grab an API key for each app you want to build from your account settings page.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.podio.com/",
        "quote": "The Podio API is a complete programmable interface to all Podio functionality",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://developers.podio.com/",
        "quote": "the entire Podio frontend is built on the API",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.podio.com/",
        "quote": "The Podio API is a complete programmable interface to all Podio functionality",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://api.podio.com/org/",
        "quote": "Bearer realm=\"podio\", error=\"invalid_request\"",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.podio.com/org/",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Bearer realm=\"podio\", error=\"invalid_request\"; body: {\"error\":\"unauthorized\",\"error_detail\":null,\"error_description\":\"invalid_request\",\"error_parameters\":{},\"error_propagate\":false,\"request\":{\"url\":\"/org/\",\"method\":\"GET\",\"query_string\":\"\"}}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Bearer realm=\"podio\", error=\"invalid_request\"",
      "inferred": "bearer_token"
    },
    "notes": "Podio API uses OAuth2 exclusively (server-side, client-side, username/password, and app-auth flows are all OAuth2 grant variants); the docs call the client_id/client_secret pair an 'API key' but it functions as OAuth2 app credentials, not a separate api_key header scheme. Any free Podio account can generate these instantly via account settings with no approval step, so access is self-serve. API is described as covering the entire product surface (items, apps, tasks, files, contacts, hooks, etc.), suggesting large breadth, though no exact endpoint count was found. No MCP server (official or community) found. Some third-party chatter about Podio's long-term future exists but no official deprecation/sunset notice was found; docs and API are live.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.78
    },
    "cost_usd": 0.265
  },
  {
    "id": 7,
    "name": "Zoho CRM",
    "category": "CRM and Sales",
    "hint": "zoho.com/crm",
    "one_liner": "Zoho CRM is a cloud CRM platform offering a REST API (OAuth2) for managing leads, contacts, deals and workflow automation.",
    "auth_methods": [
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://www.zoho.com/crm/developer/docs/api/v8/",
    "mcp": {
      "status": "official",
      "url": "https://www.zoho.com/crm/developer/mcp.html"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.94,
    "agreement": 0.93,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://www.zoho.com/crm/developer/docs/api/v7/oauth-overview.html",
        "quote": "The Zoho CRM API uses the OAuth2.0 protocol for authentication.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.zoho.com/en-us/crm/zohocrm-pricing.html",
        "quote": "Connect Zoho CRM to any app and perform actions with 5000 API calls/day.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.zoho.com/en-us/crm/zohocrm-pricing.html",
        "quote": "Forever free, for 3 users",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.zoho.com/crm/developer/docs/api/v8/register-client.html",
        "quote": "You will receive the client credentials such as Client ID and Client Secret in the Client Secret tab",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.zoho.com/crm/developer/mcp.html",
        "quote": "Deploy four composable MCP servers that give your AI agent secure, scoped access to your Zoho CRM.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://www.zoho.com/crm/developer/docs/api/v8/register-client.html",
        "quote": "Go to Zoho Developer Console and click on GET STARTED",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/zoho",
        "quote": "Composio catalog: auth ['OAUTH2'], 57 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://www.zohoapis.com/crm/v2/Leads",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"code\":\"AUTHENTICATION_FAILURE\",\"details\":{},\"message\":\"Authentication failed\",\"status\":\"error\"} ",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "ZOHO",
      "tools": 57,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/zoho"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Zoho CRM REST API (v8) uses OAuth2 exclusively; self-client and server-based client registration via api-console.zoho.com is free and self-serve, no approval needed. The permanent free CRM plan (3 users) includes 5,000 API calls/day, and paid plans scale credits up. API surface spans dozens of modules (Leads, Deals, Bulk, Notifications, Functions, Blueprint, etc.) — large breadth. Zoho also publishes official MCP servers (Data Insights, Data Operations, Module Customization, Workflow & Process Automation) at mcp.zoho.com, connecting via OAuth. Composio catalog corroborates oauth2-only with 57 wrapped tools (non-official wrapper).",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.336
  },
  {
    "id": 8,
    "name": "Close",
    "category": "CRM and Sales",
    "hint": "close.com",
    "one_liner": "Close is a sales-focused CRM (calling, email, SMS, pipelines) built for inside sales teams.",
    "auth_methods": [
      "api_key",
      "basic",
      "oauth2"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developer.close.com/",
    "mcp": {
      "status": "official",
      "url": "https://mcp.close.com/mcp"
    },
    "verdict": "green",
    "score": 92,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.84,
    "agreement": 0.87,
    "grounding_rate": 0.88,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "basic",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "official",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.close.com/",
        "quote": "API keys for scripts or OAuth 2.0 for user-facing integrations.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.close.com/api/overview/api-key-authentication",
        "quote": "send your HTTP requests with an Authorization header that contains the word Basic followed by a space and a base64-encoded string composed of an api key followed by a colon",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.close.com/pricing",
        "quote": "API access + event log API - Connect your Close organization using API keys of using OAuth access",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developer.close.com/api/overview/api-key-authentication",
        "quote": "Alternatively, see Authentication with OAuth instead.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://help.close.com/docs/mcp-server",
        "quote": "The MCP server URL is https://mcp.close.com/mcp",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://help.close.com/docs/mcp-server",
        "quote": "Close's MCP server is an officially supported across the Claude ecosystem.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developer.close.com/api/overview/api-key-authentication",
        "quote": "API keys can be created and managed in your Close account under Settings → Developer → API Keys",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.close.com/pricing",
        "quote": "Start your free trial—no credit card required",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/close",
        "quote": "Composio catalog: auth ['API_KEY'], 6 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.close.com/api/v1/lead/",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"error\": \"Unauthorized\"} ",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://mcp.close.com/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "CLOSE",
      "tools": 6,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/close"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Close has a mature documented REST API (developer.close.com) supporting both HTTP Basic auth with an API key (created self-serve in Settings > Developer > API Keys) and OAuth 2.0 for user-facing integrations. Free trial (14 days, no credit card) lets developers get an API key immediately, then requires a paid plan (Solo $9/user/mo and up) to continue; API access is listed as included on all paid tiers. Close also publishes an official first-party MCP server (https://mcp.close.com/mcp) supporting both OAuth 2.0 DCR and API-key-based headers (Close-API-Key / Close-Scope), explicitly positioned for Claude/ChatGPT/Cursor agent integrations. Endpoint count not explicitly enumerated in fetched pages (docs pointed to llms.txt for full index); estimated medium breadth based on the number of distinct CRM resources (leads, contacts, opportunities, tasks, activities, custom fields, sequences, bulk actions, webhooks, smart views, reporting).",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "basic"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.75
    },
    "cost_usd": 0.31899999999999995
  },
  {
    "id": 9,
    "name": "Copper",
    "category": "CRM and Sales",
    "hint": "copper.com",
    "one_liner": "Copper is a CRM built for Google Workspace users, offering pipeline, contact, and sales-opportunity management with deep Gmail/Calendar integration.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developer.copper.com/",
    "mcp": {
      "status": "community",
      "url": "https://github.com/Pond-International/copper-mcp-server"
    },
    "verdict": "green",
    "score": 90,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.77,
    "agreement": 0.9,
    "grounding_rate": 0.67,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.copper.com/introduction/authentication.html",
        "quote": "include the token in the header of every request, along with the email address of the user who generated the token",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.copper.com/introduction/authentication.html",
        "quote": "go to System settings > API Keys and click the 'GENERATE API KEY' button",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.copper.com/pricing",
        "quote": "API & Embedded integration SDK",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developer.copper.com/",
        "quote": "provides a RESTful interface with JSON-formatted responses to access most Copper resources",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/Pond-International/copper-mcp-server",
        "quote": "MCP (Model Context Protocol) server for Copper CRM integration with Claude. Designed for deployment on Kubernetes (Qovery) with remote MCP server support via HTTPS.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developer.copper.com/introduction/authentication.html",
        "quote": "go to System settings > API Keys and click the 'GENERATE API KEY' button",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.copper.com/introduction/authentication.html",
        "quote": "API Keys - suitable for individual users",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.copper.com/introduction/authentication.html",
        "quote": "OAuth2.0 - the preferred approach for partner integrations",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://developer.copper.com/",
        "quote": "Leads, People, Companies, Opportunities, Projects, and Tasks",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Copper's Dev API supports API-key auth (per-user token generated in System settings, sent via header + user email) and OAuth2.0 (preferred for partner/third-party integrations, Authorization Code flow). API access is gated to paid plan tiers (Professional/Business per copper.com/pricing feature comparison; Basic plan lacks it), but Copper offers a 14-day no-credit-card free trial that includes higher-tier features, so a developer can self-serve a trial account and generate an API key without admin approval or a sales conversation. No official Copper-published MCP server found (registry hit for \"copperline-labs/rendex-mcp\" appears unrelated to Copper CRM); several small community/unofficial MCP servers exist on GitHub (e.g. Pond-International/copper-mcp-server, dazanza/copper-mcp, charlesmmorais/coppermind), none with significant adoption. API breadth estimated as medium based on ~15 documented resource categories (Leads, People, Companies, Opportunities, Projects, Tasks, Account, Users, Tags, Activities, Custom Fields, Field Layouts, Webhooks, Related Items, File Upload) with standard CRUD/list endpoints each; exact endpoint count not enumerated in fetched pages.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.72
    },
    "cost_usd": 0.423
  },
  {
    "id": 10,
    "name": "DealCloud",
    "category": "CRM and Sales",
    "hint": "api.docs.dealcloud.com",
    "one_liner": "DealCloud is an enterprise deal/relationship-management CRM (used by PE, IB, and M&A firms) offering a REST API for data and workflow integration.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://api.docs.dealcloud.com",
    "mcp": {
      "status": "community",
      "url": "https://github.com/jstewartrr/infra-20251230-mcp-dealcloud"
    },
    "verdict": "yellow",
    "score": 77,
    "blocker": "enterprise_only",
    "model_verdict": "yellow",
    "confidence": 0.83,
    "agreement": 0.93,
    "grounding_rate": 0.83,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs admin_approval)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "unknown",
        "pass1": "medium"
      },
      "mcp": {
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://api.docs.dealcloud.com/docs/token",
        "quote": "The client application sends a POST request to the token endpoint, providing its `client_id`, `apiKey`, and the required `scope(s)`.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.docs.dealcloud.com/docs/token",
        "quote": "The client includes this token in the `Authorization` header for subsequent API requests `Authorization: Bearer {{token}}`.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://api.docs.dealcloud.com/docs/apikeys",
        "quote": "To enable API access, ensure the intended user is assigned to a user group with the appropriate permissions. Navigate to Admin > User Management, select the relevant user group, go to Capabilities > Site Areas, and enable \"API\".",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://api.docs.dealcloud.com/docs/apikeys",
        "quote": "Once user permissions are set, click the User icon at the top-right of your DealCloud screen and select Profile. Scroll down to the API Key section and click Enable.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://api.docs.dealcloud.com/docs/apikeys",
        "quote": "ensure the intended user is assigned to a user group with the appropriate permissions",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/jstewartrr/infra-20251230-mcp-dealcloud",
        "quote": "jstewartrr/infra-20251230-mcp-dealcloud (0★)",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": null,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "DealCloud is an enterprise CRM sold as a paid platform (no self-serve free dev signup). API credentials (client_id + apiKey) are obtained from within an existing DealCloud tenant: an admin must enable the \\\"API\\\" capability for a user group, then the individual user self-enables their own API key in their Profile page. Auth uses OAuth2 client-credentials-style flow: POST client_id+apiKey to /api/rest/v1/oauth/token to get a short-lived (900s) bearer token used as Authorization: Bearer. No evidence of a vendor-published MCP server; only a low-star community repo found. API endpoint count not verified (docs site includes REST guides, Python/C# SDKs, and a separate User Management API section) so breadth is unknown from the pages fetched.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "enterprise_only",
      "confidence": 0.68
    },
    "cost_usd": 0.253
  },
  {
    "id": 11,
    "name": "Zendesk",
    "category": "Support and Helpdesk",
    "hint": "zendesk.com",
    "one_liner": "Zendesk is a customer service/helpdesk platform (tickets, help center, chat, talk) with a documented REST API for automating support workflows.",
    "auth_methods": [
      "api_key",
      "basic",
      "oauth2"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developer.zendesk.com/api-reference/introduction/security-and-auth/",
    "mcp": {
      "status": "community",
      "url": "https://github.com/reminia/zendesk-mcp-server"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.9,
    "agreement": 0.87,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "basic",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "basic",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.zendesk.com/api-reference/introduction/security-and-auth/",
        "quote": "Zendesk supports using OAuth access tokens to authenticate API requests.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.zendesk.com/api-reference/introduction/security-and-auth/",
        "quote": "Basic authentication is used for API tokens. The credentials must be sent with the request in an Authorization header.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.zendesk.com/api-reference/introduction/security-and-auth/",
        "quote": "API tokens are auto-generated passwords in the Zendesk Admin Center.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.zendesk.com/documentation/",
        "quote": "Try out the Sunshine Platform with a free, 14-day trial account.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developer.zendesk.com/api-reference/ticketing/introduction/",
        "quote": "For information on the authentication required to use the API, see Security and authentication in the general API introduction.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/reminia/zendesk-mcp-server",
        "quote": "A Model Context Protocol server for Zendesk",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/zendesk",
        "quote": "Composio catalog: auth ['OAUTH2'], 452 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://support.zendesk.com/api/v2/tickets.json",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Zendesk realm=\"API\"; body: {\"error\":\"Couldn't authenticate you\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "ZENDESK",
      "tools": 452,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/zendesk"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Zendesk realm=\"API\"",
      "inferred": "other"
    },
    "notes": "Zendesk's REST API spans Ticketing, Help Center, Chat, Talk, Sunshine and more (well over 300 documented endpoints). API tokens (basic auth, generated instantly in Admin Center) still work but Zendesk is pushing OAuth access tokens as the recommended/required method going forward; both remain documented auth paths today. Free 14-day trial accounts get an Admin Center where a token can be generated immediately, so self-serve credentials are available before any paid commitment. No official vendor MCP server found; multiple community/partner MCP servers exist (reminia, mattcoatsworth, koundinya, fruggr, Swifteq/digital4better).",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "basic"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.284
  },
  {
    "id": 12,
    "name": "Intercom",
    "category": "Support and Helpdesk",
    "hint": "intercom.com",
    "one_liner": "Intercom is a customer messaging and support platform (helpdesk, live chat, AI agent Fin) with a REST API and app/integration platform.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developers.intercom.com/docs/build-an-integration/learn-more/authentication",
    "mcp": {
      "status": "official",
      "url": "https://github.com/intercom/intercom-mcp-server"
    },
    "verdict": "yellow",
    "score": 92,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.53,
    "agreement": 0.76,
    "grounding_rate": 0.12,
    "needs_human": true,
    "needs_human_reasons": [
      "only 12% of quotes grounded in cited pages"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "unauth_probe": [
          "basic"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "paid_plan",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "mcp",
        "url": "https://github.com/intercom/intercom-mcp-server",
        "quote": "Learn how to use the Model Context Protocol (MCP) to enable AI agents to securely access and interact with your Intercom data whenever helpful.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.intercom.com/docs/build-an-integration/learn-more/authentication",
        "quote": "OAuth is for if you're building a public app that accesses other people's Intercom data.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.intercom.com/docs/build-an-integration/learn-more/authentication",
        "quote": "An Access Token is for if you're using the API to access data in your own Intercom workspace, in other words, building a private app.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://developers.intercom.com/docs/build-an-integration/learn-more/authentication",
        "quote": "We provide you with an Access Token as soon as you create an app on your workspace. You can find your Access Token in the Configure > Authentication section.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://developers.intercom.com/docs/build-an-integration/getting-started/",
        "quote": "Private App Developers: Can work within their existing paid Intercom workspace by accessing the Developer Hub",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.intercom.com/docs/references/rest-api/api.intercom.io/",
        "quote": "The intercom API reference",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://developers.intercom.com/docs/references/rest-api/api.intercom.io/",
        "quote": "Admins, AI Content, Articles, Audiences, Away Status Reasons, Banners, Brands, Calls, Companies, Contacts, Content, Content Snippets, Conversations, Custom Object Instances, Data Attributes...",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://developers.intercom.com/docs/build-an-integration/getting-started/",
        "quote": "Public App Developers: Must create a new development workspace to develop and publish the app... limited to US regions and have restrictions like maximum 20 users/leads and watermarked Messenger.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/intercom",
        "quote": "Composio catalog: auth ['OAUTH2'], 133 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.intercom.io/contacts",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Basic realm=\"intercom.io\"; body: {\"type\":\"error.list\",\"request_id\":\"0005mu6a1hpn4347i160\",\"errors\":[{\"code\":\"missing_authorization\",\"message\":\"No authorization was provided\"}]}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "INTERCOM",
      "tools": 133,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/intercom"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Basic realm=\"intercom.io\"",
      "inferred": "basic"
    },
    "notes": "OAuth2 for public apps accessing other workspaces' data; Access Token (API key) for private apps within your own workspace, issued instantly on app creation with no admin approval or app review step documented. Full production API access effectively requires an Intercom workspace, which is a paid product (free trial available); a free, capability-limited development workspace exists for building/testing public apps (US-only, 20 user cap, watermarked). MCP: Intercom publishes an official MCP server (github.com/intercom/intercom-mcp-server) in addition to several community MCP servers.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.72
    },
    "cost_usd": 0.315
  },
  {
    "id": 13,
    "name": "Freshdesk",
    "category": "Support and Helpdesk",
    "hint": "freshdesk.com",
    "one_liner": "Freshdesk is a cloud-based customer support/helpdesk platform (ticketing, omnichannel, automations) by Freshworks.",
    "auth_methods": [
      "api_key",
      "basic"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developers.freshdesk.com/api/",
    "mcp": {
      "status": "community",
      "url": "https://github.com/effytech/freshdesk_mcp"
    },
    "verdict": "yellow",
    "score": 90,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.77,
    "agreement": 0.89,
    "grounding_rate": 0.56,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "basic"
        ],
        "pass1": [
          "basic"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "paid_plan",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.freshdesk.com/api/",
        "quote": "You can use your personal API key to authenticate the request. If you use the API key, there is no need for a password.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.freshdesk.com/api/",
        "quote": "curl -v -u apikey:X",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.freshdesk.com/api/",
        "quote": "Log in to your Support Portal. Click on your profile picture on the top right corner of your portal. Go to Profile settings Page. Your API key will be available below the change password section to your right.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.freshworks.com/freshdesk/pricing/",
        "quote": "Growth - $19/agent/month (billed annually)",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/effytech/freshdesk_mcp",
        "quote": "An MCP server implementation that integrates with Freshdesk, enabling AI models to interact with Freshdesk modules and perform various support operations.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.freshworks.com/freshdesk/pricing/",
        "quote": "When you sign up, you instantly get access to our Enterprise plan for 14 days.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.freshdesk.com/api/",
        "quote": "Tickets (create, view, list, update, delete, merge, archive)",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://docs.composio.dev/toolkits/freshdesk",
        "quote": "178",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.freshworks.com/freshdesk/pricing/",
        "quote": "When you sign up, you instantly get access to our Enterprise plan for 14 days.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/freshdesk",
        "quote": "Composio catalog: auth ['API_KEY'], 178 tools",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "FRESHDESK",
      "tools": 178,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/freshdesk"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 301,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Freshdesk v2 REST API uses HTTP Basic Auth with the API key as username (no password needed); no OAuth2 for the core API. API key is available immediately in Profile Settings for any account, including the 14-day free trial, but there is no permanent free tier — sustained use requires a paid plan (Growth/Pro/Enterprise). Wide resource coverage (tickets, contacts, companies, agents, solutions, automations, CSAT, custom objects, etc.); Composio catalogs 178 tools, suggesting medium API breadth. No vendor-published MCP server found; only community implementations (effytech/freshdesk_mcp and others) exist.",
    "pass1": {
      "auth_methods": [
        "basic"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "basic"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.85
    },
    "cost_usd": 0.366
  },
  {
    "id": 14,
    "name": "Front",
    "category": "Support and Helpdesk",
    "hint": "front.com",
    "one_liner": "Front is a customer communication / shared-inbox helpdesk platform with a REST API for managing conversations, messages, contacts, and workflow automation.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://dev.frontapp.com/docs/welcome",
    "mcp": {
      "status": "official",
      "url": "https://mcp.frontapp.com/mcp"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.88,
    "agreement": 0.94,
    "grounding_rate": 0.83,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs self_serve_free)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "paid_plan",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://dev.frontapp.com/docs/welcome",
        "quote": "You'll get access to a free developer environment that will provide everything you need to begin building with our APIs.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://dev.frontapp.com/docs/authentication",
        "quote": "The Core API uses Bearer tokens to authenticate its user. You MUST send the token for each request in the Authorization header.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://dev.frontapp.com/docs/authentication",
        "quote": "Front recommends implementing OAuth when feasible, which has the additional benefit of building within our application framework.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://dev.frontapp.com/docs/mcp-server",
        "quote": "Front's MCP server (mcp.frontapp.com/mcp) lets AI agents act on Front conversation data using a single OAuth-authenticated endpoint.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://dev.frontapp.com/docs/welcome",
        "quote": "You'll get access to a free developer environment that will provide everything you need to begin building with our APIs.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://dev.frontapp.com/reference/introduction",
        "quote": "REST API designed to communicate using JSON for request and response handling.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api2.frontapp.com/conversations",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"_error\":{\"status\":401,\"title\":\"Unauthenticated\",\"message\":\"JSON Web Token error\"}}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://mcp.frontapp.com/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": "bearer_token"
    },
    "notes": "Front provides a free developer sandbox account (limited to 3 teammates) for building against its REST Core API, with both API-token and OAuth2 authentication (both transmitted as Bearer tokens). OAuth is required/recommended for public integrations distributed to other Front customers, but a developer can self-serve an API token immediately for building/testing without sales contact. Front also ships an official vendor-published MCP server (open beta, OAuth 2.1+PKCE, mcp.frontapp.com/mcp) exposing conversations, messages, contacts, tags, etc.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.271
  },
  {
    "id": 15,
    "name": "Pylon",
    "category": "Support and Helpdesk",
    "hint": "usepylon.com",
    "one_liner": "Pylon is a B2B customer support/helpdesk platform (unified Slack/Teams/email/chat ticketing) with a documented REST API for issues, contacts, messages, and knowledge base data.",
    "auth_methods": [
      "bearer_token",
      "other"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://docs.usepylon.com/pylon-docs/developer/api/authentication",
    "mcp": {
      "status": "official",
      "url": "https://github.com/JustinBeckwith/pylon-mcp"
    },
    "verdict": "yellow",
    "score": 77,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.85,
    "agreement": 0.96,
    "grounding_rate": 0.8,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "other"
        ],
        "pass2": [
          "bearer_token"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "paid_plan",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "small"
      },
      "mcp": {
        "mcp_registry": "community",
        "composio_wraps_mcp": "official",
        "pass2": "community",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://api.usepylon.com/issues",
        "quote": "Token must follow Bearer authorization scheme: https://www.rfc-editor.org/rfc/rfc6750#section-2.1.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.usepylon.com/pylon-docs/developer/api/authentication",
        "quote": "Generate an API token in the Pylon dashboard.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.featurebase.app/blog/pylon-pricing",
        "quote": "API access and custom dashboards for exporting data and building tailored reports.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://www.scalekit.com/blog/pylon-mcp-vs-api",
        "quote": "The Pylon REST API is a bearer-authenticated interface at https://api.usepylon.com, spanning 22 documented resource groups.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.composio.dev/toolkits/pylon_mcp",
        "quote": "wraps_official_mcp: true",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/pylon_mcp",
        "quote": "Composio catalog: auth ['DCR_OAUTH'], 12 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.usepylon.com/issues",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {   \"errors\": [     \"Token must follow Bearer authorization scheme: https://www.rfc-editor.org/rfc/rfc6750#section-2.1.\"   ],   \"request_id\": \"1e1aef8f-2c79-4eab-9b60-56ca964441b4\",   \"code\": \"invalid",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "PYLON_MCP",
      "tools": 12,
      "auth": [
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/pylon_mcp"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": "bearer_token"
    },
    "notes": "Pylon exposes a documented REST API (api.usepylon.com) authenticated via Bearer token (API token generated by an admin in the Pylon dashboard). API access is gated to the Professional tier and above (paid plan; no free tier confirmed) — Starter tier doc did not list API access. No official vendor-published MCP server was found; multiple community MCP servers exist (JustinBeckwith/pylon-mcp is the most-starred), and Composio wraps one of these community servers rather than an official one, so mcp.status is community, not official, despite the precomputed hint labeling it as wrapping \"official\" MCP. Pricing page (usepylon.com/pricing) rendered as a JS-driven demo-booking form and did not yield fetchable plan text directly, so the paid-tier claim relies on a third-party summary (featurebase.app) rather than the vendor page itself — confidence lowered accordingly. api_breadth marked medium based on a third-party count of ~22 resource groups (dozens of endpoints), not a directly fetched vendor endpoint count.",
    "pass1": {
      "auth_methods": [
        "bearer_token",
        "oauth2"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.72
    },
    "cost_usd": 0.653
  },
  {
    "id": 16,
    "name": "LiveAgent",
    "category": "Support and Helpdesk",
    "hint": "liveagent.com",
    "one_liner": "LiveAgent is a helpdesk/live-chat support platform offering a REST API (v3) for tickets, contacts, and agent operations.",
    "auth_methods": [
      "api_key"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "unknown",
    "docs_url": "https://support.liveagent.com/802463-REST-API",
    "mcp": {
      "status": "official",
      "url": "https://github.com/QualityUnit/liveagent-mcp-server"
    },
    "verdict": "green",
    "score": 85,
    "blocker": "none",
    "model_verdict": "yellow",
    "confidence": 0.85,
    "agreement": 0.94,
    "grounding_rate": 0.86,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "formula verdict green, model said yellow"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_trial",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "unknown",
        "pass1": "unknown"
      },
      "mcp": {
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://support.liveagent.com/741982-API-key",
        "quote": "API key is an identity of your LiveAgent (like your username and password) which you can use to build your own custom integration solutions.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://support.liveagent.com/741982-API-key",
        "quote": "While logged in as an admin navigate to Configuration> System> API which loads the API v3 section where you find existing API keys or add a new one.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.liveagent.com/pricing/",
        "quote": "30 days free trial. No credit card required.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://support.liveagent.com/066804-LiveAgent-API",
        "quote": "The API rate limit is set right now to 180 requests per minute, counted for each API key separately.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/QualityUnit/liveagent-mcp-server",
        "quote": "An MCP (Model Context Protocol) server that provides access to LiveAgent API functionality, enabling AI assistants to interact with your LiveAgent helpdesk system.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/QualityUnit/liveagent-mcp-server",
        "quote": "We develop MCP Servers for our customers. If you need MCP server for your own system similar to this MCP server, please contact us.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.liveagent.com/pricing/",
        "quote": "integrations are included in each subscription without any additional costs.",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 301,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "API key is the only documented auth method (no OAuth2/basic/bearer mentioned in support docs). API access is bundled with paid subscription tiers, but LiveAgent offers a 30-day free trial with no credit card required, during which admins can generate API keys via Configuration > System > API. Full interactive REST API v3 docs are only visible inside a live account (https://YOURDOMAIN.ladesk.com/docs/api/v3/), so exact endpoint count (api_breadth) could not be verified externally. The only MCP server found is published under QualityUnit's own GitHub org (QualityUnit is LiveAgent's parent company), so treated as vendor/official, though the README frames it as a custom-dev example rather than a fully supported product — some uncertainty here.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "none",
      "confidence": 0.68
    },
    "cost_usd": 0.336
  },
  {
    "id": 17,
    "name": "Plain",
    "category": "Support and Helpdesk",
    "hint": "plain.com",
    "one_liner": "Plain is a B2B customer support / helpdesk platform (threads, customers, tenants, help center) with a GraphQL API and an official MCP server.",
    "auth_methods": [
      "api_key",
      "bearer_token"
    ],
    "access": "self_serve_trial",
    "api_type": "graphql",
    "api_breadth": "small",
    "docs_url": "https://www.plain.com/docs/graphql/authentication",
    "mcp": {
      "status": "official",
      "url": "https://mcp.plain.com/mcp"
    },
    "verdict": "green",
    "score": 86,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.91,
    "agreement": 0.9,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "bearer_token"
        ],
        "pass1": [
          "bearer_token"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "paid_plan",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "graphql",
        "pass1": "graphql"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://www.plain.com/docs/graphql/authentication",
        "quote": "Authorization: Bearer plainApiKey_xxx",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://www.plain.com/docs/graphql/authentication",
        "quote": "Click 'Add API key' and select the permissions you need.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.plain.com/pricing",
        "quote": "7 day free trial",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.plain.com/pricing",
        "quote": "No credit card required",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://www.plain.com/docs/graphql/authentication",
        "quote": "Go to Settings → Machine Users and click + Add Machine User",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://www.plain.com/changelog/plain-mcp",
        "quote": "30 tools across threads, customers, tenants, help center articles, and workspace data",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.plain.com/changelog/plain-mcp",
        "quote": "You can now connect AI tools like Claude, ChatGPT, and Cursor directly to your Plain workspace using the Plain MCP server.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.plain.com/changelog/plain-mcp",
        "quote": "You authenticate with your existing Plain account, so the MCP server has the same permissions as your user.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.plain.com/docs/graphql/authentication",
        "quote": "Each API key carries its own fine-grained permissions",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/plain",
        "quote": "Composio catalog: auth ['API_KEY'], 23 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://core-api.uk.plain.com/graphql/v1",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"message\":\"Unauthorized\"}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://mcp.plain.com/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "PLAIN",
      "tools": 23,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/plain"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Plain's public API is GraphQL-only (core-api.uk.plain.com/graphql/v1). Credentials are created self-serve via Settings → Machine Users → API Keys, scoped with fine-grained permissions, no admin/partner approval documented. Product access is a 7-day free trial (no credit card) then paid seats starting at $35/seat/month; API/webhooks/events are listed under 'Extensibility' without an explicit paid-tier gate, but sustained use requires converting to a paid plan after trial. Plain also ships an official, vendor-maintained MCP server (mcp.plain.com) authenticated via the user's own Plain account session rather than API keys, exposing ~30 tools over threads/customers/tenants/help-center/workspace data.",
    "pass1": {
      "auth_methods": [
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "graphql",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_trial",
      "api_type": "graphql",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.78
    },
    "cost_usd": 0.34099999999999997
  },
  {
    "id": 18,
    "name": "Help Scout",
    "category": "Support and Helpdesk",
    "hint": "helpscout.com",
    "one_liner": "Help Scout is a customer support helpdesk platform (shared inbox, live chat, knowledge base, and Docs) for small-to-mid-size support teams.",
    "auth_methods": [
      "oauth2"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developer.helpscout.com/mailbox-api/",
    "mcp": {
      "status": "community",
      "url": "https://github.com/drewburchfield/help-scout-mcp-server"
    },
    "verdict": "yellow",
    "score": 90,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.77,
    "agreement": 0.89,
    "grounding_rate": 0.57,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "oauth2"
        ],
        "pass1": [
          "basic",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "github": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.helpscout.com/mailbox-api/overview/authentication/",
        "quote": "This is an HTTPS-only API and it uses OAuth 2.0 authorization, implementing Authorization Code and Client Credential flows.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.helpscout.com/mailbox-api/overview/authentication/",
        "quote": "You need to create an OAuth2 application before you can use the API. Create one by navigating to Your Profile > My apps and click Create My App.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developer.helpscout.com/mailbox-api/",
        "quote": "This is an HTTPS-only API, with OAuth 2 authentication and CORS support running at: https://api.helpscout.net/v2",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/drewburchfield/help-scout-mcp-server",
        "quote": "An MCP server that gives AI assistants direct access to your Help Scout inboxes, conversations, customers, organizations, threads, and Docs knowledge base.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.helpscout.com/pricing/",
        "quote": "When you sign up for a free trial of the Standard or Plus plan, you'll get 15 days to take all of the plan's features for a test drive — no credit card required.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://www.helpscout.com/pricing/",
        "quote": "200 calls/minute",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.helpscout.com/pricing/",
        "quote": "Want to trial the Pro plan? Talk to our sales team.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/help_scout",
        "quote": "Composio catalog: auth ['OAUTH2'], 129 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.helpscout.net/v2/conversations",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Bearer realm=\"service\"; body: {\"error_description\":\"The access token is missing\",\"error\":\"invalid_request\"} ",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "HELP_SCOUT",
      "tools": 129,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/help_scout"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Bearer realm=\"service\"",
      "inferred": "bearer_token"
    },
    "notes": "Official OAuth2-only REST API (Authorization Code + Client Credentials flows) at api.helpscout.net/v2, covering conversations, customers, inboxes, organizations, reports, users, teams, webhooks, workflows, tags, ratings (medium breadth). API access requires a paid Standard/Plus/Pro subscription, but Help Scout offers a 15-day no-credit-card free trial on Standard/Plus during which a developer can create an OAuth2 app and get working credentials — hence self_serve_trial rather than paid_plan. No official MCP server; several community/third-party MCP servers exist on GitHub (most-starred: drewburchfield/help-scout-mcp-server, 47★), explicitly not affiliated with Help Scout. Composio also wraps the API via OAuth2 (129 tools), consistent with rest/medium breadth.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "basic"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.85
    },
    "cost_usd": 0.344
  },
  {
    "id": 19,
    "name": "Gorgias",
    "category": "Support and Helpdesk",
    "hint": "gorgias.com",
    "one_liner": "Gorgias is an e-commerce-focused helpdesk/support platform with a REST API for tickets, customers, macros, and integrations.",
    "auth_methods": [
      "api_key",
      "basic",
      "oauth2"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developers.gorgias.com/reference/introduction",
    "mcp": {
      "status": "community",
      "url": "https://github.com/mattcoatsworth/Gorgias-MCP-Server"
    },
    "verdict": "green",
    "score": 86,
    "blocker": "none",
    "model_verdict": "yellow",
    "confidence": 0.71,
    "agreement": 0.88,
    "grounding_rate": 0.57,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "formula verdict green, model said yellow"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "basic",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_trial",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.gorgias.com/docs/authentication",
        "quote": "Using OAuth2 is mandatory for public apps.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.gorgias.com/docs/authentication",
        "quote": "perform requests directly from the API Reference using your API keys",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.gorgias.com/reference/introduction",
        "quote": "uses standard HTTP response codes, authentication, and verbs",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.gorgias.com/signup?ref-position=other",
        "quote": "Get Started with Free Trial",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://developers.gorgias.com/llms.txt",
        "quote": "Account, Customers, Custom Fields, Events, Files, Integrations, Jobs, Macros, Metric Cards, Rules, Satisfaction Surveys, Search, Statistics, Tags, Teams, Tickets, Ticket Messages, Users, Views, Voice Calls, Widgets",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://www.gorgias.com/pricing",
        "quote": "Developer Docs",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/mattcoatsworth/Gorgias-MCP-Server",
        "quote": "Gorgias-MCP-Server (4★)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/gorgias",
        "quote": "Composio catalog: auth ['API_KEY', 'OAUTH2'], 32 tools",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "GORGIAS",
      "tools": 32,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/gorgias"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Private-app API keys (HTTP Basic auth: email + API key) are obtainable directly from any Gorgias account (trial or paid) via account settings, no app review needed — this is the self-serve path most agent toolkits would use. Public/marketplace apps additionally require OAuth2 and are implied to need a listing process, but no explicit review/approval page was found in this pass (would need to check developers.gorgias.com/docs/set-up-oauth2-app-store for confirmation). Pricing page did not explicitly state which tiers include API access; rate limits (40-80 req/20s per third-party source) suggest it's broadly available rather than gated to a specific paid tier. No official vendor-published MCP server found; several community GitHub MCP servers and a Composio-wrapped toolkit (32 tools, api_key+oauth2) exist.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_trial",
      "api_type": "rest_and_graphql",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "basic",
        "oauth2"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "none",
      "confidence": 0.62
    },
    "cost_usd": 0.327
  },
  {
    "id": 20,
    "name": "Gladly",
    "category": "Support and Helpdesk",
    "hint": "gladly.com",
    "one_liner": "Gladly is an enterprise customer-service/helpdesk platform unifying channels (voice, chat, email, SMS) into a single customer timeline, with an AI agent add-on.",
    "auth_methods": [
      "basic"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developer.gladly.com/rest/",
    "mcp": {
      "status": "community",
      "url": "https://www.stackone.com/connectors/gladly/mcp/"
    },
    "verdict": "yellow",
    "score": 77,
    "blocker": "enterprise_only",
    "model_verdict": "yellow",
    "confidence": 0.7,
    "agreement": 0.93,
    "grounding_rate": 0.43,
    "needs_human": true,
    "needs_human_reasons": [
      "only 43% of quotes grounded in cited pages"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs admin_approval)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "basic"
        ],
        "pass1": [
          "api_key",
          "basic"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://help.gladly.com/developer-tutorials/docs/authentication",
        "quote": "requires an Agent to provide a username and password for a request",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://help.gladly.com/implementation/docs/get-your-api-tokens",
        "quote": "These can be created within the Gladly UI, for users who have the API User role.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://help.gladly.com/implementation/docs/get-your-api-tokens",
        "quote": "at least one technical admin log in to Gladly and create a token",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.gladly.com/rest/",
        "quote": "Gladly API uses token-based Basic Authentication. API tokens are associated with designated Gladly users.",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.eesel.ai/blog/gladly-pricing",
        "quote": "Gladly does not offer a free trial or freemium plan. Gladly does not offer a free plan, and free trials are not publicly available. Access is usually provided through sales-led demos.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://developer.gladly.com/rest/",
        "quote": "Clients access the REST API via HTTPS at the organization's Gladly domain",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.stackone.com/connectors/gladly/mcp/",
        "quote": "StackOne's production Gladly MCP server includes 65 pre-built actions",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 0,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Gladly is an enterprise CX/helpdesk platform sold via sales-led, 12-month contracts with custom pricing; no self-serve free tier or public trial for the core product (a separate Shopify-app 30-day trial exists but likely doesn't expose the full REST API). Once an org is a customer, an admin must grant a user the 'API User' role in Settings to generate a Basic Auth token — so credentials are gated behind both being a paying customer and admin action. REST API documented at developer.gladly.com/rest/ covers ~13 resource categories (Agents, Conversations, Customers, Webhooks, Reports, etc.) with dozens of endpoints — sized as medium breadth. No official vendor MCP server found; StackOne offers a third-party/community MCP connector with 65 actions.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "basic"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "red",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "basic"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "enterprise_only",
      "confidence": 0.72
    },
    "cost_usd": 0.326
  },
  {
    "id": 21,
    "name": "Slack",
    "category": "Communications and Messaging",
    "hint": "slack.com",
    "one_liner": "Slack is a team messaging and collaboration platform with channels, DMs, and a large app/bot ecosystem.",
    "auth_methods": [
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://docs.slack.dev/authentication/",
    "mcp": {
      "status": "community",
      "url": "https://github.com/korotovsky/slack-mcp-server"
    },
    "verdict": "green",
    "score": 95,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.83,
    "agreement": 0.96,
    "grounding_rate": 0.67,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "apis_guru_spec": [
          "oauth2"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "composio_tools": "large",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "community",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://docs.slack.dev/quickstart",
        "quote": "If you don't have a Slack workspace already, we recommend also setting up a developer sandbox.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.slack.dev/quickstart",
        "quote": "Now you've got everything you need to start developing on the Slack platform!",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.slack.dev/authentication/",
        "quote": "Learn how to use OAuth 2.0 to securely authenticate users and request access tokens.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.slack.dev/authentication/",
        "quote": "Understand the different types of tokens your app can use (user tokens, bot tokens, and app tokens) and how to manage them.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/slack.com/1.7.0/openapi.json",
        "quote": "174 endpoints",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/korotovsky/slack-mcp-server",
        "quote": "korotovsky/slack-mcp-server (1829★)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/slack",
        "quote": "Composio catalog: auth ['OAUTH2'], 167 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/slack.com/1.7.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 174 operations, securitySchemes ['oauth2']",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "SLACK",
      "tools": 167,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/slack"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 174
    },
    "probe": {
      "status": 200,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Slack Web API (REST-style) accessed via app creation on api.slack.com/docs.slack.dev; free developer sandbox/workspace lets anyone create an app and obtain OAuth bot/user tokens (xoxb-/xoxp-) sent as Bearer tokens. No official Slack-published MCP server found; several high-star community MCP servers exist (korotovsky/slack-mcp-server, tuannvm/slack-mcp-client, slackapi/slack-skills-plugin). Some admin-level endpoints (Enterprise Grid) require additional approval, but core Web API is self-serve.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.259
  },
  {
    "id": 22,
    "name": "Twilio",
    "category": "Communications and Messaging",
    "hint": "twilio.com",
    "one_liner": "Twilio is a cloud communications platform providing programmable APIs for SMS, voice, video, email, and messaging channels.",
    "auth_methods": [
      "api_key",
      "basic"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://www.twilio.com/docs/iam/api",
    "mcp": {
      "status": "official",
      "url": "https://www.twilio.com/docs/ai/mcp"
    },
    "verdict": "green",
    "score": 92,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.8,
    "agreement": 0.87,
    "grounding_rate": 0.67,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "apis_guru_spec": [
          "api_key"
        ],
        "unauth_probe": [
          "basic"
        ],
        "pass2": [
          "api_key",
          "basic"
        ],
        "pass1": [
          "api_key",
          "basic",
          "bearer_token"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://www.twilio.com/docs/iam/api",
        "quote": "Use your API key SID as the username and your API key secret as the password.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://www.twilio.com/docs/usage/requests-to-twilio",
        "quote": "To authenticate requests to the Twilio APIs, use HTTP Basic authentication.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://www.twilio.com/docs/usage/requests-to-twilio",
        "quote": "Equivalent to using your Account SID and Auth Token for API requests.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.twilio.com/en-us/pricing",
        "quote": "Sign up for a free trial—no credit card required",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.twilio.com/docs/ai/mcp",
        "quote": "Twilio MCP server",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.twilio.com/docs/iam/api",
        "quote": "You can create an API key in the Twilio Console or using the API.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.twilio.com/en-us/pricing",
        "quote": "Start for free. Then pay as you go.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.twilio.com/2010-04-01/Accounts.json",
        "quote": "Basic realm=\"Twilio API\"",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://www.twilio.com/en-us/blog/developers/introducing-twilio-mcp-skills",
        "quote": "direct, structured access to Twilio's full API surface—over 1,800 endpoints across 30+ products",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/twilio.com/api/1.42.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 199 operations, securitySchemes ['basic']",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.twilio.com/2010-04-01/Accounts.json",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Basic realm=\"Twilio API\"; body: {\"code\":20003,\"message\":\"Authentication Error - No credentials provided\",\"more_info\":\"https://www.twilio.com/docs/errors/20003\",\"status\":401}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": true,
      "endpoints": 199
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Basic realm=\"Twilio API\"",
      "inferred": "basic"
    },
    "notes": "Twilio's REST API (Programmable Messaging, Voice, Verify, etc.) uses HTTP Basic auth with either Account SID+Auth Token or API Key SID+Secret (Main/Standard/Restricted key types) — no OAuth2 documented for the core REST API, though Twilio does support OAuth for some newer products (not verified here). Signup is fully self-serve with a no-credit-card free trial that grants trial credit; sending to unverified numbers is restricted until upgrading to a paid account, hence self_serve_trial rather than self_serve_free. Official vendor-hosted MCP server (mcp.twilio.com, docs at twilio.com/docs/ai/mcp) exposes the full API surface (1,800+ endpoints/30+ products) for docs/search; Twilio Labs also publishes a separate alpha local MCP server that can execute API calls. api_breadth marked large based on the 1,800+ endpoint figure from Twilio's own blog (apis.guru's 199-endpoint OpenAPI spec covers only a subset of one product family).",
    "pass1": {
      "auth_methods": [
        "api_key",
        "basic",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "basic",
        "api_key"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.88
    },
    "cost_usd": 0.293
  },
  {
    "id": 23,
    "name": "Zoho Cliq",
    "category": "Communications and Messaging",
    "hint": "zoho.com/cliq",
    "one_liner": "Zoho Cliq is a team messaging/chat app (channels, DMs, bots, extensions) that exposes a REST API and an official MCP server for automation.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://www.zoho.com/cliq/help/restapi/v2/",
    "mcp": {
      "status": "official",
      "url": "https://www.zoho.com/cliq/help/platform/zoho-cliq-mcp.html"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.89,
    "agreement": 1.0,
    "grounding_rate": 0.83,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://www.zoho.com/cliq/help/restapi/v2/",
        "quote": "Zoho Cliq API uses the OAuth 2.0 protocol for authentication.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.zoho.com/cliq/help/restapi/v2/registerclient/",
        "quote": "Go to the Zoho API Console, then click GET STARTED.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.zoho.com/cliq/help/restapi/v2/registerclient/",
        "quote": "you will receive a Client ID and Client Secret. These credentials are used to obtain an access token.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.zoho.com/cliq/help/platform/zoho-cliq-mcp.html",
        "quote": "The Zoho Cliq MCP Server brings your chats into the world of AI using the Model Context Protocol (MCP).",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.zoho.com/cliq/help/restapi/v2/",
        "quote": "Zoho Cliq API uses the OAuth 2.0 protocol for authentication.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://www.zoho.com/cliq/help/platform/webhook-tokens.html",
        "quote": "Authentication of the webhook URL should be done by passing the value of a Webhook token as the key for authentication.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://cliq.zoho.com/api/v2/channels",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body:   ",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "REST API v2 uses OAuth2 via the free, self-serve Zoho API Console (api-console.zoho.com) — no approval/paid tier required to register a client and get Client ID/Secret. Separately, incoming webhooks/bots use a static \"webhook token\" (zapikey) passed as a query param, and extensions use a ZAPI key — both function like API keys. Zoho publishes an official MCP server for Cliq (chat, channels, reminders) with docs for connecting to Claude and other MCP clients. API surface (channels, chats, messages, bots, contacts, etc.) appears to be in the tens-to-low-hundreds of endpoints, so breadth is estimated medium rather than confirmed via an endpoint count.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.78
    },
    "cost_usd": 0.667
  },
  {
    "id": 24,
    "name": "Lark (Larksuite)",
    "category": "Communications and Messaging",
    "hint": "open.larksuite.com",
    "one_liner": "Lark (Larksuite) is an all-in-one workplace communication and collaboration suite (chat, docs, calendar, approvals) with an extensive Open Platform REST API.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://open.larksuite.com/document/home/index",
    "mcp": {
      "status": "official",
      "url": "https://github.com/larksuite/lark-openapi-mcp"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.63,
    "agreement": 0.89,
    "grounding_rate": 0.29,
    "needs_human": true,
    "needs_human_reasons": [
      "only 28% of quotes grounded in cited pages"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (admin_approval vs self_serve_free)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "admin_approval"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "api_type",
        "url": "https://open.larksuite.com/open-apis/im/v1/messages",
        "quote": "{\"code\":99991661,\"msg\":\"Missing access token for authorization. Please make a request with token attached.\"}",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/larksuite/lark-openapi-mcp",
        "quote": "飞书/Lark官方 OpenAPI MCP",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://open.larksuite.com/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM",
        "quote": "以应用身份调用 API 时需要使用的凭证，可读写的数据范围由应用的数据权限范围决定。该类凭证的值以`t-`为前缀",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://open.larksuite.com/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM",
        "quote": "以用户身份调用 API 时需要使用的凭证，可读写的数据范围由用户可读写的数据范围决定。该类凭证的值以`u-`为前缀",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://open.larksuite.com/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM",
        "quote": "调用获取授权登录授权码接口，获取登录预授权码 `code`",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://open.larksuite.com/document/home/introduction-to-custom-app-development/self-built-application-development-process",
        "quote": "点击右上角的 **免费试用**，注册并创建企业账号",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://open.larksuite.com/document/home/introduction-to-custom-app-development/self-built-application-development-process",
        "quote": "在 [开发者后台](https://open.larksuite.com/app)，点击 **创建企业自建应用**",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 400,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Lark (Larksuite) Open Platform exposes a broad REST API (IM, Contact, Drive/Docs, Calendar, Approval, Attendance, Bitable, etc.) under open.larksuite.com/open-apis. Developers self-register a free enterprise account via the 免费试用 (free trial) flow and become the default admin, then create a custom (self-built) app in the developer console to get app_id/app_secret credentials — no separate app review needed for building/using an app within your own tenant. Auth uses app_id/app_secret (api_key-like) to mint tenant_access_token/app_access_token, or a standard OAuth2 authorization-code flow to mint user_access_token; all tokens are then sent as Bearer tokens in the Authorization header. Publishing an app to the public marketplace for other tenants would require additional admin/marketplace review, but that is not required to build and use an agent toolkit against your own tenant. An official vendor-published MCP server exists at larksuite/lark-openapi-mcp. Confidence is moderated by relying on Chinese-language doc pages via fetch summarization rather than direct verbatim inspection of English docs.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "api_key"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "app_review"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.68
    },
    "cost_usd": 0.29200000000000004
  },
  {
    "id": 25,
    "name": "Pumble",
    "category": "Communications and Messaging",
    "hint": "pumble.com",
    "one_liner": "Pumble is a team chat/messaging app offering a self-serve REST API (via an installable API addon) plus a first-party MCP server for connecting AI agents to workspaces.",
    "auth_methods": [
      "api_key"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://pumble-api-keys.addons.marketplace.cake.com/api-docs/",
    "mcp": {
      "status": "official",
      "url": "https://pumble.com/learn/pumble/ai-automation-guide/"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.89,
    "agreement": 1.0,
    "grounding_rate": 0.86,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "small"
      },
      "mcp": {
        "pass2": "official",
        "pass1": "community"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://pumble.com/help/integrations/automation-workflow-integrations/api-keys-integration/",
        "quote": "Available on all plans",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://pumble.com/help/integrations/automation-workflow-integrations/api-keys-integration/",
        "quote": "This message is not visible to other users.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://pumble.com/help/integrations/automation-workflow-integrations/api-keys-integration/",
        "quote": "enter your API key in the Authorize part",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://pumble-api-keys.addons.marketplace.cake.com/api-docs/",
        "quote": "Scalar API Reference",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://pumble.com/learn/pumble/ai-automation-guide/",
        "quote": "Pumble maintains a native MCP (Model Context Protocol) server hosted directly at pumble.com, helping you connect your workspace to your AI agent of choice.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://pumble.com/help/integrations/automation-workflow-integrations/api-keys-integration/",
        "quote": "The rate limit is up to 1000 requests per minute per user.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://docs.composio.dev/toolkits/pumble",
        "quote": "tools: 9",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/pumble",
        "quote": "Composio catalog: auth ['API_KEY'], 9 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://pumble-api-keys.addons.marketplace.cake.com/listChannels",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: Invalid key",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "PUMBLE",
      "tools": 9,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/pumble"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "API requires installing a free \"API addon\" in the workspace, then any member can self-generate keys via /api-keys generate or the API panel; no plan restriction or approval step found. REST API is small (send/reply/delete messages, reactions, create channel, list channels/DMs — ~9 actions per Composio). Pumble also documents a first-party MCP server (endpoint on pumble.com, auth via x-app-token header) for Claude/Gemini/Codex clients, described on a marketing/learn page rather than the core developer docs — treat mcp.status confidence as moderate since it wasn't cross-confirmed in a formal MCP registry.",
    "pass1": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.75
    },
    "cost_usd": 0.292
  },
  {
    "id": 26,
    "name": "Discord",
    "category": "Communications and Messaging",
    "hint": "discord.com",
    "one_liner": "Discord is a voice/text/community chat platform with a REST API and Gateway websocket for building bots and integrations.",
    "auth_methods": [
      "basic",
      "bearer_token",
      "oauth2",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://docs.discord.com/developers/reference",
    "mcp": {
      "status": "community",
      "url": "https://github.com/SaseQ/discord-mcp"
    },
    "verdict": "green",
    "score": 98,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.85,
    "agreement": 1.0,
    "grounding_rate": 0.67,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "basic",
          "bearer_token",
          "oauth2",
          "other"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "community",
        "pass1": "community"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://docs.discord.com/developers/topics/oauth2",
        "quote": "The first step in implementing OAuth2 is registering a developer application and retrieving your client ID and client secret.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.discord.com/developers/reference",
        "quote": "Using a bot token found on the Bot page within your app's settings.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.discord.com/developers/reference",
        "quote": "Using an OAuth2 bearer token gained through the OAuth2 API.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.discord.com/developers/topics/oauth2",
        "quote": "Bot users are automatically added to all apps, and are authenticated using the bot token found in your app's settings.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.discord.com/developers/topics/oauth2",
        "quote": "All OAuth2 token endpoints require either HTTP Basic authentication or credentials supplied in the form data body",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/SaseQ/discord-mcp",
        "quote": "SaseQ/discord-mcp (493 stars) - community-maintained MCP server for Discord",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/discord",
        "quote": "Composio catalog: auth ['OAUTH2'], 28 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://discord.com/api/v10/users/@me",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"message\": \"401: Unauthorized\", \"code\": 0}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "DISCORD",
      "tools": 28,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/discord"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Discord's developer portal (discord.com/developers/applications) lets anyone register an application and generate a bot token / OAuth2 client credentials for free, no approval gate for standard bot/API scopes (privileged intents like message content require a form but not blocking basic API access). API is REST with a large surface (guilds, channels, users, webhooks, interactions, etc., several hundred endpoints) plus a Gateway websocket for real-time events. No official vendor-published MCP server found; several community MCP servers exist (SaseQ/discord-mcp, moltis, gortex, Smithery listings).",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "basic",
        "other"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.244
  },
  {
    "id": 27,
    "name": "Telegram",
    "category": "Communications and Messaging",
    "hint": "core.telegram.org",
    "one_liner": "Telegram is a cloud-based messaging platform offering a free public Bot API (HTTP/JSON) for building bots and an MTProto client API for building custom Telegram clients.",
    "auth_methods": [
      "api_key",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://core.telegram.org/bots/api",
    "mcp": {
      "status": "community",
      "url": "https://github.com/chigwell/telegram-mcp"
    },
    "verdict": "green",
    "score": 95,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.88,
    "agreement": 1.0,
    "grounding_rate": 0.78,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "other"
        ],
        "pass1": [
          "api_key",
          "oauth2",
          "other"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://core.telegram.org/bots/api",
        "quote": "Each bot is given a unique authentication token when it is created.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://core.telegram.org/bots/api",
        "quote": "https://api.telegram.org/bot<token>/METHOD_NAME",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://core.telegram.org/api/obtaining_api_id",
        "quote": "You will get basic addresses as well as the api_id and api_hash parameters required for user authorization",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://core.telegram.org/bots/api",
        "quote": "Each bot is given a unique authentication token when it is created.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://core.telegram.org/api/obtaining_api_id",
        "quote": "Sign up for Telegram using an official application. Log in to your Telegram core: https://my.telegram.org",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://core.telegram.org/bots/api",
        "quote": "https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://core.telegram.org/bots/api",
        "quote": "Each bot is given a unique authentication token when it is created.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/telegram.org/5.0.0/openapi.json",
        "quote": "74 endpoints",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/chigwell/telegram-mcp",
        "quote": "chigwell/telegram-mcp (1618★)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/telegram",
        "quote": "Composio catalog: auth ['API_KEY'], 18 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/telegram.org/5.0.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 74 operations, securitySchemes []",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "TELEGRAM",
      "tools": 18,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/telegram"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 74
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Telegram exposes two distinct public APIs: (1) the Bot API — free, instant self-serve via @BotFather, token-based auth appended to the request URL, REST-like HTTP/JSON, ~74-130+ methods depending on version; (2) the MTProto Client API — free self-serve registration at my.telegram.org yielding api_id/api_hash, but requires implementing the MTProto binary protocol and full user (phone-number) authorization, which is a heavier, non-REST integration (classified as auth \"other\"). No official Telegram-published MCP server found; several community MCP servers exist (chigwell/telegram-mcp, sparfenyuk/mcp-telegram, dryeab/mcp-telegram) wrapping either the Bot API or MTProto client libraries. Verdict is green because a fully functional agent toolkit (bot-based) is buildable today with zero-friction self-serve credentials.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2",
        "other"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "other"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.239
  },
  {
    "id": 28,
    "name": "WhatsApp Business",
    "category": "Communications and Messaging",
    "hint": "developers.facebook.com/docs/whatsapp",
    "one_liner": "WhatsApp Business Platform (Cloud API) lets businesses send/receive WhatsApp messages, templates, and media programmatically via Meta's Graph API.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developers.facebook.com/docs/whatsapp/cloud-api/get-started",
    "mcp": {
      "status": "community",
      "url": "https://github.com/tkhattar14/whatsapp-business-mcp"
    },
    "verdict": "yellow",
    "score": 95,
    "blocker": "app_review",
    "model_verdict": "yellow",
    "confidence": 0.71,
    "agreement": 0.89,
    "grounding_rate": 0.5,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (admin_approval vs self_serve_free)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "admin_approval"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.facebook.com/docs/whatsapp/cloud-api/get-started",
        "quote": "The temporary access token you created to send the hello_world template message expires quickly and is not suitable for development purposes.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.facebook.com/docs/whatsapp/cloud-api/reference",
        "quote": "Meta for Developers",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developers.facebook.com/docs/whatsapp/cloud-api/get-started",
        "quote": "A list of publishing requirements are listed",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.facebook.com/docs/whatsapp/cloud-api/get-started",
        "quote": "Generate access token to send a test message",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://developers.facebook.com/documentation/business-messaging/whatsapp/overview",
        "quote": "developers.facebook.com/documentation/business-messaging/whatsapp/overview",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/tkhattar14/whatsapp-business-mcp",
        "quote": "tkhattar14/whatsapp-business-mcp (3★)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/whatsapp",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 57 tools",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "WHATSAPP",
      "tools": 57,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/whatsapp"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 400,
      "www_authenticate": "OAuth \"Facebook Platform\" \"invalid_request\" \"An active access token must be used to query information about the current user.\"",
      "inferred": "other"
    },
    "notes": "Free Meta developer account + app gives an instant test phone number and temporary bearer token for sandbox testing (self-serve, no cost). Auth is Meta/Facebook OAuth2 flow producing bearer access tokens (temporary or permanent via System User); Graph API is REST-based. Scaling to production (beyond ~250 business-initiated conversations/24h to real customers) requires Meta Business Verification and app review of permissions (whatsapp_business_messaging, whatsapp_business_management), which is a lightweight but mandatory approval gate — hence yellow/app_review rather than pure green. No official Meta-published MCP server found; only community MCP implementations exist on GitHub. Composio wraps it with 57 tools via api_key/oauth2, consistent with REST + bearer/OAuth2 findings. API surface (messages, templates, media, phone numbers, business profile, flows, webhooks) is more than a handful of endpoints but not enormous — estimated medium breadth.",
    "pass1": {
      "auth_methods": [
        "bearer_token"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "app_review"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "app_review",
      "confidence": 0.72
    },
    "cost_usd": 0.263
  },
  {
    "id": 29,
    "name": "Aircall",
    "category": "Communications and Messaging",
    "hint": "aircall.io",
    "one_liner": "Aircall is a cloud-based call center and business phone system with click-to-dial, call routing, and CRM integrations.",
    "auth_methods": [
      "basic",
      "oauth2"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developers.aircall.io/api-references",
    "mcp": {
      "status": "community",
      "url": "https://github.com/themobilefirstco/aircall-mcp-server"
    },
    "verdict": "yellow",
    "score": 71,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.71,
    "agreement": 0.88,
    "grounding_rate": 0.5,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs paid_plan)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "basic",
          "oauth2"
        ],
        "pass1": [
          "basic",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "small",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://support.aircall.io/en-gb/articles/10375355327517",
        "quote": "Use Basic Auth if you are an Aircall customer building for your own account only.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://aircall.io/pricing/",
        "quote": "250+ integrations and API access",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/themobilefirstco/aircall-mcp-server",
        "quote": "aircall-mcp-server",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.aircall.io/tutorials/how-aircall-oauth-flow-works",
        "quote": "Aircall implemented the OAuth 2.0 authentication protocol so you can easily build an app on top of Aircall and deploy it on Aircall's Marketplace.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://developer.aircall.io/tutorials/how-aircall-oauth-flow-works",
        "quote": "OAuth credentials — If you haven't received them yet, apply to the Tech Partner program",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://developer.aircall.io/api-references/",
        "quote": "The foundation for every Aircall integration is the REST API",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.aircall.io/v1/calls",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"message\":\"Unauthorized\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Two auth tracks: (1) Basic Auth with a self-generated api_id/token, available to any Aircall customer on a paid plan (even entry-level Essentials includes \"API access\") for building against your own account only; (2) OAuth2, required for multi-tenant Marketplace apps, which requires applying to and being approved by Aircall's Technology Partner program (client_id/client_secret issued after approval). No official Aircall-published MCP server found; several unofficial community MCP servers exist on GitHub with low star counts. Not present in Composio catalog. API surface appears CRM/telephony-resource sized (calls, contacts, users, numbers, teams, tags, webhooks, insights) — treated as small/unknown breadth since no endpoint count was directly verified.",
    "pass1": {
      "auth_methods": [
        "basic",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "basic",
        "oauth2"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.72
    },
    "cost_usd": 0.377
  },
  {
    "id": 30,
    "name": "Vonage",
    "category": "Communications and Messaging",
    "hint": "developer.vonage.com",
    "one_liner": "Vonage is a cloud communications platform (CPaaS) providing REST APIs for SMS, Voice, Video, Messages, Verify, and Number Insight.",
    "auth_methods": [
      "api_key",
      "basic",
      "jwt"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developer.vonage.com/en/home",
    "mcp": {
      "status": "official",
      "url": "https://developer.vonage.com/en/blog/introducing-the-vonage-documentation-mcp-server"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.86,
    "agreement": 1.0,
    "grounding_rate": 0.75,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "apis_guru_spec": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "basic",
          "jwt"
        ],
        "pass1": [
          "basic",
          "bearer_token",
          "jwt",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "small",
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://developer.vonage.com/en/getting-started/overview",
        "quote": "an API key and secret that you can use to access our APIs",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.vonage.com/en/getting-started/overview",
        "quote": "We'll give you some free credit when you first open your account and you can top up when you run low.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.vonage.com/en/getting-started/concepts/authentication",
        "quote": "API key and secret sent Base64 encoded in the Authorization header",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.vonage.com/en/getting-started/concepts/authentication",
        "quote": "a compact, URL-safe means of representing claims to be transferred between two parties",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developer.vonage.com/en/blog/introducing-the-vonage-documentation-mcp-server",
        "quote": "We're excited to announce the Vonage Documentation MCP Server — a new way to access Vonage docs directly from your development environment or AI assistant.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developer.vonage.com/en/getting-started/overview",
        "quote": "Access to our APIs is charged on a per-request basis.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.vonage.com/en/api/sms",
        "quote": "Your API key. Only required if setting sig.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://developer.vonage.com/en/home",
        "quote": "rest",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/vonage.com/account/1.11.8/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 3 operations, securitySchemes ['bearer_token']",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": true,
      "endpoints": 3
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Vonage (formerly Nexmo) is a large communications platform (Voice, SMS, Messages, Verify, Video, Number Insight, Conversation, Application APIs, etc.) — apis.guru only indexed the small \"account\" sub-API (3 endpoints), so api_breadth is judged large based on the full product surface, not that one spec. Auth is primarily API key/secret via HTTP Basic, plus JWT (Bearer) for Voice/Video/Application-scoped APIs; some legacy endpoints (e.g. SMS) accept api_key/api_secret as signed request params. Free developer account with starter credit is self-serve (no approval gate); production use is pay-as-you-go. Vonage publishes an official Documentation MCP server and an official API-bindings MCP server (community forks/alternatives also exist, e.g. khan2a/telephony-mcp-server), so mcp.status is official rather than community.",
    "pass1": {
      "auth_methods": [
        "basic",
        "bearer_token",
        "jwt",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "basic",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.8
    },
    "cost_usd": 0.312
  },
  {
    "id": 31,
    "name": "Google Ads",
    "category": "Marketing, Ads, Email and Social",
    "hint": "developers.google.com/google-ads",
    "one_liner": "Google Ads API is Google's programmatic (REST/gRPC) interface for managing Google Ads accounts, campaigns, and reporting.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developers.google.com/google-ads/api/docs/start",
    "mcp": {
      "status": "community",
      "url": "https://github.com/gomarble-ai/google-ads-mcp-server"
    },
    "verdict": "yellow",
    "score": 73,
    "blocker": "app_review",
    "model_verdict": "yellow",
    "confidence": 0.84,
    "agreement": 0.95,
    "grounding_rate": 0.75,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "admin_approval"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "apis_guru_spec": "small",
        "composio_tools": "small",
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "github": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.google.com/google-ads/api/docs/oauth/overview",
        "quote": "Google Ads API also uses the OAuth 2.0 protocol for authentication and authorization.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.google.com/google-ads/api/docs/oauth/overview",
        "quote": "a developer token is also required to make Google Ads API calls",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.google.com/google-ads/api/docs/access-levels",
        "quote": "Enable Google Ads API in your Google Cloud project to automatically be granted Test access for your project.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.google.com/google-ads/api/docs/access-levels",
        "quote": "a detailed manual audit of your application",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.google.com/google-ads/api/rest/overview",
        "quote": "The Google Ads API can be called either using gRPC or REST.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developers.google.com/google-ads/api/docs/access-levels",
        "quote": "Google may automatically upgrade your project's API access level to Basic once you submit your application.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.google.com/google-ads/api/docs/access-levels",
        "quote": "typically takes 10 business days",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/gomarble-ai/google-ads-mcp-server",
        "quote": "google-ads-mcp-server (143★)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/googleads",
        "quote": "Composio catalog: auth ['OAUTH2'], 28 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/google.com/v3/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 23 operations, securitySchemes []",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "GOOGLEADS",
      "tools": 28,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/googleads"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 23
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Test access (sandbox-like, test accounts only) is granted automatically/free upon enabling the API and OAuth2 client + developer token. Real production use requires applying for Basic access (auto-upgrade after brand verification) or Standard access, which needs a manual Google audit (~10 business days) — this gates broad/unlimited production use, hence admin_approval/app_review rather than pure self-serve. No official Google-published MCP server found; only third-party/community MCP servers exist (e.g. gomarble-ai, amekala). Auth requires both OAuth2 (user/service account) and a developer token (acts as an API-key-like credential) on every call.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "admin_approval",
      "api_type": "rest_and_graphql",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "app_review"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "app_review",
      "confidence": 0.78
    },
    "cost_usd": 0.309
  },
  {
    "id": 32,
    "name": "Meta Ads",
    "category": "Marketing, Ads, Email and Social",
    "hint": "developers.facebook.com/docs/marketing-apis",
    "one_liner": "Meta Marketing API lets developers programmatically create, manage, and report on Facebook and Instagram ad campaigns, ad sets, creatives, audiences, and insights.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developers.facebook.com/docs/marketing-apis",
    "mcp": {
      "status": "community",
      "url": "https://github.com/pipeboard-co/meta-ads-mcp"
    },
    "verdict": "yellow",
    "score": 80,
    "blocker": "app_review",
    "model_verdict": "yellow",
    "confidence": 0.75,
    "agreement": 0.93,
    "grounding_rate": 0.57,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "admin_approval"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "graphql"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "github": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.facebook.com/docs/marketing-api/overview/authorization",
        "quote": "If you're managing someone's ads, use the `scope` parameter to prompt them for the `ads_management` or `ads_read` permissions.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.facebook.com/docs/permissions/reference/ads_management",
        "quote": "Business Verification is required for all apps making requests for Advanced Access.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://graph.facebook.com/v21.0/me/adaccounts",
        "quote": "{\"error\":{\"message\":\"An active access token must be used to query information about the current user.\",\"type\":\"OAuthException\",\"code\":2500,\"fbtrace_id\":\"A4Dg2mXdap5qxspBnE3BUSq\"}}",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developers.facebook.com/docs/app-review",
        "quote": "As part of the review process we will test your app to verify that it actually uses the permissions and features you are requesting.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://graph.facebook.com/v21.0/me/adaccounts",
        "quote": "OAuth \"Facebook Platform\" \"invalid_request\" \"An active access token must be used to query information about the current user.\"",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://developers.facebook.com/docs/app-review",
        "quote": "If your app will be used by anyone without a Role on the app or a role in a Business that has claimed the app, it must first undergo App Review.",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/pipeboard-co/meta-ads-mcp",
        "quote": "pipeboard-co/meta-ads-mcp (1261★)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/metaads",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 56 tools",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "METAADS",
      "tools": 56,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/metaads"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 400,
      "www_authenticate": "OAuth \"Facebook Platform\" \"invalid_request\" \"An active access token must be used to query information about the current user.\"",
      "inferred": "other"
    },
    "notes": "A developer can self-serve create an app and get OAuth access tokens for free to test against their own ad account (Standard Access, no review needed). Production use managing other businesses' ad accounts requires ads_management permission via Meta App Review plus Business Verification (Advanced Access), which is an approval gate rather than a paid tier. No official Meta-published MCP server found; several community MCP servers exist (e.g. pipeboard-co/meta-ads-mcp). API is REST over graph.facebook.com with hundreds of endpoints/fields across campaigns, ad sets, ads, creatives, audiences, catalogs, and insights.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "admin_approval",
      "api_type": "graphql",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "app_review"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "app_review",
      "confidence": 0.72
    },
    "cost_usd": 0.291
  },
  {
    "id": 33,
    "name": "LinkedIn Ads",
    "category": "Marketing, Ads, Email and Social",
    "hint": "learn.microsoft.com/linkedin/marketing",
    "one_liner": "LinkedIn Marketing Developer Platform (LinkedIn Ads) lets developers manage ad campaigns, creatives, targeting, conversions and reporting via LinkedIn's versioned REST API, gated by app review and 3-legged OAuth2 member authorization.",
    "auth_methods": [
      "oauth2"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://learn.microsoft.com/en-us/linkedin/marketing/quick-start",
    "mcp": {
      "status": "none",
      "url": null
    },
    "verdict": "yellow",
    "score": 70,
    "blocker": "app_review",
    "model_verdict": "yellow",
    "confidence": 0.9,
    "agreement": 0.93,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (partner_gated vs admin_approval)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "unauth_probe": [
          "oauth2"
        ],
        "pass2": [
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "small",
        "composio_tools": "small",
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "pass2": "none",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://learn.microsoft.com/en-us/linkedin/shared/authentication/authentication",
        "quote": "The LinkedIn API uses OAuth 2.0 for member (user) authorization and API authentication.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://learn.microsoft.com/en-us/linkedin/shared/authentication/authentication",
        "quote": "Not all APIs support Application Authorization. For example, Marketing APIs you must use Member Authorization explained above.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.linkedin.com/rest/adAccounts",
        "quote": "{\"status\":401,\"serviceErrorCode\":65604,\"code\":\"EMPTY_ACCESS_TOKEN\",\"message\":\"Empty oauth2 access token\"}",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://learn.microsoft.com/en-us/linkedin/marketing/quick-start",
        "quote": "Apply to the desired API under the Products tab of your app.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://learn.microsoft.com/en-us/linkedin/marketing/quick-start",
        "quote": "After you build and test your application, apply for Standard tier access. To upgrade to Advertising API Standard tier, submit a tier upgrade request with a video demonstrating how your platform creates, edits, or optimizes LinkedIn campaigns.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://learn.microsoft.com/en-us/linkedin/marketing/getting-started",
        "quote": "Once your application has been accepted into the Development Tier, you can manage and view your Ad Accounts from the developer portal. Add up to 5 accounts to manage in the Development Tier.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://learn.microsoft.com/en-us/linkedin/marketing/versioning",
        "quote": "LinkedIn’s Marketing APIs first versioned API release was June 2022 under a new base path: `https://api.linkedin.com/rest/`",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://learn.microsoft.com/en-us/linkedin/marketing/quick-start",
        "quote": "Review our API and data restrictions to ensure your use case is supported and your application is not rejected due to a restricted use case.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/linkedin_ads",
        "quote": "Composio catalog: auth ['OAUTH2'], 28 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/learnifier.com/1.1.0/swagger.json",
        "quote": "APIs.guru OpenAPI spec: 34 operations, securitySchemes []",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.linkedin.com/rest/adAccounts",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"status\":401,\"serviceErrorCode\":65604,\"code\":\"EMPTY_ACCESS_TOKEN\",\"message\":\"Empty oauth2 access token\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "LINKEDIN_ADS",
      "tools": 28,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/linkedin_ads"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 34
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": "oauth2"
    },
    "notes": "Marketing APIs use 3-legged OAuth2 only (no 2-legged/client-credentials, no API keys). Getting any access requires creating a LinkedIn Page + dev app, then applying under the Products tab and completing an access form to be accepted into a 'Development Tier' (limited to 5 ad accounts, for build/testing only). Production-scale use requires a further 'Standard tier' application with a video demo of the app, a manual app-review gate — hence yellow/app_review rather than green. api_breadth marked 'large' based on the breadth of API families (Advertising, Community Management, Lead Sync, Conversions, Events Management, Matched Audiences) each with many resources, though no single authoritative endpoint count was found (the precomputed apis.guru spec was for an unrelated product, learnifier.com, and was ignored). MCP registry lookup returned no official or community server.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "partner_gated",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "red",
      "blocker": "partner_gate"
    },
    "pass2": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "app_review",
      "confidence": 0.72
    },
    "cost_usd": 0.379
  },
  {
    "id": 34,
    "name": "GoHighLevel",
    "category": "Marketing, Ads, Email and Social",
    "hint": "highlevel.stoplight.io",
    "one_liner": "GoHighLevel is an all-in-one sales/marketing CRM platform (funnels, email/SMS, ads, automation) offering a REST API for contacts, campaigns, and workflows.",
    "auth_methods": [
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://marketplace.gohighlevel.com/docs/",
    "mcp": {
      "status": "official",
      "url": "https://services.leadconnectorhq.com/mcp/"
    },
    "verdict": "yellow",
    "score": 95,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.79,
    "agreement": 0.92,
    "grounding_rate": 0.83,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://marketplace.gohighlevel.com/docs/",
        "quote": "OAuth 2.0 or Private Integration Token",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://marketplace.gohighlevel.com/docs/Authorization/PrivateIntegrationsToken/",
        "quote": "static/fixed OAuth2 Access Tokens",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://marketplace.gohighlevel.com/docs/Authorization/PrivateIntegrationsToken/",
        "quote": "By default, all agency admins can create and manage Private Integrations.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://rocketlauncher.ai/use-cases/what-is-mcp-gohighlevel",
        "quote": "GoHighLevel ships an official MCP server at https://services.leadconnectorhq.com/mcp/",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://marketplace.gohighlevel.com/docs/",
        "quote": "Marketplace app or Private integration",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.ruzuku.com/compare/gohighlevel-pricing",
        "quote": "GoHighLevel's main plans are $97/month for Starter, $297/month for Unlimited, and $497/month for Agency Pro",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/highlevel",
        "quote": "Composio catalog: auth ['OAUTH2'], 218 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://services.leadconnectorhq.com/contacts/",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"statusCode\":401,\"message\":\"version header was not found.\"}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://services.leadconnectorhq.com/mcp/",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "HIGHLEVEL",
      "tools": 218,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/highlevel"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "GoHighLevel's current API (v2) is REST-based on the Developer Marketplace (marketplace.gohighlevel.com/docs), authenticated via OAuth 2.0 (for distributed Marketplace apps) or Private Integration Tokens (static bearer tokens scoped to one sub-account/agency, requiring admin access, \"static/fixed OAuth2 Access Tokens\"). Legacy v1 API keys exist but are deprecated in favor of v2. There is no perpetual free tier: HighLevel offers only a 14-day (or extended 30-day via some partner links) trial, after which a paid subscription ($97-$497/mo) is required to hold a sub-account and generate credentials — docs themselves are publicly viewable without signup. An MCP server appears to be hosted by HighLevel itself at services.leadconnectorhq.com/mcp/ (same domain as their official API, per the unauthenticated probe in the provided context returning a structured HighLevel API error rather than a generic 404), authenticated with a Private Integration Token; this is corroborated only by third-party writeups, not a directly fetched vendor page (that URL 401'd without a body), so treat mcp.status confidence as moderate, not confirmed. api_breadth is inferred as \"large\" from the breadth of documented resource categories (contacts, conversations, calendars, opportunities, payments, workflows, funnels, social planner, etc.) and the Composio catalog wrapping 218 actions for this toolkit; not independently verified by an endpoint count during this pass.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.55
    },
    "cost_usd": 0.439
  },
  {
    "id": 35,
    "name": "Mailchimp",
    "category": "Marketing, Ads, Email and Social",
    "hint": "mailchimp.com/developer",
    "one_liner": "Mailchimp is an email/marketing automation platform with a REST-based Marketing API for managing audiences, campaigns, and automations.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://mailchimp.com/developer/marketing/docs/fundamentals/",
    "mcp": {
      "status": "community",
      "url": "https://github.com/cyanheads/mailchimp-mcp-server"
    },
    "verdict": "green",
    "score": 98,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.77,
    "agreement": 0.96,
    "grounding_rate": 0.5,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "unauth_probe": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://mailchimp.com/developer/marketing/docs/fundamentals/",
        "quote": "if you ever need to access someone else's Mailchimp account data, you should use OAuth 2",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://mailchimp.com/developer/marketing/docs/fundamentals/",
        "quote": "Authorization: Bearer <TOKEN>",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://mailchimp.com/developer/marketing/guides/access-user-data-oauth-2/",
        "quote": "Navigate to the Registered Apps page in your Mailchimp account ... Click Register An App",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://us1.api.mailchimp.com/3.0/lists",
        "quote": "{\"type\":\"https://mailchimp.com/developer/marketing/docs/errors/\",\"title\":\"API Key Invalid\",\"status\":401,\"detail\":\"Your request did not include a valid API key or token.\"",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://mailchimp.com/pricing/marketing/",
        "quote": "Free ... ₹ 0 /month ... Limit of 250 contacts",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://mailchimp.com/developer/",
        "quote": "graphql",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://docs.composio.dev/toolkits/mailchimp",
        "quote": "275",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/cyanheads/mailchimp-mcp-server",
        "quote": "io.github.cyanheads/mailchimp-mcp-server",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/mailchimp",
        "quote": "Composio catalog: auth ['OAUTH2'], 275 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://us1.api.mailchimp.com/3.0/lists",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"type\":\"https://mailchimp.com/developer/marketing/docs/errors/\",\"title\":\"API Key Invalid\",\"status\":401,\"detail\":\"Your request did not include a valid API key or token.\",\"instance\":\"8a9c914d-ec71-1511",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "MAILCHIMP",
      "tools": 275,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/mailchimp"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": "api_key"
    },
    "notes": "Free tier account (250 contacts) grants a self-serve API key immediately, and OAuth2 app registration is self-service via the Registered Apps page — no partner gate or app review found. Docs site surfaces a GraphQL signal on the developer homepage but the documented and primary public API is REST (Marketing API v3); no evidence of a fully separate public GraphQL API was found, so api_type is reported as rest. MCP is community-maintained only (cyanheads, asklokesh), no official vendor MCP server found.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.264
  },
  {
    "id": 36,
    "name": "Klaviyo",
    "category": "Marketing, Ads, Email and Social",
    "hint": "developers.klaviyo.com",
    "one_liner": "Klaviyo is a marketing automation platform (email, SMS, and push) for ecommerce and D2C brands, offering a REST API for managing profiles, campaigns, flows, segments, and events.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developers.klaviyo.com/en/reference/api_overview",
    "mcp": {
      "status": "community",
      "url": "https://docs.composio.dev/toolkits/klaviyo"
    },
    "verdict": "green",
    "score": 98,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.78,
    "agreement": 0.89,
    "grounding_rate": 0.62,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.klaviyo.com/en/docs/authenticate_",
        "quote": "Private API keys can be used to read and write data to your Klaviyo account.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.klaviyo.com/en/docs/authenticate_",
        "quote": "OAuth offers multiple benefits over a private key integration, including security, usability, improved rate limits.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.klaviyo.com/en/docs/authenticate_",
        "quote": "To manage API keys, you must have an Owner, Admin, or Manager role on your Klaviyo account.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.klaviyo.com/sign-up",
        "quote": "Klaviyo: Sign Up for Free Today",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developers.klaviyo.com/en/docs/authenticate_",
        "quote": "After you have created your private API key, copy it to a secure location",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.klaviyo.com/en/reference/api_overview",
        "quote": "All `/api` endpoints use private API keys with API scopes to authenticate requests, passed via the header Authorization: Klaviyo-API-Key your-private-api-key",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.klaviyo.com/en/reference/api_overview",
        "quote": "All new API endpoints are rate limited on a per-account basis, and use a fixed-window rate limiting algorithm with two distinct windows: burst (short) and steady (long).",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.composio.dev/toolkits/klaviyo",
        "quote": "225 tools",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/klaviyo",
        "quote": "Composio catalog: auth ['API_KEY', 'OAUTH2'], 225 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://a.klaviyo.com/api/profiles/",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Bearer, Klaviyo-API-Key; body: {\"errors\":[{\"id\":\"6cd174a4-de51-4668-94d8-137cba7dcce0\",\"status\":401,\"code\":\"not_authenticated\",\"title\":\"Authentication credentials were not provided.\",\"detail\":\"Authentication credentials were not pr",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "KLAVIYO",
      "tools": 225,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/klaviyo"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Bearer, Klaviyo-API-Key",
      "inferred": "bearer_token"
    },
    "notes": "Klaviyo has a mature, well-documented REST API (23+ resource categories: Accounts, Campaigns, Catalogs, Events, Flows, Lists, Metrics, Profiles, Segments, Templates, Webhooks, etc.), each with multiple CRUD/relationship endpoints, so total endpoint count exceeds 300 (breadth marked \"large\", though no single official page states an exact total). Free (\"Forever Free\") Klaviyo accounts can be created with no credit card (up to 250 profiles / 500 email sends/month), and any account with an Owner/Admin/Manager role can generate private API keys with configurable scopes directly from account settings — no app review or sales contact required — so this is self-serve. OAuth2 is documented as an alternative for tech/app partners with improved rate limits, but private API keys are the standard, immediately available path. No official Klaviyo-published MCP server was found; only community MCP servers (mcparmory, pipeworx-io, scalably) exist per the registry hints.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.317
  },
  {
    "id": 37,
    "name": "systeme.io",
    "category": "Marketing, Ads, Email and Social",
    "hint": "systeme.io (funnel builder)",
    "one_liner": "systeme.io is an all-in-one funnel builder and marketing platform (funnels, email campaigns, courses, ecommerce) offering a self-serve REST API and an official MCP server.",
    "auth_methods": [
      "api_key"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developer.systeme.io/reference",
    "mcp": {
      "status": "official",
      "url": "https://mcp.systeme.io/mcp"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.83,
    "agreement": 1.0,
    "grounding_rate": 0.67,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "medium",
        "pass1": "small"
      },
      "mcp": {
        "pass2": "official",
        "mcp_endpoint_probe": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.systeme.io/reference",
        "quote": "attach your API key to the X-API-Key header of each request",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://systeme.io/pricing",
        "quote": "the free plan never expires and does not require a credit card",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://help.systeme.io/article/2323-how-to-create-a-public-api-key-on-systeme-io",
        "quote": "Give your key a name, set an expiration date, and click Save",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://help.systeme.io/article/9489-how-to-use-systeme-ios-mcp",
        "quote": "This is an initial release implementation and does not yet support the recommended authentication method (OAuth).",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://developer.systeme.io/llms.txt",
        "quote": "Contact - Create, retrieve, update, delete, and list",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://help.systeme.io/article/2323-how-to-use-systeme-io-public-api",
        "quote": "API calls from a server-side environment",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.systeme.io/api/contacts",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"type\":\"https:\\/\\/tools.ietf.org\\/html\\/rfc2616#section-10\",\"title\":\"An error occurred\",\"detail\":\"Full authentication is required to access this resource.\"}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://mcp.systeme.io/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (text/html; charset=UTF-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Public REST API (developer.systeme.io/reference, ~40 resources x CRUD = roughly 100-150 endpoints, so medium breadth) authenticated via X-API-Key header; keys are self-generated in dashboard Settings > MCP & API keys with no approval step, and the free plan (no credit card required) includes API/MCP key generation. Separately, systeme.io ships an official MCP server (mcp.systeme.io/mcp) authenticated with a key-based scheme (OAuth explicitly not yet supported per their docs), covering contacts, tags, and newsletters. No OAuth2/JWT/basic documented for the public API — key-only auth today.",
    "pass1": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.78
    },
    "cost_usd": 0.356
  },
  {
    "id": 38,
    "name": "Pinterest",
    "category": "Marketing, Ads, Email and Social",
    "hint": "developers.pinterest.com",
    "one_liner": "Pinterest is a visual discovery/social platform whose developer API (v5) lets apps manage boards, pins, ads, catalogs and user account data.",
    "auth_methods": [
      "oauth2"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developers.pinterest.com/docs/getting-started/introduction/",
    "mcp": {
      "status": "community",
      "url": "https://github.com/cesteral/pinterest-mcp"
    },
    "verdict": "yellow",
    "score": 77,
    "blocker": "app_review",
    "model_verdict": "yellow",
    "confidence": 0.6,
    "agreement": 0.89,
    "grounding_rate": 0.17,
    "needs_human": true,
    "needs_human_reasons": [
      "only 17% of quotes grounded in cited pages"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs admin_approval)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "verdict",
        "url": "https://api.pinterest.com/v5/user_account",
        "quote": "{\"code\":2,\"message\":\"Authentication failed.\",\"status\":\"failure\"}",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.pinterest.com/docs/getting-started/set-up-authentication-and-authorization/",
        "quote": "For the key Authorization, enter the value Bearer {your_token}",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.pinterest.com/docs/getting-started/set-up-authentication-and-authorization/",
        "quote": "Authorization: Basic {base64-encoded_string_made_of client_id:client_secret}",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://developers.pinterest.com/docs/key-concepts/access-tiers/",
        "quote": "If approved for API use, your app receives Trial access, which is best for exploring our API features.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://developers.pinterest.com/docs/key-concepts/access-tiers/",
        "quote": "If you want to offer Pinterest capabilities to your users, we recommend upgrading to Standard access to get the full functionality that our API offers.",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.composio.dev/toolkits/pinterest",
        "quote": "wraps_official_mcp: false",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/pinterest",
        "quote": "Composio catalog: auth ['OAUTH2'], 24 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.pinterest.com/v5/user_account",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"code\":2,\"message\":\"Authentication failed.\",\"status\":\"failure\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "PINTEREST",
      "tools": 24,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/pinterest"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Pinterest API v5 is REST, OAuth 2.0 only (Authorization Code, Client Credentials, Refresh Token grants); token exchange uses HTTP Basic with client_id/client_secret, API calls use Bearer token. New apps must first be approved for free Trial access (sandbox-only Pins/Boards, business-day approval per community reports), then separately apply and wait 1-4 weeks with a demo video for Standard access to unlock full functionality/rate limits — this two-stage review gates real production use, hence admin_approval/app_review rather than self-serve. No official Pinterest-published MCP server found; only community MCP servers (e.g. cesteral/pinterest-mcp, getmcpads pinterest-ads) exist per registry hints.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "app_review",
      "confidence": 0.72
    },
    "cost_usd": 0.499
  },
  {
    "id": 39,
    "name": "Threads (Meta)",
    "category": "Marketing, Ads, Email and Social",
    "hint": "developers.facebook.com/docs/threads",
    "one_liner": "Threads API is Meta's official REST-style HTTP API (graph.threads.net) letting developers publish posts, manage replies, and pull insights/profile data for the Threads social app.",
    "auth_methods": [
      "bearer_token",
      "oauth2"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developers.facebook.com/docs/threads",
    "mcp": {
      "status": "community",
      "url": "https://github.com/Digital-Threads/token-pilot"
    },
    "verdict": "yellow",
    "score": 73,
    "blocker": "app_review",
    "model_verdict": "yellow",
    "confidence": 0.78,
    "agreement": 0.92,
    "grounding_rate": 0.62,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs admin_approval)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.facebook.com/docs/threads/get-started",
        "quote": "API authentication is handled by Threads user access tokens that conform to the OAuth 2.0 protocol.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.facebook.com/docs/threads/overview",
        "quote": "https://graph.threads.net/v1.0/<THREADS_USER_ID>/threads_publishing_limit?fields=quota_usage,config&access_token=<ACCESS_TOKEN>",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.facebook.com/docs/threads/get-started",
        "quote": "create an app and pick the Threads Use Case",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.facebook.com/docs/threads/overview",
        "quote": "The Threads API can be accessed by either graph.threads.com or graph.threads.net.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://developers.facebook.com/docs/threads/reference",
        "quote": "Refer to each endpoint's reference document for usage requirements.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.facebook.com/docs/threads/get-started",
        "quote": "In order for app users without a role on your app to be able to grant your app these permissions, each permission must first be approved through the App Review process, and your app must be published.",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/Digital-Threads/token-pilot",
        "quote": "io.github.Digital-Threads/token-pilot",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://developers.facebook.com/docs/threads/get-started",
        "quote": "each permission must first be approved through the App Review process, and your app must be published",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 400,
      "www_authenticate": "OAuth \"Facebook Platform\" \"invalid_token\" \"Invalid OAuth 2.0 Access Token\"",
      "inferred": "other"
    },
    "notes": "Meta's official Threads API (graph.threads.net / graph.threads.com), REST-style HTTP endpoints (GET/POST) under the Graph API family, distinct from Meta's older Instagram/Facebook Graph API but structurally identical. Free Meta developer account + app creation gets a developer immediate self-testing access via the \"Threads Tester\" role, but any permission used against real (non-tester) users requires Meta App Review and app publishing, which is a gated approval process, not pure self-serve. Only 9 documented endpoint groups (Publishing, Media Retrieval, Reply Management, User, Locations, Location Search, Insights, oEmbed, Debug) — small breadth. No official Meta-published MCP server found; only a community project (token-pilot) surfaced in registry hints.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "app_review"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "app_review",
      "confidence": 0.78
    },
    "cost_usd": 0.289
  },
  {
    "id": 40,
    "name": "SendGrid",
    "category": "Marketing, Ads, Email and Social",
    "hint": "sendgrid.com",
    "one_liner": "SendGrid (Twilio) is a transactional and marketing email platform with a REST API for sending email, managing templates, contacts, and campaigns.",
    "auth_methods": [
      "api_key"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://www.twilio.com/docs/sendgrid/api-reference/how-to-use-the-sendgrid-v3-api/authentication",
    "mcp": {
      "status": "community",
      "url": "https://github.com/Choppaaahh/sendgrid-mcp-secure"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.74,
    "agreement": 0.81,
    "grounding_rate": 0.67,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "apis_guru_spec": [
          "api_key"
        ],
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "basic",
          "bearer_token"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "large",
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://www.twilio.com/docs/sendgrid/api-reference/how-to-use-the-sendgrid-v3-api/authentication",
        "quote": "include an Authorization header with the value Bearer <YOUR_API_KEY_HERE> in your request.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.twilio.com/en-us/sendgrid",
        "quote": "Sign up for a free trial—no credit card required.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.twilio.com/docs/sendgrid/for-developers/sending-email/api-getting-started",
        "quote": "Create an API Key.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://api.sendgrid.com/v3/templates",
        "quote": "{\"errors\":[{\"field\":null,\"message\":\"authorization required\"}]}",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/openapi.json",
        "quote": "334 endpoints (apis.guru aggregated OpenAPI spec for sendgrid.com)",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/Choppaaahh/sendgrid-mcp-secure",
        "quote": "io.github.Choppaaahh/sendgrid-mcp-secure (community MCP registry listing, not vendor-published)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/sendgrid",
        "quote": "Composio catalog: auth ['API_KEY'], 364 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 334 operations, securitySchemes ['api_key']",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.sendgrid.com/v3/templates",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"errors\":[{\"field\":null,\"message\":\"authorization required\"}]}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "SENDGRID",
      "tools": 364,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/sendgrid"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 334
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "SendGrid (now part of Twilio) has a self-serve signup flow leading to a free trial, then paid plans; docs page emphasizes \"free trial—no credit card required\" rather than a permanent free tier, so classified as self_serve_trial rather than self_serve_free. API key is generated from account settings (app.sendgrid.com/settings/api_keys) and used as a Bearer token in the Authorization header — no OAuth2 flow is documented for the core v3 API. REST API is large (~334 endpoints per apis.guru spec). No official vendor MCP server found; only community MCP implementations exist in the registry. Unauthenticated probe against api.sendgrid.com/v3/templates confirms API key requirement (401 with generic \"authorization required\" error, no WWW-Authenticate scheme header).",
    "pass1": {
      "auth_methods": [
        "bearer_token",
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.72
    },
    "cost_usd": 0.281
  },
  {
    "id": 41,
    "name": "Shopify",
    "category": "Ecommerce",
    "hint": "shopify.dev",
    "one_liner": "Shopify is an ecommerce platform whose Admin/Storefront APIs let developers build apps and integrations against merchant stores, authenticated via OAuth (or static access tokens for custom apps).",
    "auth_methods": [
      "api_key",
      "oauth2",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest_and_graphql",
    "api_breadth": "large",
    "docs_url": "https://shopify.dev/docs/apps/build/authentication-authorization",
    "mcp": {
      "status": "official",
      "url": "https://shopify.dev/docs/apps/build/devmcp"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.95,
    "agreement": 1.0,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2",
          "other"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest_and_graphql",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://shopify.dev/docs/apps/build/authentication-authorization",
        "quote": "The merchant is redirected to Shopify to approve access, then back to your app with a code that your app exchanges for an access token.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://shopify.dev/docs/apps/build/authentication-authorization",
        "quote": "Your app authenticates as itself with its client ID and client secret, and there's no merchant approval step.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://shopify.dev/docs/apps/build/authentication-authorization",
        "quote": "The credential your code sends on each GraphQL Admin API request, in the `X-Shopify-Access-Token` header",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://shopify.dev/docs/api/admin-rest",
        "quote": "The REST Admin API is a legacy API as of October 1, 2024. Starting April 1, 2025, all new public apps must be built exclusively with the GraphQL Admin API.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://shopify.dev/docs/api/admin-graphql",
        "quote": "The Admin API lets you build apps and integrations that extend and enhance the Shopify admin.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.shopify.com/partners",
        "quote": "Become a partner",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://shopify.dev/docs/apps/build/devmcp",
        "quote": "If you prefer MCP, you can connect to Shopify's developer resources through the Dev MCP server. The server runs locally and doesn't require authentication.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://shopify.dev/docs/api/admin-graphql",
        "quote": "https://{store_name}.myshopify.com/admin/api/2026-07/graphql.json",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/shopify",
        "quote": "Composio catalog: auth ['API_KEY', 'OAUTH2', 'S2S_OAUTH2'], 407 tools",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "SHOPIFY",
      "tools": 407,
      "auth": [
        "api_key",
        "oauth2",
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/shopify"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 200,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Free Partner account + free development store give self-serve API credentials (OAuth access tokens or custom-app \"Admin API access token\") for building/testing immediately, no approval needed for that. Public App Store listing does require app review, but that's a distribution gate, not a credential gate, so access is scored self_serve_free rather than admin_approval. REST Admin API is now legacy (frozen at 2025-10 version, no new public apps allowed to use it since 2025-04-01) while GraphQL Admin API is the actively developed surface — flagged as a partial caveat inside api_type rather than a blocker since GraphQL fully covers the same functionality. Access tokens are sent in a custom `X-Shopify-Access-Token` header (not standard OAuth Bearer syntax), grouped here under api_key/oauth2 rather than adding \"other\". Vendor also publishes an official local \"Dev MCP server\" for docs/API discovery (no auth required) in addition to several community MCP servers seen in the registry hints.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.78
    },
    "cost_usd": 0.282
  },
  {
    "id": 42,
    "name": "WooCommerce",
    "category": "Ecommerce",
    "hint": "woocommerce.com/document/woocommerce-rest-api",
    "one_liner": "WooCommerce is an open-source WordPress ecommerce plugin exposing a REST API for managing products, orders, customers, and store data on self-hosted stores.",
    "auth_methods": [
      "api_key",
      "basic",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://woocommerce.com/document/woocommerce-rest-api/",
    "mcp": {
      "status": "community",
      "url": "https://github.com/AmitGurbani/mcp-server-woocommerce"
    },
    "verdict": "green",
    "score": 95,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.91,
    "agreement": 0.96,
    "grounding_rate": 0.88,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "basic",
          "other"
        ],
        "pass1": [
          "api_key",
          "basic",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://woocommerce.com/document/woocommerce-rest-api/",
        "quote": "The WooCommerce REST API uses a key system to control access.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://woocommerce.github.io/woocommerce-rest-api-docs/",
        "quote": "You may use HTTP Basic Auth by providing the REST API Consumer Key as the username and the REST API Consumer Secret as the password.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://woocommerce.github.io/woocommerce-rest-api-docs/",
        "quote": "You must use OAuth 1.0a 'one-legged' authentication to ensure REST API credentials cannot be intercepted.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://woocommerce.com/document/woocommerce-rest-api/",
        "quote": "To create or manage keys for a specific WordPress user: 1. Go to WooCommerce > Settings > Advanced > REST API. 2. Select Create an API key or Add Key.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://woocommerce.com/document/woocommerce-rest-api/",
        "quote": "The Consumer Secret is shown only once. Copy and store it in a safe place before leaving the page.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://woocommerce.com/document/woocommerce-rest-api/",
        "quote": "The WooCommerce REST API uses a key system to control access.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://woocommerce.com/document/woocommerce-rest-api/",
        "quote": "To create or manage keys for a specific WordPress user: 1. Go to WooCommerce > Settings > Advanced > REST API. 2. Select Create an API key or Add Key.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/AmitGurbani/mcp-server-woocommerce",
        "quote": "WooCommerce is a registered trademark of Automattic Inc. This project is not affiliated with, endorsed by, or sponsored by Automattic Inc.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://woocommerce.com/wp-json/wc/v3/products",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"code\":\"woocommerce_rest_cannot_view\",\"message\":\"Sorry, you cannot list resources.\",\"data\":{\"status\":401}}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "WooCommerce is a self-hosted WordPress plugin, not a hosted SaaS with a signup flow; \"self_serve_free\" means any store owner (on their own free WooCommerce install) can generate Consumer Key/Secret instantly from wp-admin with no vendor approval. Auth is via Consumer Key/Secret used either as HTTP Basic Auth (HTTPS) or OAuth 1.0a one-legged signing (non-HTTPS) — classified as api_key + basic + other since the schema has no oauth1 option. Endpoint count not stated in docs but covers ~20 resource groups (products, orders, customers, coupons, refunds, reports, webhooks, etc.) with CRUD+batch, consistent with \"medium\" breadth. No official vendor MCP server found; only community projects exist.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "basic",
        "other"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.295
  },
  {
    "id": 43,
    "name": "BigCommerce",
    "category": "Ecommerce",
    "hint": "developer.bigcommerce.com",
    "one_liner": "BigCommerce is an ecommerce platform offering REST and GraphQL APIs for store/catalog/order management and storefront/checkout operations.",
    "auth_methods": [
      "bearer_token",
      "jwt",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest_and_graphql",
    "api_breadth": "large",
    "docs_url": "https://developer.bigcommerce.com/docs/start",
    "mcp": {
      "status": "community",
      "url": "https://docs.bigcommerce.com/developer/api-reference/mcp/overview"
    },
    "verdict": "green",
    "score": 98,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.8,
    "agreement": 0.93,
    "grounding_rate": 0.6,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_trial vs self_serve_free)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "bearer_token",
          "jwt",
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_trial"
      },
      "api_type": {
        "pass2": "rest_and_graphql",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.bigcommerce.com/docs/start/authentication",
        "quote": "Most of our REST endpoints and GraphQL Admin API endpoints use the X-Auth-Token header to authenticate to BigCommerce servers.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.bigcommerce.com/docs/start/authentication",
        "quote": "BigCommerce no longer issues legacy API Accounts to new stores.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.bigcommerce.com/docs/start",
        "quote": "Sign up for a free BigCommerce trial store to test API calls and build integrations without affecting live data.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.bigcommerce.com/docs/start",
        "quote": "REST Management API, REST Storefront API, GraphQL Storefront API",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.bigcommerce.com/developer/api-reference/mcp/overview",
        "quote": "The BigCommerce MCP server lets AI agents interact with a BigCommerce storefront using purpose-built commerce tools.",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Free trial store gives immediate self-serve OAuth credentials (client_id/secret/access_token via X-Auth-Token) for both REST Management API and GraphQL Admin/Storefront APIs. Legacy basic-auth API accounts are deprecated (no longer issued to new stores), so 'basic' was excluded. JWT auth applies to Customer Login/Current Customer and GraphQL Storefront/Payments APIs. Official MCP server is storefront-shopping-focused (search/cart/checkout), not full admin API coverage, but it exists and is vendor-published.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_trial",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.301
  },
  {
    "id": 44,
    "name": "Salesforce Commerce Cloud",
    "category": "Ecommerce",
    "hint": "developer.salesforce.com/docs/commerce",
    "one_liner": "Salesforce Commerce Cloud (B2C Commerce) is an enterprise ecommerce platform whose OCAPI/SCAPI REST APIs use OAuth2 client-credentials auth via Salesforce Account Manager, but a usable sandbox requires being an existing customer or an approved partner rather than self-serve signup.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "partner_gated",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developer.salesforce.com/developer-centers/commerce-cloud",
    "mcp": {
      "status": "none",
      "url": null
    },
    "verdict": "red",
    "score": 53,
    "blocker": "partner_gate",
    "model_verdict": "red",
    "confidence": 0.65,
    "agreement": 0.94,
    "grounding_rate": 0.29,
    "needs_human": true,
    "needs_human_reasons": [
      "only 28% of quotes grounded in cited pages",
      "gated/no-API finding with weak grounding needs a human eye"
    ],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "apis_guru_spec": [
          "api_key"
        ],
        "pass2": [
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "jwt",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "partner_gated",
        "pass1": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "apis_guru_spec": "small",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "pass2": "none",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-commerce-ocapi/oauth.html",
        "quote": "All client applications that access the Open Commerce API must be registered through the Account Manager.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.salesforce.com/docs/commerce/commerce-api/guide/authorization-for-admin-apis.html",
        "quote": "provide a credentials string in the HTTP header that is composed of your client ID, followed by a colon (:), followed by your client secret (password)",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://help.salesforce.com/s/articleView?id=000393797&language=en_US&type=1",
        "quote": "Partners must first join the AppExchange Partner Program under the 'B2C Commerce' Partner Category.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://help.salesforce.com/s/articleView?id=000393797&language=en_US&type=1",
        "quote": "The Trial Sandbox/Environment is created for B2C Commerce ISV prospects",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://help.salesforce.com/s/articleView?id=000393797&language=en_US&type=1",
        "quote": "Request your Trial from this link",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://developer.salesforce.com/developer-centers/commerce-cloud",
        "quote": "docs_page signal check: no official or community MCP server listed in registry lookups for Salesforce Commerce Cloud",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://help.salesforce.com/s/articleView?id=000393797&language=en_US&type=1",
        "quote": "On-Demand Sandboxes operate on a usage-based pricing model. Partners receive annual free credits based on their partnership tier",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/salesforce.local/einstein/2.0.1/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 45 operations, securitySchemes ['bearer_token']",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": true,
      "endpoints": 45
    },
    "probe": {
      "status": 405,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "SFCC exposes two REST API families: legacy OCAPI (deprecated) and current SCAPI (Shopper, Data/Admin APIs), both authenticated via OAuth2 client-credentials grant against Salesforce Account Manager (client ID + secret -> bearer token). There is no self-serve signup: a working sandbox requires either being an existing customer (Order Form) or an approved AppExchange \"B2C Commerce\" partner, or submitting a vetted trial-sandbox request form as an ISV prospect (up to 90 days). developer.salesforce.com blocked direct WebFetch (403/bot protection) for several pages, so some auth-page quotes are corroborated via search-engine extraction rather than a direct fetch; access/blocker evidence was independently verified via a successful direct fetch of the help.salesforce.com sandbox-access article. api_breadth is inferred as \"large\" from the combined OCAPI Data API + SCAPI Shopper/Admin API surface (many resource groups), not from a directly cited endpoint count — treat with moderate confidence. No MCP server (official or community) was found in registry/GitHub lookups.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "jwt"
      ],
      "access": "partner_gated",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "red",
      "blocker": "partner_gate"
    },
    "pass2": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "partner_gated",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "red",
      "blocker": "partner_gate",
      "confidence": 0.68
    },
    "cost_usd": 0.485
  },
  {
    "id": 45,
    "name": "Magento (Adobe Commerce)",
    "category": "Ecommerce",
    "hint": "developer.adobe.com/commerce",
    "one_liner": "Magento (Adobe Commerce) is a self-hosted/cloud ecommerce platform exposing REST and GraphQL APIs for catalog, sales, customer, and storefront operations.",
    "auth_methods": [
      "api_key",
      "basic",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest_and_graphql",
    "api_breadth": "small",
    "docs_url": "https://developer.adobe.com/commerce/webapi/rest/",
    "mcp": {
      "status": "community",
      "url": "https://github.com/juan-cinto-infracommerce/magento-cloud"
    },
    "verdict": "yellow",
    "score": 91,
    "blocker": "other",
    "model_verdict": "yellow",
    "confidence": 0.81,
    "agreement": 0.84,
    "grounding_rate": 0.86,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (partner_gated vs self_serve_free)"
    ],
    "sources": {
      "auth_methods": {
        "apis_guru_spec": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "basic",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "other"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "partner_gated"
      },
      "api_type": {
        "pass2": "rest_and_graphql",
        "apis_guru_spec": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "apis_guru_spec": "small",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.adobe.com/commerce/webapi/rest/",
        "quote": "Third-party applications authenticate with OAuth 1.0a",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.adobe.com/commerce/webapi/rest/",
        "quote": "Mobile applications authenticate using tokens",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.adobe.com/commerce/webapi/rest/",
        "quote": "Administrators and customers are authenticated with login credentials",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.adobe.com/commerce/webapi/rest/",
        "quote": "you must use Adobe Identity Management Service (IMS) to authenticate your requests",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.adobe.com/commerce/webapi/get-started/",
        "quote": "You must register a web service on Admin. Use the following general steps to set up Magento to enable web services.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developer.adobe.com/commerce/webapi/graphql/",
        "quote": "GraphQL is a data query language and runtime that revolutionizes how you build and consume APIs",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developer.adobe.com/commerce/webapi/rest/",
        "quote": "io.github.juan-cinto-infracommerce/magento-cloud",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/adobe.com/aem/3.7.1-pre.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 48 operations, securitySchemes ['basic']",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": true,
      "endpoints": 48
    },
    "probe": {
      "status": 200,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Magento/Adobe Commerce is self-hosted (or Adobe-managed Cloud Service) ecommerce software, not a hosted SaaS API you sign up for centrally. Credentials (OAuth 1.0a integration tokens, admin/customer tokens, or IMS OAuth2 for Commerce as a Cloud Service) are generated by the store's own admin after installing/provisioning a Magento Open Source (free) or Adobe Commerce (licensed) instance — there's no vendor-hosted free dev sandbox to sign up for. Rated yellow-leaning via blocker=other because the practical entry barrier is standing up/owning a store instance, not credential gating itself. API surface is large: dozens of REST resource groups covering catalog, sales, customers, carts, inventory, etc., plus a full GraphQL storefront API. MCP support is community-only (a third-party \"magento-cloud\" server), no official Adobe-published MCP server found.",
    "pass1": {
      "auth_methods": [
        "bearer_token",
        "other"
      ],
      "access": "partner_gated",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "partner_gate"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "oauth2",
        "api_key",
        "bearer_token",
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "other",
      "confidence": 0.68
    },
    "cost_usd": 0.317
  },
  {
    "id": 46,
    "name": "Squarespace",
    "category": "Ecommerce",
    "hint": "developers.squarespace.com",
    "one_liner": "Squarespace is a website/ecommerce platform whose Commerce APIs let developers manage orders, inventory, products and transactions via REST endpoints authenticated with either a site-generated API key or an OAuth app.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developers.squarespace.com/commerce-apis/authentication-and-permissions",
    "mcp": {
      "status": "none",
      "url": null
    },
    "verdict": "yellow",
    "score": 68,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.86,
    "agreement": 1.0,
    "grounding_rate": 0.83,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "small",
        "pass1": "small"
      },
      "mcp": {
        "pass2": "none",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.squarespace.com/commerce-apis/authentication-and-permissions",
        "quote": "a generated API key or start the OAuth process with Squarespace to become a registered OAuth client",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.squarespace.com/commerce-apis/oauth",
        "quote": "We will review your registration and respond with your_client_id and your_client_secret as soon as possible.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.squarespace.com/commerce-apis/oauth",
        "quote": "Before a client can make Squarespace API calls, the client must be registered with Squarespace as an OAuth client. Start the Oauth client process here.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://api.squarespace.com/1.0/commerce/orders",
        "quote": "\"type\" : \"AUTHORIZATION_ERROR\",   \"subtype\" : null,   \"message\" : \"You are not authorized to do that.\"",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.squarespace.com/",
        "quote": "Start building",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.squarespace.com/commerce-apis/authentication-and-permissions",
        "quote": "Squarespace's Commerce Advanced",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.squarespace.com/1.0/commerce/orders",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {   \"type\" : \"AUTHORIZATION_ERROR\",   \"subtype\" : null,   \"message\" : \"You are not authorized to do that.\",   \"details\" : null,   \"contextId\" : \"SLEAPLOWDEYSHEISWUST\" }",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Two auth paths documented on the same page: (1) an API key generated in-account under Settings > Advanced > Developer API Keys, which the docs say requires the Commerce Advanced plan; (2) an OAuth client, which requires submitting an app registration (name, icon, redirect URIs, ToS/privacy links) that Squarespace manually reviews before issuing client_id/secret — i.e. not instantly self-serve. So access is gated both by a paid Commerce plan (for API keys) and by manual review (for OAuth apps); picked paid_plan as the primary blocker since it's the more direct/common path, but app_review is a secondary real constraint for the OAuth route. No official or community MCP server found (registry and GitHub search both empty). api_breadth marked \"small\" based on general knowledge of the Commerce API surface (orders, inventory, products, transactions, profiles, webhooks) — not independently verified by counting endpoints in this pass; treat with lower confidence.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.68
    },
    "cost_usd": 0.269
  },
  {
    "id": 47,
    "name": "Ecwid",
    "category": "Ecommerce",
    "hint": "api-docs.ecwid.com",
    "one_liner": "Ecwid is a hosted ecommerce platform (part of Lightspeed) offering a REST API to manage products, orders, customers, and storefront data.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://docs.ecwid.com/api-reference",
    "mcp": {
      "status": "community",
      "url": "io.usefulapi/ecwid"
    },
    "verdict": "green",
    "score": 95,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.81,
    "agreement": 0.93,
    "grounding_rate": 0.67,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs self_serve_free)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://raw.githubusercontent.com/Ecwid/ecwid-api-docs/master/includes/_authentication.md",
        "quote": "Ecwid supports oAuth2 protocol to provide applications with an easy way to authenticate and access store data on behalf of the user with access tokens.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.ecwid.com/get-started/make-your-first-api-request",
        "quote": "If you customize your own store, however, you can skip OAuth and easily get an access token for your store.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.ecwid.com/get-started/make-your-first-api-request",
        "quote": "Public token allows only public data to be received and is safe to use in public code",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://raw.githubusercontent.com/Ecwid/ecwid-api-docs/master/includes/_authentication.md",
        "quote": "Both types of access tokens do not expire, so you can use them as long as the application is installed in a merchant's store.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://api-docs.ecwid.com/reference/rest-api",
        "quote": "Ecwid API is a RESTful API with oAuth2 authentication.",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://registry.modelcontextprotocol.io",
        "quote": "io.usefulapi/ecwid",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Ecwid REST API (docs.ecwid.com / api-docs.ecwid.com redirects there). Two credential paths: (1) OAuth2 authorization-code flow for public apps distributed to merchants, requiring the merchant to install the app and grant scopes — no partner gate or app-store review documented for using the API itself; (2) for a developer's own store, you can skip OAuth entirely and copy a static secret/public access token directly from the app dashboard (my.ecwid.com/#develop-apps) after free signup — functions like a personal API key. This makes it self-serve free. api_breadth is an estimate (products, orders, customers, categories, discounts, shipping/tax, webhooks, storefront) — did not enumerate the full endpoint list within budget, so treat as medium with moderate confidence. MCP is community-only (io.usefulapi/ecwid), not vendor-published.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.302
  },
  {
    "id": 48,
    "name": "Gumroad",
    "category": "Ecommerce",
    "hint": "gumroad.com/api",
    "one_liner": "Gumroad is an ecommerce platform for creators to sell digital products, courses, and memberships directly to customers.",
    "auth_methods": [
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://gumroad.com/api",
    "mcp": {
      "status": "community",
      "url": "https://github.com/rmarescu/gumroad-mcp"
    },
    "verdict": "green",
    "score": 91,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.8,
    "agreement": 1.0,
    "grounding_rate": 0.57,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "small"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "api_type",
        "url": "https://rollout.com/integration-guides/gumroad/api-essentials",
        "quote": "The Gumroad OAuth API is based around REST. We return JSON for every request, including errors.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://gumkit.app/blog/gumroad-api-access-token/",
        "quote": "there is no plan to pick, no scope checklist, no approval queue",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://gumkit.app/blog/gumroad-api-access-token/",
        "quote": "Generating one takes about two minutes and lives entirely inside your own Gumroad settings.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/rmarescu/gumroad-mcp",
        "quote": "A Model Context Protocol (MCP) server implementation for Gumroad API",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.gumroad.com/v2/products",
        "quote": "Bearer realm=\"Doorkeeper\", error=\"invalid_token\", error_description=\"The access token is invalid\"",
        "grounded": "unreachable"
      },
      {
        "field": "auth_methods",
        "url": "https://rollout.com/integration-guides/gumroad/api-essentials",
        "quote": "Credentials Issued: Upon creation, you receive an Application ID and Application Secret... Use the \"Generate access token\" button to obtain your access token.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://rollout.com/integration-guides/gumroad/api-essentials",
        "quote": "provides access to these resources: Products, Offer codes, Variants and custom fields, User public information, Sales and subscribers, License verification",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/keithah/gumroad-mcp",
        "quote": "MCP server for Gumroad API - lookup subscriptions, sales, and products",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/gumroad",
        "quote": "Composio catalog: auth ['OAUTH2'], 7 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.gumroad.com/v2/products",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Bearer realm=\"Doorkeeper\", error=\"invalid_token\", error_description=\"The access token is invalid\"; body: ",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "GUMROAD",
      "tools": 7,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/gumroad"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Bearer realm=\"Doorkeeper\", error=\"invalid_token\", error_description=\"The access token is invalid\"",
      "inferred": "bearer_token"
    },
    "notes": "Gumroad's official vendor docs page (gumroad.com/api) is a JS-rendered SPA that couldn't be fetched as static text, so primary evidence comes from Gumroad's own API endpoint (Doorkeeper OAuth realm) plus a detailed third-party integration guide (Rollout) and a token-creation walkthrough (gumkit.app) that both describe the same self-serve flow: log into any free Gumroad account, go to Settings > Advanced, create an application (get client_id/secret for OAuth2) or click \"Generate access token\" for a personal bearer token — no approval queue. No official Gumroad-published MCP server found; multiple community/open-source MCP wrappers exist (rmarescu/gumroad-mcp, keithah/gumroad-mcp). API is small (~6 resource groups: products, offer codes, sales, subscribers, variants/custom fields, license verification).",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.8
    },
    "cost_usd": 0.378
  },
  {
    "id": 49,
    "name": "Amazon Selling Partner",
    "category": "Ecommerce",
    "hint": "developer-docs.amazon.com/sp-api",
    "one_liner": "Amazon Selling Partner API (SP-API) lets developers programmatically manage Amazon seller/vendor operations — orders, inventory, listings, pricing, fulfillment, and reports.",
    "auth_methods": [
      "bearer_token",
      "oauth2"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developer-docs.amazon.com/sp-api",
    "mcp": {
      "status": "community",
      "url": "https://github.com/amzn/selling-partner-api-samples"
    },
    "verdict": "yellow",
    "score": 78,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.85,
    "agreement": 0.93,
    "grounding_rate": 0.86,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (admin_approval vs paid_plan)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "admin_approval"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "pass2": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer-docs.amazon/sp-api/docs/connecting-to-the-selling-partner-api",
        "quote": "Use this for calling operations that require authorization from a selling partner.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer-docs.amazon/sp-api/docs/connecting-to-the-selling-partner-api",
        "quote": "The LWA access token expires one hour after it is issued.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer-docs.amazon/sp-api/docs/sp-api-registration-overview",
        "quote": "You must have a professional selling account to develop SP-API private seller applications. Individual accounts are not eligible.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer-docs.amazon/sp-api/docs/registering-your-application",
        "quote": "You must be a primary account user to complete registration.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer-docs.amazon/sp-api/docs/self-authorization",
        "quote": "You can self-authorize your application in draft status because there is no reason to publish a private application.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developer-docs.amazon/sp-api/docs/registering-your-application",
        "quote": "As of April 2022, public and private applications are subject to authorization limits and restrictions.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/amzn/selling-partner-api-samples",
        "quote": "Explore practical examples and sample implementations in the Selling Partner API Samples repository.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://sellingpartnerapi-na.amazon.com/orders/v0/orders",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: {   \"errors\": [     {       \"code\": \"Unauthorized\",       \"message\": \"Access to requested resource is denied.\",       \"details\": \"Access token is missing in the request header.\"     }   ] }",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": "bearer_token"
    },
    "notes": "SP-API uses Login with Amazon (LWA) OAuth2 tokens (bearer, x-amz-access-token header); the older mandatory AWS SigV4 request signing was deprecated in 2023. There is no free/anonymous dev sandbox: private (self-authorized) seller apps require a Professional Selling Plan account ($39.99/mo, individual accounts explicitly ineligible), and private vendor apps require an existing (invite-only) Vendor Central account; public apps additionally require Appstore listing/review. API surface spans dozens of sub-APIs (Orders, Catalog, Listings, Feeds, Reports, FBA Inventory/Inbound/Outbound, Pricing, Vendor Orders/Shipping/Invoices, Notifications, etc.), totaling well over 300 operations. An MCP server (sp-api-dev-mcp) is published from Amazon's own amzn GitHub org / npm scope @amazon-sp-api-release, treated here as official though I could not fetch its README directly to fully confirm maintainer status (moderate confidence on that specific point).",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "app_review"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.7
    },
    "cost_usd": 0.391
  },
  {
    "id": 50,
    "name": "fanbasis",
    "category": "Ecommerce",
    "hint": "fanbasis.com",
    "one_liner": "Commas (formerly FanBasis) is a payments/checkout and payouts platform for creators and digital-product sellers, positioned as a Stripe alternative with embedded checkout, subscriptions, and BNPL.",
    "auth_methods": [
      "api_key"
    ],
    "access": "partner_gated",
    "api_type": "rest",
    "api_breadth": "unknown",
    "docs_url": "https://commasdocs.com/",
    "mcp": {
      "status": "none",
      "url": null
    },
    "verdict": "red",
    "score": 50,
    "blocker": "partner_gate",
    "model_verdict": "yellow",
    "confidence": 0.76,
    "agreement": 0.94,
    "grounding_rate": 0.8,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs partner_gated)",
      "formula verdict red, model said yellow"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key"
        ]
      },
      "access": {
        "pass2": "partner_gated",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "unknown",
        "pass1": "unknown"
      },
      "mcp": {
        "pass2": "none",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://dev-docs.fanbasis.com/",
        "quote": "Sign in to access API Docs",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://commas.com/",
        "quote": "Embedded checkouts, multi-rail payouts, APIs and SDKs. Everything you'd replace Stripe with, plus BNPL, recovery and lower effective rates.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://apidocs.fan/",
        "quote": "Commas API Reference",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://fanbasis.com/api",
        "quote": "301 Moved Permanently",
        "grounded": "grounded"
      },
      {
        "field": "one_liner",
        "url": "https://www.fanbasis.com/",
        "quote": "301 Moved Permanently",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 301,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "FanBasis has rebranded to \"Commas\" — fanbasis.com and www.fanbasis.com both 301-redirect to commas.com. The company positions itself as a Stripe-alternative payments/checkout platform for creators, with \"APIs and SDKs\" mentioned in enterprise-facing marketing copy on commas.com. An API reference exists (commasdocs.com / apidocs.fan / fbnewapi.netlify.app all resolve to the same Mintlify-style doc site), but it is a JS-rendered SPA that could not be fully read via fetch (returned only \"Commas API Reference\" placeholder text), so specific auth-flow and endpoint-count details could not be verified with verbatim quotes. A separate docs subdomain, dev-docs.fanbasis.com (\"FanBasis API Docsv3\"), is password-gated behind a login screen (\"Sign in to access API Docs\"), indicating documentation/API access is not fully open to the public. Community references (npm @fanbasis/checkout-sdk, unverified secondary summaries) suggest API keys are created via an \"Account > API Keys\" dashboard section and SDKs exist for Node/Python/PHP/Ruby, but these were not confirmed against a primary source page within the search/fetch budget. Given the enterprise-sales framing (\"Everything you'd replace Stripe with\") and gated docs, classified as partner_gated/yellow with low-moderate confidence — a follow-up pass with a JS-rendering fetch (or manual browsing of commasdocs.com) is recommended to confirm auth method details and endpoint breadth.",
    "pass1": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "undocumented"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "partner_gated",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "partner_gate",
      "confidence": 0.4
    },
    "cost_usd": 0.403
  },
  {
    "id": 51,
    "name": "DataForSEO",
    "category": "Data, SEO and Scraping",
    "hint": "docs.dataforseo.com",
    "one_liner": "DataForSEO is a REST API platform providing SEO, SERP, keyword, backlink, and business-data scraping/analytics data for developers.",
    "auth_methods": [
      "basic"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://docs.dataforseo.com/v3/",
    "mcp": {
      "status": "official",
      "url": "https://mcp.dataforseo.com/v3/mcp"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.76,
    "agreement": 1.0,
    "grounding_rate": 0.43,
    "needs_human": true,
    "needs_human_reasons": [
      "only 43% of quotes grounded in cited pages"
    ],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "basic"
        ],
        "unauth_probe": [
          "basic"
        ],
        "pass2": [
          "basic"
        ],
        "pass1": [
          "basic"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.dataforseo.com/v3/auth/?bash",
        "quote": "DataForSEO is using the Basic Authentication, which makes it possible to call our APIs with almost any programming language.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.dataforseo.com/v3/auth/?bash",
        "quote": "Create a free account with DataForSEO",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.dataforseo.com/v3/auth/?bash",
        "quote": "the API password is generated automatically by DataForSEO and is different from your account password",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://dataforseo.com/pricing",
        "quote": "With DataForSEO you pay only for the individual services you consume.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.dataforseo.com/v3/",
        "quote": "Review the kickstart guide to APIs",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://docs.composio.dev/toolkits/dataforseo",
        "quote": "312",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://dataforseo.com/model-context-protocol",
        "quote": "Empower AI integration with DataForSEO MCP",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/dataforseo",
        "quote": "Composio catalog: auth ['BASIC'], 312 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.dataforseo.com/v3/appendix/user_data",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Basic realm=\"DataForSEO REST API\"; body: {\"status_code\":40100,\"status_message\":\"You are not Authorized to Access this Resource. Your Login Information Here: https:\\/\\/app.dataforseo.com\\/login .\",\"time\":\"0 sec.\",\"cost\":0,\"tasks_count\":0,\"tas",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://mcp.dataforseo.com/v3/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "DATAFORSEO",
      "tools": 312,
      "auth": [
        "basic"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/dataforseo"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Basic realm=\"DataForSEO REST API\"",
      "inferred": "basic"
    },
    "notes": "Free account signup yields Basic Auth login/password (API password auto-generated, distinct from account password) via API Access dashboard; pay-as-you-go for live data ($50 min payment) but sandbox/free unlimited trial mode is documented separately for testing. Official MCP server published by vendor (GitHub Apr 2025, npm May 2025) at https://mcp.dataforseo.com/v3/mcp, using same Basic Auth credentials. Composio wraps it (not the official MCP) with 312 tools/endpoints across SERP, Keywords, Backlinks, OnPage, Business Data, Domain Analytics, Content Analysis products, indicating large breadth.",
    "pass1": {
      "auth_methods": [
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.326
  },
  {
    "id": 52,
    "name": "SE Ranking",
    "category": "Data, SEO and Scraping",
    "hint": "seranking.com/api",
    "one_liner": "SE Ranking is an SEO/competitor-research platform offering a Data API and Project API for keyword, backlink, rank-tracking and site-audit data.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://seranking.com/api/data/getting-started/",
    "mcp": {
      "status": "official",
      "url": "https://api.seranking.com/mcp"
    },
    "verdict": "yellow",
    "score": 77,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.54,
    "agreement": 0.84,
    "grounding_rate": 0.0,
    "needs_human": true,
    "needs_human_reasons": [
      "only 0% of quotes grounded in cited pages"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_trial vs paid_plan)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "self_serve_trial",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "unknown",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://seranking.com/api/data/getting-started/",
        "quote": "Include an `Authorization` header in your request, with the value `Token YOUR_API_KEY`.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://seranking.com/api/data/getting-started/",
        "quote": "pass the key as a URL query parameter named `apikey`.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://seranking.com/api/integrations/mcp/",
        "quote": "select SE Ranking and click Connect to authorize",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://seranking.com/api/how-to-get-api/",
        "quote": "All Essential, Pro, Business, Core, Growth, and Enterprise plans include Data API access with a monthly credit allowance.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://seranking.com/api/how-to-get-api/",
        "quote": "The Project API is available on every current subscription plan: Essential, Pro, Business, Core, Growth, and Enterprise. There is nothing extra to buy.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://seranking.com/api/data/getting-started/",
        "quote": "The base URL for all requests is `https://api.seranking.com`.",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://seranking.com/api/integrations/mcp/",
        "quote": "a standardized interface that allows any compatible AI model or agent to access your SE Ranking data in a simple and secure way",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://seranking.com/api/integrations/mcp/",
        "quote": "claude mcp add --transport http se-ranking https://api.seranking.com/mcp",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://seranking.com/api/how-to-get-api/",
        "quote": "API credentials are available to paid subscription plan holders only",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api4.seranking.com/sites",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: {\"message\":\"No token\"}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://api.seranking.com/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": "bearer_token"
    },
    "notes": "Single API key (via Authorization: Token header or apikey query param) authenticates both the Data API and Project API; no free/trial tier documented, requires an active paid subscription (Essential+). Vendor also publishes an official open-source MCP server (MIT license, hosted at api.seranking.com/mcp) exposing 160+ tools, connectable via OAuth for clients like Claude Desktop/Code — but the underlying account still needs a paid plan since MCP calls draw on the same API credits.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "bearer_token",
        "oauth2"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.82
    },
    "cost_usd": 0.298
  },
  {
    "id": 53,
    "name": "Ahrefs",
    "category": "Data, SEO and Scraping",
    "hint": "ahrefs.com/api",
    "one_liner": "Ahrefs is an SEO and backlink/keyword research platform that exposes a REST API v3 (Site Explorer, Keywords Explorer, Rank Tracker, Site Audit, etc.) and an official MCP server for AI agent access.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://docs.ahrefs.com/docs/api/reference/introduction",
    "mcp": {
      "status": "community",
      "url": "https://github.com/ahrefs/ahrefs-mcp-server"
    },
    "verdict": "yellow",
    "score": 71,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.75,
    "agreement": 1.0,
    "grounding_rate": 0.5,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "unknown",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.ahrefs.com",
        "quote": "Implement OAuth 2.0 authorization",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://help.ahrefs.com/en/articles/6559232-about-api-v3-for-enterprise-plan",
        "quote": "Using API v3 from any of the above methods is possible for Lite and higher subscription plans",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/ahrefs/ahrefs-mcp-server",
        "quote": "Official Ahrefs MCP Server",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://help.ahrefs.com/en/articles/6559232-about-api-v3-for-enterprise-plan",
        "quote": "Using API v3 from any of the above methods is possible for Lite and higher subscription plans",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.ahrefs.com/docs/api/reference/introduction",
        "quote": "Authorization: Bearer YOUR_API_KEY",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.ahrefs.com/docs/api/reference/introduction",
        "quote": "API v3 provides access to Site Explorer, Keywords Explorer, SERP Overview, Rank Tracker, Site Audit, Brand Radar, and management endpoints",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.ahrefs.com",
        "quote": "Connect Ahrefs data to AI assistants and agents to enhance their answers with real marketing insights",
        "grounded": "not_grounded"
      },
      {
        "field": "one_liner",
        "url": "https://docs.ahrefs.com",
        "quote": "Connect Ahrefs data to AI assistants and agents to enhance their answers with real marketing insights",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/ahrefs",
        "quote": "Composio catalog: auth ['API_KEY', 'OAUTH2'], 40 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.ahrefs.com/v3/site-explorer/metrics",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: [\"Error\",\"Forbidden\"]",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "AHREFS",
      "tools": 40,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/ahrefs"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "API v3 is REST, key-based (Bearer token in Authorization header), no free tier — requires Lite plan or higher (paid). Ahrefs Connect offers OAuth 2.0 for third-party developer integrations. Ahrefs also publishes an official hosted MCP server (api.ahrefs.com/mcp/mcp) available to Lite+ paid plans, using OAuth for client authorization. Older precomputed signal calling it \"enterprise_only\" appears outdated/imprecise — actual gate is any paid plan (Lite+), not Enterprise-only. Endpoint count/breadth not confirmed from a directly fetched reference page (several docs sub-pages 404'd for the fetch tool), so marked unknown rather than guessed.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.72
    },
    "cost_usd": 0.39499999999999996
  },
  {
    "id": 54,
    "name": "MrScraper",
    "category": "Data, SEO and Scraping",
    "hint": "docs.mrscraper.com",
    "one_liner": "MrScraper is an AI-powered and manual web scraping platform (scraper API, bulk scraping, residential proxy, web unblocker) with REST API, CLI, SDKs, and an official MCP server.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://docs.mrscraper.com/docs/getting-started/overview",
    "mcp": {
      "status": "official",
      "url": "https://mcp.mrscraper.com/mcp"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.85,
    "agreement": 1.0,
    "grounding_rate": 0.71,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://docs.mrscraper.com/docs/getting-started/billing",
        "quote": "The Free plan includes 100 tokens per month with no credit card required.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.mrscraper.com/docs/getting-started/quickstart",
        "quote": "Create a MrScraper account and obtain your API key from the Playground before following this guide.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.mrscraper.com/docs/getting-started/mcp-server",
        "quote": "API keys remain supported for clients without OAuth and carry full account authority",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.mrscraper.com/docs/getting-started/mcp-server",
        "quote": "MrScraper MCP is the official Model Context Protocol server for MrScraper.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.mrscraper.com/docs/getting-started/billing",
        "quote": "The Free plan includes 100 tokens per month with no credit card required.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.mrscraper.com/docs/getting-started/overview",
        "quote": "MrScraper is a web scraping platform offering both AI-powered and manual scraping capabilities",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://docs.composio.dev/toolkits/mrscraper",
        "quote": "tools: 11",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/mrscraper",
        "quote": "Composio catalog: auth ['API_KEY'], 11 tools",
        "grounded": "registry"
      },
      {
        "field": "mcp",
        "url": "https://mcp.mrscraper.com/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "MRSCRAPER",
      "tools": 11,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/mrscraper"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 200,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Free self-serve tier (100 tokens/month, no card) via app.mrscraper.com/playground gives an API key usable as query param (?token=), header (x-api-token), or Bearer token. Official hosted MCP server also supports OAuth 2.1 browser sign-in in addition to API-key fallback. REST API Reference documents endpoints; exact count not confirmed on vendor docs but Composio catalog lists 11 wrapped tools, suggesting a small surface (scraping/bulk-scraping/proxy/scheduling focused). api_breadth marked \"small\" with lower confidence since full endpoint count wasn't directly verified on docs.mrscraper.com.",
    "pass1": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.312
  },
  {
    "id": 55,
    "name": "Apify",
    "category": "Data, SEO and Scraping",
    "hint": "docs.apify.com",
    "one_liner": "Apify is a web scraping and automation platform where developers run/build \"Actors\" (scrapers/crawlers) via a large REST API, with an official MCP server for AI agent access.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://docs.apify.com/api/v2",
    "mcp": {
      "status": "official",
      "url": "https://mcp.apify.com"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.9,
    "agreement": 1.0,
    "grounding_rate": 0.8,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "official",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.apify.com/api/v2",
        "quote": "Using your token in the request header is more secure than using it as a URL parameter because URLs are often stored in browser history and server logs.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://apify.com/pricing",
        "quote": "Absolutely! We offer a free plan that lets you use most of the features of the Apify platform, but with certain limits. No credit card is required.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.apify.com/platform/integrations/mcp",
        "quote": "The Apify MCP server...allows AI applications and agents to interact with the Apify platform using Model Context Protocol (MCP).",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.apify.com/v2/acts",
        "quote": "{   \"error\": {     \"type\": \"token-not-provided\",     \"message\": \"Authentication token was not provided\"   } }",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.apify.com/platform/integrations/mcp",
        "quote": "OAuth (Recommended) - Sign in through your browser on first connection",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/apify",
        "quote": "Composio catalog: auth ['API_KEY'], 113 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.apify.com/v2/acts",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {   \"error\": {     \"type\": \"token-not-provided\",     \"message\": \"Authentication token was not provided\"   } }",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://mcp.apify.com",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "APIFY",
      "tools": 113,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/apify"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": "bearer_token"
    },
    "notes": "REST API secured by bearer token (Apify API token, found in Console under Integrations); token can also be passed as URL query param. MCP server (mcp.apify.com) additionally supports OAuth for AI agent connections. Free tier ($5/mo platform credit, no credit card) makes self-serve dev access straightforward. Large API surface covering Actors, datasets, key-value stores, tasks, webhooks, schedules, etc.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token",
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.9
    },
    "cost_usd": 0.219
  },
  {
    "id": 56,
    "name": "Firecrawl",
    "category": "Data, SEO and Scraping",
    "hint": "firecrawl.dev",
    "one_liner": "Firecrawl is a web scraping/crawling API that converts websites into clean, LLM-ready markdown/structured data.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://docs.firecrawl.dev/api-reference/introduction",
    "mcp": {
      "status": "official",
      "url": "https://mcp.firecrawl.dev/v2/mcp"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.96,
    "agreement": 1.0,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "small"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.firecrawl.dev/api-reference/introduction",
        "quote": "Authorization: Bearer fc-123456789",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.firecrawl.dev/mcp-server",
        "quote": "https://mcp.firecrawl.dev/v2/mcp-oauth",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.firecrawl.dev/pricing",
        "quote": "1,000 credits / month",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.firecrawl.dev/mcp-server",
        "quote": "This is a server URL for your MCP client, not a page to open directly in a browser.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.firecrawl.dev/api-reference/introduction",
        "quote": "Authorization: Bearer fc-123456789",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/firecrawl",
        "quote": "Composio catalog: auth ['API_KEY'], 30 tools",
        "grounded": "registry"
      },
      {
        "field": "mcp",
        "url": "https://mcp.firecrawl.dev/v2/mcp",
        "quote": "MCP initialize POST -> HTTP 200 (text/event-stream); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "FIRECRAWL",
      "tools": 30,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/firecrawl"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 405,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Free tier is self-serve, no credit card required (1,000 monthly credits). Core REST API uses API key via Bearer token; the official hosted MCP server additionally supports OAuth sign-in as an alternative to API key. API surface is small (scrape, crawl, map, search, extract, batch-scrape and related status/webhook endpoints).",
    "pass1": {
      "auth_methods": [
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token",
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.22
  },
  {
    "id": 57,
    "name": "Bright Data",
    "category": "Data, SEO and Scraping",
    "hint": "brightdata.com",
    "one_liner": "Bright Data is a web-data platform providing proxy networks, a Web Unlocker, SERP API, scraping browser, and dataset/scraper APIs for programmatic web scraping.",
    "auth_methods": [
      "api_key",
      "basic",
      "bearer_token"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://docs.brightdata.com/api-reference/authentication",
    "mcp": {
      "status": "official",
      "url": "https://docs.brightdata.com/mcp-server/overview"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.95,
    "agreement": 1.0,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "basic",
          "bearer_token"
        ],
        "pass1": [
          "api_key",
          "basic",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.brightdata.com/api-reference/authentication",
        "quote": "An API key is a secure hashed token used to authenticate with Bright Data API.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.brightdata.com/api-reference/authentication",
        "quote": "Authorization: Bearer <token>",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.brightdata.com/api-reference/authentication",
        "quote": "brd-customer-[ACCOUNT_ID]-zone-[PROXY_NAME]:[PROXY_PASSWORD]",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://brightdata.com/",
        "quote": "Get started for free",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://brightdata.com/",
        "quote": "No credit card required",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://brightdata.com/pricing",
        "quote": "Free tier pricing available",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.brightdata.com/api-reference/authentication",
        "quote": "Web Unlocker API",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.brightdata.com/mcp-server/overview",
        "quote": "The Bright Data MCP server gives AI agents and assistants real-time access to public web data through the Model Context Protocol (MCP).",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://brightdata.com/",
        "quote": "Get started for free",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/brightdata",
        "quote": "Composio catalog: auth ['API_KEY'], 10 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.brightdata.com/zone",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: Credentials are invalid",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "BRIGHTDATA",
      "tools": 10,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/brightdata"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Proxy \"native access\" credentials (customer:zone:password over proxy protocol) function like HTTP basic auth alongside the primary bearer-token API key scheme. Composio catalog and unauth probe (401 on invalid creds) corroborate api_key/bearer auth. Free self-serve signup confirmed on marketing site; exact free-tier request/data limits not itemized on pages fetched. API breadth not fully enumerated (llms.txt index not fetched due to budget) but spans Web Unlocker, SERP, Scraping Browser, Scraper/Dataset APIs, and zone/proxy management — estimated medium.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2",
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "bearer_token",
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.78
    },
    "cost_usd": 0.249
  },
  {
    "id": 58,
    "name": "Sherlock",
    "category": "Data, SEO and Scraping",
    "hint": "github.com/sherlock-project/sherlock",
    "one_liner": "Sherlock is an open-source Python CLI tool that hunts down social media accounts by searching usernames across 400+ sites; it has no hosted API or web service.",
    "auth_methods": [
      "none"
    ],
    "access": "no_public_api",
    "api_type": "cli_only",
    "api_breadth": "large",
    "docs_url": "https://github.com/sherlock-project/sherlock",
    "mcp": {
      "status": "community",
      "url": "https://github.com/Burnsedia/sherlock-mcp"
    },
    "verdict": "red",
    "score": 28,
    "blocker": "cli_not_api",
    "model_verdict": "red",
    "confidence": 0.91,
    "agreement": 0.84,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs no_public_api)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "none"
        ],
        "pass1": [
          "none"
        ]
      },
      "access": {
        "pass2": "no_public_api",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "cli_only",
        "apis_guru_spec": "rest",
        "pass1": "cli_only"
      },
      "api_breadth": {
        "apis_guru_spec": "large",
        "pass2": "unknown",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "api_type",
        "url": "https://github.com/sherlock-project/sherlock",
        "quote": "Hunt down social media accounts by username across social networks",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://github.com/sherlock-project/sherlock",
        "quote": "pipx install sherlock-project",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://github.com/sherlock-project/sherlock",
        "quote": "docker run -it --rm sherlock/sherlock",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/Burnsedia/sherlock-mcp",
        "quote": "Burnsedia/sherlock-mcp",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/github.com/1.1.4/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 845 operations, securitySchemes []",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": true,
      "endpoints": 845
    },
    "probe": {
      "status": null,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Sherlock is a locally-run CLI/Python package (installed via pipx/pip/uv/Docker) for OSINT username enumeration across 400+ sites. It is not a service with a hosted API, so there are no credentials, auth methods, or endpoints to speak of. Any \"agent toolkit\" use would mean shelling out to the CLI or wrapping it, not calling a REST/GraphQL API. MCP servers exist only as community wrappers around the CLI (e.g., Burnsedia/sherlock-mcp, jcucci/dotnet-sherlock-mcp), none vendor-published.",
    "pass1": {
      "auth_methods": [
        "none"
      ],
      "access": "self_serve_free",
      "api_type": "cli_only",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "cli_not_api"
    },
    "pass2": {
      "auth_methods": [
        "none"
      ],
      "access": "no_public_api",
      "api_type": "cli_only",
      "api_breadth": "unknown",
      "verdict": "red",
      "blocker": "cli_not_api",
      "confidence": 0.9
    },
    "cost_usd": 0.239
  },
  {
    "id": 59,
    "name": "Waterfall.io",
    "category": "Data, SEO and Scraping",
    "hint": "waterfall.io (contact/company intel)",
    "one_liner": "Waterfall.io is a B2B contact/company data platform that aggregates 30+ data vendors to provide prospecting, contact enrichment, and email verification via API.",
    "auth_methods": [
      "api_key"
    ],
    "access": "partner_gated",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://docs.waterfall.io/v1/introduction",
    "mcp": {
      "status": "community",
      "url": null
    },
    "verdict": "red",
    "score": 56,
    "blocker": "partner_gate",
    "model_verdict": "red",
    "confidence": 0.76,
    "agreement": 0.92,
    "grounding_rate": 0.67,
    "needs_human": true,
    "needs_human_reasons": [
      "gated/no-API finding with weak grounding needs a human eye"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs partner_gated)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key"
        ]
      },
      "access": {
        "pass2": "partner_gated",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "small",
        "pass1": "small"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "none",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.waterfall.io/v1/introduction",
        "quote": "All requests require an API key in the x-api-key header.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://www.waterfall.io/",
        "quote": "x-api-key: your_key",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.waterfall.io/pricing",
        "quote": "Before anything is signed we run a benchmark on your data at no cost",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.waterfall.io/v1/introduction",
        "quote": "All requests require an API key in the x-api-key header.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.waterfall.io/pricing",
        "quote": "Book a call to hear more... Talk to our team (most likely one of the founders) to share your use case",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.waterfall.io/pricing",
        "quote": "Book a call to hear more... Talk to our team (most likely one of the founders) to share your use case",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Waterfall.io has a real REST API (docs.waterfall.io/v1) with ~13 documented endpoints (prospecting, contact/company enrichment, email verification, job-change detection) authenticated via a static x-api-key header — no OAuth. However there is no self-serve signup or public pricing/dashboard: the marketing site and pricing page repeatedly funnel prospects to \\\"Book a Call\\\", run a free data benchmark, then issue a custom usage-based quote before any API key is provisioned. This is sales/partner-gated access rather than a dev-portal signup, so despite having a normal REST+API-key surface, it is not buildable today without a sales relationship. MCP registry hints (waterfallbridge, mcp-email-waterfall-orchestrator) do not appear to reference this company's contact-intel product — likely false-positive name collisions with unrelated \\\"waterfall\\\" (e.g., email-waterfall routing) tools — so mcp.status is reported as none rather than community.",
    "pass1": {
      "auth_methods": [
        "api_key"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "partner_gated",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "red",
      "blocker": "partner_gate",
      "confidence": 0.62
    },
    "cost_usd": 0.369
  },
  {
    "id": 60,
    "name": "Clay",
    "category": "Data, SEO and Scraping",
    "hint": "clay.com",
    "one_liner": "Clay is a GTM data enrichment and outbound automation platform (100+ data providers, AI research agent 'Claygent', and workflow tables) that exposes a public HTTP API and an official MCP server for external/agent access.",
    "auth_methods": [
      "api_key",
      "other"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developers.clay.com/public-api/authentication.md",
    "mcp": {
      "status": "official",
      "url": "https://api.clay.com/v3/mcp"
    },
    "verdict": "yellow",
    "score": 73,
    "blocker": "enterprise_only",
    "model_verdict": "yellow",
    "confidence": 0.53,
    "agreement": 0.84,
    "grounding_rate": 0.12,
    "needs_human": true,
    "needs_human_reasons": [
      "only 12% of quotes grounded in cited pages"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs paid_plan)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "other"
        ],
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "jwt"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "composio_wraps_mcp": "official",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.clay.com/public-api/authentication.md",
        "quote": "Create one under Settings → Account → API keys (beta).",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.clay.com/public-api/authentication.md",
        "quote": "The required header is clay-api-key with your personal API key value.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://www.clay.com/pricing",
        "quote": "Clay API access",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://www.clay.com/pricing",
        "quote": "Customers are still welcome to use their own API keys for data enrichment or AI in Clay. Each run will count as one Action, but no Data Credit will be used.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.clay.com/llms.txt",
        "quote": "POST /search/query-mode, GET /search/query-mode/reference",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://developers.clay.com/llms.txt",
        "quote": "Search Operations, Routine Execution, Batch Processing, Table Queries, Workspace Management, Workflow Runs",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.clay.com/guides/clay-mcp",
        "quote": "The Clay remote MCP server is a hosted Model Context Protocol endpoint at https://api.clay.com/v3/mcp",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.clay.com/pricing",
        "quote": "Clay API access",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/clay_mcp",
        "quote": "Composio catalog: auth ['DCR_OAUTH'], 17 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.clay.com/v3/sources",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"type\":\"Unauthorized\",\"message\":\"You must be logged in\",\"details\":null}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://api.clay.com/v3/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "CLAY_MCP",
      "tools": 17,
      "auth": [
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/clay_mcp"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Clay launched a new Public API (api.clay.com/public/v0, July 2026) authenticated with a single 'clay-api-key' header; key creation is self-serve under Settings→Account→API keys (beta) with no explicit plan gate stated in the auth docs. However, Clay's own pricing page lists 'Clay API access' as an Enterprise-tier (custom pricing, contact sales) feature, distinct from the Growth-tier 'Integrate with any HTTP API' (outbound enrichment columns) and Free-tier 'bring your own third-party API key' features — creating ambiguity about whether the beta Public API is broadly self-serve or Enterprise-only. Sided with the pricing page as the more authoritative access signal, hence paid_plan/enterprise_only with moderate confidence. Separately, Clay publishes an official hosted remote MCP server (api.clay.com/v3/mcp) with a free-credit on-ramp (500 credits on first connect per third-party summary), which is not gated the same way.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "bearer_token",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "enterprise_only",
      "confidence": 0.6
    },
    "cost_usd": 0.502
  },
  {
    "id": 61,
    "name": "GitHub",
    "category": "Developer, Infra and Data platforms",
    "hint": "docs.github.com/rest",
    "one_liner": "GitHub's REST and GraphQL APIs let developers manage repos, issues, PRs, actions, and more programmatically across the GitHub platform.",
    "auth_methods": [
      "api_key",
      "basic",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest_and_graphql",
    "api_breadth": "large",
    "docs_url": "https://docs.github.com/rest",
    "mcp": {
      "status": "official",
      "url": "https://github.com/github/github-mcp-server"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.78,
    "agreement": 0.87,
    "grounding_rate": 0.62,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "basic",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "basic",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest_and_graphql",
        "apis_guru_spec": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "apis_guru_spec": "large",
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.github.com/en/rest/authentication/authenticating-to-the-rest-api",
        "quote": "GitHub recommends that you use a fine-grained personal access token instead of a personal access token (classic).",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.github.com/en/rest/authentication/authenticating-to-the-rest-api",
        "quote": "Some REST API endpoints for GitHub Apps and OAuth apps require you to use basic authentication to access the endpoint.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.github.com/en/rest/authentication/authenticating-to-the-rest-api",
        "quote": "Authentication with username and password is not supported. If you try to authenticate with user name and password, you will receive a 4xx error.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://api.github.com/user",
        "quote": "{\"message\": \"Requires authentication\",\"documentation_url\": \"https://docs.github.com/rest\",\"status\": \"401\"}",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/github/github-mcp-server",
        "quote": "The GitHub MCP Server connects AI tools directly to GitHub's platform.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.github.com/en/rest/authentication/authenticating-to-the-rest-api",
        "quote": "replace YOUR-TOKEN with a reference to your token using \"Authorization: Bearer YOUR-TOKEN\"",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.github.com/en/rest",
        "quote": "signals: oauth true, graphql true, rest true",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/github.com/1.1.4/openapi.json",
        "quote": "endpoints: 845",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/github",
        "quote": "Composio catalog: auth ['OAUTH2'], 893 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/github.com/1.1.4/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 845 operations, securitySchemes []",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.github.com/user",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\r   \"message\": \"Requires authentication\",\r   \"documentation_url\": \"https://docs.github.com/rest\",\r   \"status\": \"401\"\r }",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "GITHUB",
      "tools": 893,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/github"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 845
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Basic auth is only used for a narrow subset of GitHub App/OAuth App endpoints (client ID/secret), not general API access; primary methods are PAT (api_key) and OAuth2/GitHub Apps, with Bearer token header format for all authenticated requests. Free GitHub account suffices to create PATs and register OAuth/GitHub Apps — no paid tier required for API access itself (rate limits differ by plan but base access is free). Official GitHub MCP server exists and is actively maintained by GitHub.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "basic",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.273
  },
  {
    "id": 62,
    "name": "Vercel",
    "category": "Developer, Infra and Data platforms",
    "hint": "vercel.com/docs/rest-api",
    "one_liner": "Vercel is a cloud platform for deploying and hosting frontend/web applications, with a REST API to manage projects, deployments, domains, and team resources.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://vercel.com/docs/rest-api",
    "mcp": {
      "status": "official",
      "url": "https://github.com/vercel/mcp-handler"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.92,
    "agreement": 1.0,
    "grounding_rate": 0.88,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "apis_guru_spec": [
          "bearer_token",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "official",
        "github": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://vercel.com/docs/rest-api/authentication/create-an-auth-token",
        "quote": "**bearerToken**: HTTP bearer",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://vercel.com/docs/rest-api/authentication/create-an-auth-token",
        "quote": "'Authorization': 'Bearer YOUR_ACCESS_TOKEN'",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://vercel.com/docs/rest-api/authentication/create-an-auth-token",
        "quote": "\"type\": \"oauth2-token\"",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://vercel.com/docs/rest-api/authentication/create-an-auth-token",
        "quote": "Creates and returns a new authentication token for the currently authenticated User.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://vercel.com/docs/rest-api",
        "quote": "Interact programmatically with your Vercel account using the SDK or direct HTTP requests.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://vercel.com/docs/rest-api",
        "quote": "| **GET** | [`/v1/access-groups/{idOrName}`](/docs/rest-api/access-groups/reads-an-access-group.md) | Reads an access group |",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://api.vercel.com/v9/projects",
        "quote": "{\"error\":{\"code\":\"forbidden\",\"message\":\"The request is missing an authentication token\",\"missingToken\":true}}",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/vercel/mcp-handler",
        "quote": "vercel/mcp-handler (669★)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/vercel",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 146 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/vercel.com/0.0.1/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 112 operations, securitySchemes ['bearer_token', 'oauth2']",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.vercel.com/v9/projects",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: {\"error\":{\"code\":\"forbidden\",\"message\":\"The request is missing an authentication token\",\"missingToken\":true}}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "VERCEL",
      "tools": 146,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/vercel"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 112
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": "bearer_token"
    },
    "notes": "Vercel REST API is documented at vercel.com/docs/rest-api with 400+ endpoints across dozens of resource groups (projects, deployments, domains, dns, env vars, edge-config, webhooks, teams, etc). Auth is via personal Bearer access tokens created in Account Settings (free on the Hobby plan) or OAuth2 tokens issued to Marketplace/native integrations (response schema shows token type \\\"oauth2-token\\\" with origin e.g. \\\"github\\\"). No app review needed to create a personal token and call the API; building a distributable OAuth integration for the Marketplace goes through Vercel's integration developer flow but isn't required for basic API/agent use. Vercel publishes vercel/mcp-handler, an official SDK/framework for building MCP servers on Vercel (used by the community mcp-vercel server too), though it is a framework rather than a single hosted MCP endpoint.",
    "pass1": {
      "auth_methods": [
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token",
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.324
  },
  {
    "id": 63,
    "name": "Netlify",
    "category": "Developer, Infra and Data platforms",
    "hint": "docs.netlify.com/api",
    "one_liner": "Netlify is a web hosting/deployment platform (sites, builds, forms, functions, DNS) with a REST API for managing sites and deployments programmatically.",
    "auth_methods": [
      "bearer_token",
      "oauth2",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://docs.netlify.com/api-and-cli-guides/api-guides/get-started-with-api/",
    "mcp": {
      "status": "official",
      "url": "https://github.com/netlify/netlify-mcp"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.81,
    "agreement": 0.96,
    "grounding_rate": 0.62,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "other"
        ],
        "apis_guru_spec": [
          "oauth2"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "composio_wraps_mcp": "official",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.netlify.com/api-and-cli-guides/api-guides/get-started-with-api/",
        "quote": "Netlify uses OAuth2 for authentication. All requests must use HTTPS.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.netlify.com/api-and-cli-guides/api-guides/get-started-with-api/",
        "quote": "Authorization: Bearer YOUR_OAUTH2_ACCESS_TOKEN",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.netlify.com/api-and-cli-guides/api-guides/get-started-with-api/",
        "quote": "Go to Applications > Personal access tokens, Select New access token",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/netlify/netlify-mcp",
        "quote": "Netlify's Official MCP server",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.netlify.com/api-and-cli-guides/api-guides/get-started-with-api/",
        "quote": "Select New access token",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/netlify.com/2.15.0/swagger.json",
        "quote": "endpoints: 120",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.netlify.com/api-and-cli-guides/api-guides/get-started-with-api/",
        "quote": "curl -H \"Authorization: Bearer YOUR_OAUTH2_ACCESS_TOKEN\" https://api.netlify.com/api/v1/sites",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.netlify.com/build/build-with-ai/netlify-mcp-server/",
        "quote": "Netlify's Official MCP Server",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/netlify_mcp",
        "quote": "Composio catalog: auth ['DCR_OAUTH'], 9 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/netlify.com/2.15.0/swagger.json",
        "quote": "APIs.guru OpenAPI spec: 120 operations, securitySchemes ['oauth2']",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.netlify.com/api/v1/sites",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"code\":401,\"message\":\"Access Denied\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "NETLIFY_MCP",
      "tools": 9,
      "auth": [
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/netlify_mcp"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 120
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Personal access tokens (bearer) are generated directly from any Netlify account (including free tier) via Applications > Personal access tokens, no approval needed. OAuth2 is documented as required only for public third-party integrations distributed to other users; direct API use with a PAT is the common self-serve path. Netlify also publishes an official remote/local MCP server (netlify-mcp.netlify.app/mcp and @netlify/mcp npm package) built on the same CLI/API surface.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.29100000000000004
  },
  {
    "id": 64,
    "name": "Cloudflare",
    "category": "Developer, Infra and Data platforms",
    "hint": "developers.cloudflare.com/api",
    "one_liner": "Cloudflare is a CDN, DNS, security, and edge-compute (Workers) platform with a broad REST API for managing zones, DNS, security, and serverless resources.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developers.cloudflare.com/api/",
    "mcp": {
      "status": "official",
      "url": "https://github.com/cloudflare/mcp-server-cloudflare"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.76,
    "agreement": 0.89,
    "grounding_rate": 0.57,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.cloudflare.com/fundamentals/api/get-started/",
        "quote": "Whenever possible, use API tokens to interact with the Cloudflare API.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.cloudflare.com/agents/model-context-protocol/",
        "quote": "MCP clients connect to MCP servers over the Internet, establishing a connection using Streamable HTTP, and authorizing the MCP client access to resources on the user's account using OAuth.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/cloudflare/mcp-server-cloudflare",
        "quote": "Model Context Protocol (MCP) is a new, standardized protocol for managing context between large language models (LLMs) and external systems.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.cloudflare.com/fundamentals/api/reference/limits/",
        "quote": "Enterprise customers can also contact Cloudflare Support to raise the Client API per user, GraphQL, or API token limits to a higher value.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.cloudflare.com/fundamentals/api/get-started/",
        "quote": "API keys have several limitations that make them less secure than API tokens.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.cloudflare.com/client/v4/zones",
        "quote": "Missing X-Auth-Email header ... Missing X-Auth-Key header",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.cloudflare.com/api/",
        "quote": "npm install cloudflare",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/cloudflare",
        "quote": "Composio catalog: auth ['API_KEY'], 20 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.cloudflare.com/client/v4/zones",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: {\"success\":false,\"errors\":[{\"code\":9106,\"message\":\"Missing X-Auth-Email header\"},{\"code\":9107,\"message\":\"Missing X-Auth-Key header\"}],\"messages\":[],\"result\":null}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "CLOUDFLARE",
      "tools": 20,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/cloudflare"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Cloudflare's REST API (api.cloudflare.com) is available to any signed-up account, including the free plan; free-tier accounts can create scoped API Tokens (recommended, bearer-token style Authorization header) or legacy Global API Key (X-Auth-Key/X-Auth-Email header pair). OAuth2 is used for authorizing remote MCP client connections to a user's Cloudflare account rather than for the core REST API itself. Cloudflare publishes and maintains an official open-source MCP server suite (cloudflare/mcp-server-cloudflare, 4.2k★) covering Workers, DNS analytics, observability, browser rendering, audit logs, and a general 'Code Mode' server for broad API access; this matches the community/official registry hit 'com.cloudflare.mcp/mcp'. API surface is large (500+ documented REST endpoints across Zones, DNS, SSL/TLS, Firewall, Load Balancers, Workers, etc.). Higher rate limits are gated to Enterprise support requests, but base API access itself is not paywalled.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token",
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.8
    },
    "cost_usd": 0.287
  },
  {
    "id": 65,
    "name": "Supabase",
    "category": "Developer, Infra and Data platforms",
    "hint": "supabase.com/docs",
    "one_liner": "Supabase is an open-source Firebase alternative providing a hosted Postgres database with auto-generated REST/GraphQL APIs, auth, storage, edge functions, and a Management API for provisioning projects.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest_and_graphql",
    "api_breadth": "large",
    "docs_url": "https://supabase.com/docs/reference/api/introduction",
    "mcp": {
      "status": "official",
      "url": "https://github.com/supabase/mcp"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.95,
    "agreement": 1.0,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "jwt",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest_and_graphql",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "official",
        "github": "community",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://supabase.com/docs/reference/api/introduction",
        "quote": "PATs are tokens with a custom expiry that you manually generate to access the Management API.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://supabase.com/docs/reference/api/introduction",
        "quote": "allows your application to generate tokens on behalf of a Supabase user, providing secure and limited access to their account without requiring their credentials",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://supabase.com/docs/reference/api/introduction",
        "quote": "Authorization: Bearer <access_token>",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://supabase.com/docs/guides/api",
        "quote": "provisioned behind an API gateway with key-auth enabled",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://supabase.com/docs/guides/api",
        "quote": "a thin API layer on top of Postgres",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://supabase.com/docs/guides/graphql/api",
        "quote": "In our API, each SQL table is reflected as a set of GraphQL types.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://supabase.com/pricing",
        "quote": "Unlimited API requests",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://supabase.com/pricing",
        "quote": "Free projects are paused after 1 week of inactivity. Limit of 2 active projects.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://supabase.com/docs/guides/getting-started/mcp",
        "quote": "The MCP server repository is available at github.com/supabase/mcp",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://supabase.com/docs/reference/api/introduction",
        "quote": "All resources created via the API are subject to the pricing detailed on our Pricing pages",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/supabase",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 129 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.supabase.com/v1/projects",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"message\":\"Unauthorized\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "SUPABASE",
      "tools": 129,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/supabase"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Two distinct public API surfaces: (1) Management API (api.supabase.com) for org/project admin, auth via Personal Access Tokens or OAuth2, sent as Authorization: Bearer <token>; (2) per-project auto-generated Data API (PostgREST-based REST + pg_graphql-based GraphQL) authenticated via project API keys (anon/service_role) behind a key-auth gateway, layered with Postgres Row Level Security. Free tier gives unlimited API requests but pauses inactive free projects after 1 week and caps at 2 active projects. Management API alone spans 15+ resource categories (projects, organizations, branches, functions, storage, auth config, secrets, etc.) with multiple endpoints each, comfortably >300 total when combined with per-table Data API surface, hence \"large\" breadth (approximate, no single endpoint-count page fetched). Official MCP server published by Supabase at github.com/supabase/mcp with a hosted endpoint at mcp.supabase.com/mcp, alongside numerous community MCP servers (self-hosted variants, lite versions) per registry hints.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.312
  },
  {
    "id": 66,
    "name": "Neo4j",
    "category": "Developer, Infra and Data platforms",
    "hint": "neo4j.com/docs/api",
    "one_liner": "Neo4j is a graph database platform (self-managed or Aura cloud) offering a REST management API (Aura API) for provisioning/managing database instances, plus driver-based Cypher query access and an official MCP server.",
    "auth_methods": [
      "api_key",
      "basic",
      "bearer_token",
      "oauth2",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://neo4j.com/docs/aura/api/authentication/",
    "mcp": {
      "status": "official",
      "url": "https://neo4j.com/docs/mcp/current/"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.87,
    "agreement": 0.89,
    "grounding_rate": 0.86,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "basic",
          "oauth2",
          "other"
        ],
        "pass2": [
          "basic",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "basic",
          "bearer_token",
          "jwt",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://neo4j.com/docs/aura/api/authentication/",
        "quote": "The Aura API uses OAuth 2.0 for API authentication",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://neo4j.com/docs/aura/api/authentication/",
        "quote": "Authentication to the token endpoint uses HTTP Basic Authentication, where the client ID and client secret are provided as the username and password, respectively.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://neo4j.com/docs/aura/api/authentication/",
        "quote": "All tiers can create Aura API credentials.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://neo4j.com/docs/aura/platform/api/overview/",
        "quote": "The Aura API allows you to programmatically perform actions on your Aura instances without the need to log in to the Console.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://neo4j.com/docs/mcp/current/",
        "quote": "Introduction - Neo4j MCP",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/neo4j/mcp",
        "quote": "Neo4j official MCP Server",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://neo4j.com/docs/aura/platform/api/overview/",
        "quote": "Free and trial accounts (without billing): 25 requests per minute",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/neo4j",
        "quote": "Composio catalog: auth ['OAUTH2', 'BASIC', 'API_KEY', 'S2S_OAUTH2'], 21 tools",
        "grounded": "registry"
      },
      {
        "field": "mcp",
        "url": "https://neo4j.com/docs/mcp/current/",
        "quote": "MCP initialize POST -> HTTP 403 (text/html); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "NEO4J",
      "tools": 21,
      "auth": [
        "api_key",
        "basic",
        "oauth2",
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/neo4j"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 400,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Neo4j's product-level HTTP API is the Aura API (cloud instance management: create/pause/resize DB instances, snapshots, tenants), which is REST + OAuth2 client-credentials, self-serve on free/trial tiers with lower rate limits (25 req/min) vs paid tiers (125 req/min). Separately, database query access uses Bolt/HTTP via language drivers (not a REST product API), and Neo4j also ships an official local MCP server (neo4j/mcp, downloadable binary) plus a larger community-maintained Neo4j Labs MCP suite (neo4j-contrib/mcp-neo4j) for Cypher query execution against any Neo4j deployment. api_breadth marked \"small\" based on the scope of documented Aura API resources (instances/tenants/projects/snapshots/CMKs); no official endpoint count was found in the pages fetched.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "basic",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "basic"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.307
  },
  {
    "id": 67,
    "name": "Snowflake",
    "category": "Developer, Infra and Data platforms",
    "hint": "docs.snowflake.com",
    "one_liner": "Snowflake is a cloud data platform (data warehouse, Cortex AI, apps) with a documented REST SQL API and broader account/object management REST APIs.",
    "auth_methods": [
      "api_key",
      "jwt",
      "oauth2",
      "other"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://docs.snowflake.com/en/developer-guide/sql-api/index",
    "mcp": {
      "status": "official",
      "url": "https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp"
    },
    "verdict": "green",
    "score": 92,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.88,
    "agreement": 0.93,
    "grounding_rate": 0.9,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "jwt",
          "oauth2",
          "other"
        ],
        "pass1": [
          "bearer_token",
          "jwt",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_trial"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.snowflake.com/en/developer-guide/sql-api/authenticating",
        "quote": "Authorization: Bearer _oauth_token_",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.snowflake.com/en/developer-guide/sql-api/authenticating",
        "quote": "Assign the public key to your Snowflake user.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.snowflake.com/en/developer-guide/sql-api/authenticating",
        "quote": "Authorization: Bearer WIF.{provider}.{token}",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.snowflake.com/en/user-guide/admin-trial-account",
        "quote": "To sign up for a trial account, all you need is a valid email address; no payment information or other qualifying information is required.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.snowflake.com/en/user-guide/admin-trial-account",
        "quote": "The trial continues for 30 days (from the sign-up date) or until you've depleted your free usage balance, whichever occurs first.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.snowflake.com/en/developer-guide/sql-api/index",
        "quote": "a REST API that you can use to access and update data in a Snowflake database",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp",
        "quote": "The Snowflake-managed MCP server lets AI agents securely retrieve data from Snowflake accounts without needing to deploy separate infrastructure.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/Snowflake-Labs/mcp",
        "quote": "This project is deprecated and no longer maintained. Please migrate to the official Snowflake MCP Server.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.snowflake.com/en/user-guide/admin-trial-account",
        "quote": "no payment information or other qualifying information is required",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp",
        "quote": "Programmatic Access Tokens (PAT)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/snowflake",
        "quote": "Composio catalog: auth ['OAUTH2'], 17 tools",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "SNOWFLAKE",
      "tools": 17,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/snowflake"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": null,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Public REST API (SQL API + object/account management REST APIs) supports OAuth, key-pair JWT, Programmatic Access Tokens, and Workload Identity Federation. Free 30-day trial (no credit card) gives working credentials, converting to paid after. Snowflake now ships an official Snowflake-managed MCP server (GA Aug 2026); the older Snowflake-Labs/mcp community repo is deprecated in favor of it.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "jwt",
        "bearer_token"
      ],
      "access": "self_serve_trial",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "jwt",
        "api_key",
        "other"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.78
    },
    "cost_usd": 0.367
  },
  {
    "id": 68,
    "name": "MongoDB Atlas",
    "category": "Developer, Infra and Data platforms",
    "hint": "mongodb.com/docs/atlas/api",
    "one_liner": "MongoDB Atlas is a fully-managed cloud MongoDB database platform with a REST Administration API for provisioning and managing clusters, projects, backups, and org resources.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://www.mongodb.com/docs/atlas/api/",
    "mcp": {
      "status": "official",
      "url": "https://github.com/mongodb-js/mongodb-mcp-server"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.65,
    "agreement": 1.0,
    "grounding_rate": 0.12,
    "needs_human": true,
    "needs_human_reasons": [
      "only 12% of quotes grounded in cited pages"
    ],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "mcp",
        "url": "https://github.com/mongodb-js/mongodb-mcp-server",
        "quote": "A Model Context Protocol server to connect to MongoDB databases and MongoDB Atlas Clusters.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://www.mongodb.com/docs/atlas/configure-api-access/",
        "quote": "you must authenticate your API requests with one of the following authentication methods: - Service account access tokens (OAuth 2.0) - API keys (HTTP Digest Authentication)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://www.mongodb.com/docs/atlas/api/api-authentication/",
        "quote": "Service accounts are the recommended method to manage authentication to the Atlas Administration API. Service accounts provide improved security over API keys by using the industry standard OAuth 2.0 protocol with the Client Credentials flow.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://www.mongodb.com/docs/atlas/api/api-authentication/",
        "quote": "API keys are a legacy method of authenticating to the Atlas Administration API that uses HTTP Digest Authentication.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://www.mongodb.com/docs/atlas/configure-api-access/",
        "quote": "You have an Atlas account. To create one, see Create an Atlas Account.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://www.mongodb.com/docs/atlas/configure-api-access/",
        "quote": "To create a service account or API keys for an organization, you must have Organization Owner access to that organization.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://www.mongodb.com/docs/atlas/configure-api-access/",
        "quote": "All Atlas Administration API endpoints have the following base URL: https://cloud.mongodb.com/api/atlas/<version>",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.mongodb.com/docs/atlas/api/",
        "quote": "add, edit, or delete administrative objects within Atlas, including projects, users, and clusters",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://cloud.mongodb.com/api/atlas/v2/groups",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Digest realm=\"MMS Public API\", domain=\"\", nonce=\"u1ON62Xgtyu5vP80ATz5oB9LoRpnPtnv\", algorithm=MD5, qop=\"auth\", stale=false; body: {   \"error\" : 401,   \"reason\" : \"Unauthorized\",   \"detail\" : \"You are not authorized for this resource.\",   \"errorCode\" : \"UNEXPECTED_ERROR\" }",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Digest realm=\"MMS Public API\", domain=\"\", nonce=\"u1ON62Xgtyu5vP80ATz5oB9LoRpnPtnv\", algorithm=MD5, qop=\"auth\", stale=false",
      "inferred": "other"
    },
    "notes": "Atlas Administration API v2 is a broad REST API (clusters, projects, orgs, backups, alerts, network access, federation, streams, etc. — several hundred endpoints, marked \\\"large\\\" from general knowledge of the OpenAPI spec since a live endpoint count could not be fetched in this pass). Free Atlas accounts (including M0 free tier) can create an organization and, with Organization Owner role, generate either OAuth2 service account credentials (recommended, current) or legacy API keys (HTTP Digest auth) — fully self-serve, no paid plan or approval gate for API access itself. mongodb-js/mongodb-mcp-server (1.1k★) is MongoDB's own official MCP server supporting both self-hosted MongoDB and Atlas.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.34199999999999997
  },
  {
    "id": 69,
    "name": "Datadog",
    "category": "Developer, Infra and Data platforms",
    "hint": "docs.datadoghq.com/api",
    "one_liner": "Datadog is a cloud observability and security platform (infrastructure/APM monitoring, logs, metrics, dashboards, alerting).",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://docs.datadoghq.com/api/latest/",
    "mcp": {
      "status": "community",
      "url": "https://docs.datadoghq.com/mcp_server/"
    },
    "verdict": "green",
    "score": 98,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.58,
    "agreement": 0.82,
    "grounding_rate": 0.12,
    "needs_human": true,
    "needs_human_reasons": [
      "only 12% of quotes grounded in cited pages"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_trial vs self_serve_free)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_trial",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://www.datadoghq.com/pricing/",
        "quote": "Core collection and visualization features",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.datadoghq.com/api/latest/",
        "quote": "Authenticate to the API with an API key using the header `DD-API-KEY`",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.datadoghq.com/api/latest/authentication/",
        "quote": "Requests that write data require reporting access and require an `API key`. Requests that read data require full access and also require an `application key`.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.datadoghq.com/developers/authorization/oauth2_in_datadog/",
        "quote": "Use the `access_token` to make calls to Datadog API endpoints by sending it in as a part of the authorization header of your request",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://docs.datadoghq.com/account_management/api-app-keys/",
        "quote": "Your org must have at least one API key, and up to 50 API keys by default.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.datadoghq.com/api/latest/",
        "quote": "an HTTP REST API",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.datadoghq.com/mcp_server/",
        "quote": "The Datadog MCP Server acts as a bridge between your observability data in Datadog and any AI agents that support the Model Context Protocol (MCP).",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.datadoghq.com/account_management/api-app-keys/",
        "quote": "To create an API key, navigate to Organization Settings and select the API Keys tab, then click New Key",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/datadog",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY', 'BEARER_TOKEN'], 65 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.datadoghq.com/api/v1/validate",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: {\"errors\":[\"Forbidden\"]}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "DATADOG",
      "tools": 65,
      "auth": [
        "api_key",
        "bearer_token",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/datadog"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Datadog offers a permanent free tier (up to 5 hosts, 1-day retention) with self-serve org signup; API keys and application keys are generated immediately in Organization Settings without approval. Core API auth is via DD-API-KEY/DD-APPLICATION-KEY headers (api_key-style), and Datadog separately supports full OAuth2 (authorization code + client credentials) for third-party apps, with resulting access tokens used as bearer tokens. REST API spans v1 and v2 with hundreds of documented endpoints across products (large breadth). Datadog publishes its own official, vendor-built MCP Server (GA as of ~March 2026) in addition to several community MCP servers on GitHub/registries.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_trial",
      "api_type": "rest_and_graphql",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.389
  },
  {
    "id": 70,
    "name": "Sentry",
    "category": "Developer, Infra and Data platforms",
    "hint": "docs.sentry.io/api",
    "one_liner": "Sentry is an error-monitoring/observability platform with a large REST API for managing projects, issues, events, and alerts programmatically.",
    "auth_methods": [
      "basic",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_trial",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://docs.sentry.io/api/",
    "mcp": {
      "status": "community",
      "url": "https://mcp.sentry.dev/"
    },
    "verdict": "yellow",
    "score": 93,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.71,
    "agreement": 0.92,
    "grounding_rate": 0.5,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs self_serve_trial)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "basic",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_trial",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "api_type",
        "url": "https://docs.sentry.io/api/",
        "quote": "The Sentry web API is used to access the Sentry platform programmatically.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.sentry.io/api/auth/",
        "quote": "Authentication tokens are passed using an auth header, and are used to authenticate as a user or organization account with the API.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.sentry.io/api/auth/",
        "quote": "A Sentry user can belong to multiple organizations. The access token only provides access to the specific organization the user selected during the OAuth flow.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.sentry.io/api/guides/create-auth-token/",
        "quote": "A Sentry account with an organization-level role of Manager or Admin",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.sentry.io/api/auth/",
        "quote": "API Keys: A deprecated authentication method using HTTP Basic Auth, though still supported for existing accounts.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://sentry.io/pricing/",
        "quote": "API\" with checkmarks indicating availability in Team, Business, and Enterprise plans, but notably absent from the Developer plan",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.sentry.io/product/sentry-mcp/",
        "quote": "301 Moved Permanently -> https://mcp.sentry.dev/",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://sentry.io/api/0/projects/",
        "quote": "{\"detail\":\"Authentication credentials were not provided.\"} (www-authenticate: Bearer realm=\"api\")",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/sentry",
        "quote": "Composio catalog: auth ['OAUTH2'], 211 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://sentry.io/api/0/projects/",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Bearer realm=\"api\"; body: {\"detail\":\"Authentication credentials were not provided.\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "SENTRY",
      "tools": 211,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/sentry"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Bearer realm=\"api\"",
      "inferred": "bearer_token"
    },
    "notes": "Sentry's REST API (\"web API\") is large (organizations, projects, issues, events, alerts, releases, etc.). Auth: organization/personal auth tokens (bearer), OAuth2 apps (authorization code + PKCE + device flow), and a deprecated Basic-Auth API-key method still honored for legacy accounts. Free \"Developer\" plan explicitly excludes the \"API & third-party integrations\" feature per the pricing comparison table — API access requires the paid Team tier (which has a free trial), hence self_serve_trial rather than self_serve_free. Creating an auth token additionally requires an org Manager/Admin role. Sentry publishes an official MCP server (getsentry/sentry-mcp, 854★) reachable via mcp.sentry.dev, also listed as a feature of the free plan (chat/agent access to Sentry data), distinct from the paid REST API gate.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token",
        "oauth2",
        "basic"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.68
    },
    "cost_usd": 0.438
  },
  {
    "id": 71,
    "name": "Notion",
    "category": "Productivity and Project Management",
    "hint": "developers.notion.com",
    "one_liner": "Notion is a workspace/notes/wiki and project-management tool with a REST API for pages, blocks, databases, and users.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developers.notion.com/",
    "mcp": {
      "status": "official",
      "url": "https://developers.notion.com/docs/mcp"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.91,
    "agreement": 1.0,
    "grounding_rate": 0.83,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "small",
        "composio_tools": "medium",
        "pass2": "small",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "official",
        "github": "community",
        "pass2": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.notion.com/docs/authorization",
        "quote": "Public connections instead follow the OAuth 2.0 protocol to authorize a connection to interact with a workspace.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.notion.com/docs/authorization",
        "quote": "Personal access tokens (PATs) are created directly by a Notion user in the Developer portal",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.notion.com/docs/authorization",
        "quote": "include the installation access token in the Authorization header with every API request",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.notion.com/guides/get-started/overview",
        "quote": "The fastest way to start building is the Quickstart — create a personal access token, make your first API request, and see a new page appear in your workspace in under two minutes.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.notion.com/docs/mcp",
        "quote": "Notion MCP is a remote MCP server hosted by Notion.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://api.apis.guru/v2/specs/notion.com/1.0.0/openapi.json",
        "quote": "endpoints: 13",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/notion",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 56 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/notion.com/1.0.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 13 operations, securitySchemes []",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.notion.com/v1/users",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"object\":\"error\",\"status\":401,\"code\":\"unauthorized\",\"message\":\"Authorization header must use the format \\\"Bearer <token>\\\".\",\"request_id\":\"513335ce-d11f-460f-a41f-103410c109f2\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "NOTION",
      "tools": 56,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/notion"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 13
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": "bearer_token"
    },
    "notes": "Personal access tokens are self-serve and free, obtainable in minutes via the Developer portal without approval. Public (multi-workspace) integrations use OAuth2 but do require a review step before distribution; internal integrations need no review. Bearer-token header scheme documented explicitly. Official Notion-hosted MCP server confirmed on developers.notion.com/docs/mcp, plus a highly-starred official GitHub repo (makenotion/notion-mcp-server).",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.88
    },
    "cost_usd": 0.249
  },
  {
    "id": 72,
    "name": "Airtable",
    "category": "Productivity and Project Management",
    "hint": "airtable.com/developers",
    "one_liner": "Airtable is a cloud database/spreadsheet-hybrid platform with a REST Web API for programmatic access to bases, tables, and records.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://airtable.com/developers/web/api/introduction",
    "mcp": {
      "status": "official",
      "url": "https://airtable.com/developers/agents"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.8,
    "agreement": 1.0,
    "grounding_rate": 0.57,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "official",
        "pass2": "official"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://support.airtable.com/docs/managing-api-call-limits-in-airtable",
        "quote": "Free plan: 1000 API calls per month",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://support.airtable.com/docs/managing-api-call-limits-in-airtable",
        "quote": "Airtable enforces a rate limit of 5 requests per second (per base) to ensure optimal user performance across all pricing tiers.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://airtable.com/developers/agents",
        "quote": "The Airtable MCP server gives agents your base's full structure — field types, relationships, and views — so they can make context-aware decisions.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://support.airtable.com/docs/managing-api-call-limits-in-airtable",
        "quote": "If you exceed your Free plan's call limit, a 30-day grace period is initiated, allowing you to continue using the API for that period.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://airtable.com/developers/web/api/authentication",
        "quote": "As of February 1st 2024, the deprecation period for Airtable API keys has ended.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://airtable.com/developers/web/api/authentication",
        "quote": "the token must have both the correct scope (`data.records:write`) and the base added to it as a resource",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://airtable.com/developers/web/api/introduction",
        "quote": "The API closely follows REST semantics, uses JSON to encode objects, and relies on standard HTTP codes to signal operation outcomes.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/airtable",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 26 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.airtable.com/v0/meta/bases",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"error\":{\"type\":\"AUTHENTICATION_REQUIRED\",\"message\":\"Authentication required\"}}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "AIRTABLE",
      "tools": 26,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/airtable"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "API keys were fully deprecated Feb 1 2024; current auth is Personal Access Tokens (Bearer scheme) for individual dev use, or OAuth2 for third-party integrations requiring app registration at /create/oauth. Free-tier accounts can self-serve create PATs and use the API, but capped at 1000 calls/month and 5 req/sec per base — usable for prototyping/agents but a real constraint at scale. Official MCP server confirmed via /developers/agents with Claude Code plugin and npm CLI install paths. api_breadth estimated medium (records, bases/meta, webhooks, comments, attachments, fields endpoints) — exact count not verified against full API reference.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.318
  },
  {
    "id": 73,
    "name": "Linear",
    "category": "Productivity and Project Management",
    "hint": "developers.linear.app",
    "one_liner": "Linear is an issue tracking and project management tool for software teams, offering a GraphQL API with personal API keys and OAuth2 app support.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "graphql",
    "api_breadth": "medium",
    "docs_url": "https://linear.app/developers",
    "mcp": {
      "status": "official",
      "url": "https://mcp.linear.app/mcp"
    },
    "verdict": "green",
    "score": 95,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.91,
    "agreement": 1.0,
    "grounding_rate": 0.86,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "graphql",
        "pass1": "graphql"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "medium",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "official",
        "github": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://linear.app/docs/api-and-webhooks",
        "quote": "Admins and permitted Members can create personal API keys from Settings > Account > Security & Access.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://linear.app/docs/api-and-webhooks",
        "quote": "Create and manage webhooks and OAuth applications in Settings > Administration > API.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://linear.app/docs/api-and-webhooks",
        "quote": "For each key you create, you can choose to give it full access to the data your user can access, or restrict it to certain permissions.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://linear.app/docs/mcp",
        "quote": "Linear's MCP server follows the authenticated remote MCP spec, so the server is centrally hosted and managed.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://linear.app/docs/mcp",
        "quote": "The Linear MCP server has tools available for finding, creating, and updating objects in Linear like issues, projects, and comments",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://linear.app/docs/api-and-webhooks",
        "quote": "Admins and permitted Members can create personal API keys from Settings > Account > Security & Access.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://linear.app/developers",
        "quote": "API Type: GraphQL - The platform uses a GraphQL API as its primary interface for developers.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/linear",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 47 tools",
        "grounded": "registry"
      },
      {
        "field": "mcp",
        "url": "https://mcp.linear.app/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "LINEAR",
      "tools": 47,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/linear"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 400,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Linear has a free tier for workspaces, so any developer can sign up and self-generate a personal API key from their own workspace's Settings > Account > Security & Access without needing external approval (they're the admin of their own free workspace). OAuth2 apps are configured via Settings > Administration > API, also self-serve for workspace admins. Docs previously at developers.linear.app now redirect to linear.app/developers and linear.app/docs/api-and-webhooks. Official remote MCP server hosted at mcp.linear.app/mcp confirms strong agent-toolkit readiness. api_breadth marked medium based on Composio's catalog of 47 wrapped tools plus the breadth of Linear's GraphQL schema (issues, projects, cycles, comments, webhooks, etc.), though GraphQL doesn't have discrete \"endpoints\" in the REST sense so this is an approximation.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "graphql",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "graphql",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.257
  },
  {
    "id": 74,
    "name": "Jira",
    "category": "Productivity and Project Management",
    "hint": "developer.atlassian.com",
    "one_liner": "Jira is Atlassian's issue-tracking and project-management platform with a large, well-documented Cloud REST API.",
    "auth_methods": [
      "api_key",
      "basic",
      "jwt",
      "oauth2",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/",
    "mcp": {
      "status": "official",
      "url": "https://github.com/atlassian/atlassian-mcp-server"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.87,
    "agreement": 1.0,
    "grounding_rate": 0.71,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2",
          "other"
        ],
        "apis_guru_spec": [
          "basic",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "basic",
          "jwt",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "basic",
          "bearer_token",
          "jwt",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "large",
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/",
        "quote": "Generate an API token for Jira using your Atlassian Account",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.atlassian.com/cloud/jira/platform/basic-auth-for-rest-apis/",
        "quote": "Forge apps and Connect apps use more secure methods for authentication: OAuth 2.0 and JWT respectively.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/",
        "quote": "OAuth 2.0 (3LO) apps are created and managed in the developer console.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/",
        "quote": "Users trying to install an unapproved OAuth 2.0 integration are warned that the app has not yet been reviewed by Atlassian.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/atlassian/atlassian-mcp-server",
        "quote": "Official remote MCP server for Atlassian. Securely connect Jira, Confluence, Jira Service Management, Bitbucket, and Compass to Claude, ChatGPT, Cursor, VS Code, and other AI tools using OAuth 2.1 or API tokens.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/atlassian.com/jira/1001.0.0-SNAPSHOT/openapi.json",
        "quote": "487 endpoints (apis.guru catalog entry for atlassian.com/jira)",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/",
        "quote": "The Jira Cloud platform REST API enables you to interact with Jira Cloud programmatically.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/jira",
        "quote": "Composio catalog: auth ['OAUTH2', 'S2S_OAUTH2', 'API_KEY'], 102 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/atlassian.com/jira/1001.0.0-SNAPSHOT/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 487 operations, securitySchemes ['basic', 'oauth2']",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.atlassian.com/oauth/token/accessible-resources",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"code\":401,\"message\":\"Unauthorized\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "JIRA",
      "tools": 102,
      "auth": [
        "api_key",
        "oauth2",
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/jira"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 487
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Anyone can sign up for a free Atlassian/Jira account and generate an API token immediately at id.atlassian.com/manage/api-tokens, or register an OAuth 2.0 (3LO) app for free in the developer console (personal-use apps need no approval; public distribution requires Atlassian Marketplace review). REST API covers 487+ endpoints. Atlassian also publishes an official hosted MCP server (mcp.atlassian.com) supporting OAuth 2.1 and API tokens, GA Feb 2026.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "basic",
        "bearer_token",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "basic",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.88
    },
    "cost_usd": 0.28
  },
  {
    "id": 75,
    "name": "Asana",
    "category": "Productivity and Project Management",
    "hint": "developers.asana.com",
    "one_liner": "Asana is a work-management and project-tracking platform with a REST API for tasks, projects, and portfolios.",
    "auth_methods": [
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developers.asana.com/docs/authentication",
    "mcp": {
      "status": "official",
      "url": "https://mcp.asana.com/v2/mcp"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.85,
    "agreement": 1.0,
    "grounding_rate": 0.67,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "apis_guru_spec": [
          "bearer_token",
          "oauth2"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "composio_tools": "large",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.asana.com/docs/authentication",
        "quote": "PATs are generated in the developer console.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.asana.com/docs/quick-start",
        "quote": "authorization: Bearer ACCESS_TOKEN",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.asana.com/docs/personal-access-token",
        "quote": "You can generate a personal access token from the Asana developer console.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.asana.com/docs/quick-start",
        "quote": "The Asana API is a RESTful interface with predictable resource-oriented URLs, accepts JSON or form-encoded requests, returns JSON, and uses standard HTTP features.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/asana.com/1.0/openapi.json",
        "quote": "167 endpoints (OpenAPI spec, apis.guru mirror)",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.asana.com/docs/mcp-server",
        "quote": "Official Asana MCP server (V2) at https://mcp.asana.com/v2/mcp, requiring OAuth 2.0 authentication with a registered client ID and client secret",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/asana",
        "quote": "Composio catalog: auth ['OAUTH2'], 153 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/asana.com/1.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 167 operations, securitySchemes ['bearer_token', 'oauth2']",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://app.asana.com/api/1.0/users/me",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"errors\":[{\"message\":\"Not Authorized\",\"help\":\"For more information on API status codes and how to handle them, read the docs on errors: https://developers.asana.com/docs/errors\"}]}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://mcp.asana.com/v2/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "ASANA",
      "tools": 153,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/asana"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 167
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Free self-serve access: any Asana user can generate a Personal Access Token from the developer console (app.asana.com/0/my-apps) with no paid plan or approval required, and PATs are passed as Bearer tokens. OAuth2 is the recommended method for multi-user apps and is also what the official MCP server (V2, launched Feb 2026) uses. A separate Service Account auth method exists but is Enterprise-tier/admin-only and is not counted here since PAT/OAuth already provide self-serve access. API is REST, ~167 endpoints per OpenAPI spec.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.86
    },
    "cost_usd": 0.275
  },
  {
    "id": 76,
    "name": "Monday.com",
    "category": "Productivity and Project Management",
    "hint": "developer.monday.com",
    "one_liner": "Monday.com is a work OS / project-management platform with a GraphQL API for boards, items, and workflows, accessible via personal API tokens or OAuth2 apps.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "graphql",
    "api_breadth": "medium",
    "docs_url": "https://developer.monday.com/api-reference/docs/authentication",
    "mcp": {
      "status": "official",
      "url": "https://github.com/mondaycom/mcp"
    },
    "verdict": "green",
    "score": 95,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.82,
    "agreement": 1.0,
    "grounding_rate": 0.6,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2",
          "other"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "graphql",
        "pass1": "graphql"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "official",
        "github": "community",
        "pass2": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.monday.com/api-reference/docs/authentication",
        "quote": "The monday.com platform API utilizes personal V2 API tokens to authenticate requests and identify the user making the call.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developer.monday.com/api-reference/docs/basics",
        "quote": "The monday.com API is built with GraphQL, a flexible query language that allows you to return as much or as little data as you need.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/mondaycom/mcp",
        "quote": "Enable AI agents to work reliably - giving them secure access to structured data, tools to take action, and the context needed to make smart decisions.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.monday.com/apps/docs/oauth",
        "quote": "If you don't have an app, follow these steps to create an app in the monday UI and locate your client_id and client_secret.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://developer.monday.com/api-reference/docs/authentication",
        "quote": "If you don't have a monday.com account yet, create a free developer account to get an API token and start testing.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/monday",
        "quote": "Composio catalog: auth ['OAUTH2'], 125 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.monday.com/v2",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"errors\":[{\"message\":\"Not authenticated\",\"extensions\":{\"code\":\"NOT_AUTHENTICATED\"}}]}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "MONDAY",
      "tools": 125,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/monday"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Personal API tokens are free/self-serve via a developer sandbox account; OAuth2 apps require registering an app in the Developer Center (also self-serve, no approval needed to obtain client_id/secret for testing). Some user roles (viewers, disabled/unconfirmed accounts, student accounts) cannot access the API. Official MCP servers exist for both the monday platform (boards/items) and monday apps (dev tooling).",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2",
        "other"
      ],
      "access": "self_serve_free",
      "api_type": "graphql",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "graphql",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.265
  },
  {
    "id": 77,
    "name": "ClickUp",
    "category": "Productivity and Project Management",
    "hint": "clickup.com/api",
    "one_liner": "ClickUp is a productivity/project-management platform (tasks, docs, goals) with a REST API for managing workspace data.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developer.clickup.com/docs/authentication",
    "mcp": {
      "status": "community",
      "url": "https://developer.clickup.com/docs/connect-an-ai-assistant-to-clickups-mcp-server"
    },
    "verdict": "green",
    "score": 91,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.86,
    "agreement": 1.0,
    "grounding_rate": 0.71,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "small",
        "composio_tools": "large",
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.clickup.com/docs/authentication",
        "quote": "Add the token to the header: Authorization: {personal_token}",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.clickup.com/docs/authentication",
        "quote": "Personal tokens never expire.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.clickup.com/docs/rate-limits",
        "quote": "Free Forever, Unlimited, Business: 100 requests per minute per token",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developer.clickup.com/docs/connect-an-ai-assistant-to-clickups-mcp-server",
        "quote": "Public Beta: ClickUp's MCP server is currently in public beta, and we're actively seeking feedback",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developer.clickup.com/docs/authentication",
        "quote": "Add the token to the header: Authorization: {personal_token}",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.clickup.com/docs/authentication",
        "quote": "Users log into ClickUp, navigate to Settings > Apps, and click \"Generate\" or \"Regenerate\" under API Token.",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://developer.clickup.com/docs/connect-an-ai-assistant-to-clickups-mcp-server",
        "quote": "ClickUp's MCP Server is available on all plans.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/clickup",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 164 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/clickup.com/1.0.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 2 operations, securitySchemes []",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "CLICKUP",
      "tools": 164,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/clickup"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 2
    },
    "probe": {
      "status": 400,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Personal API token (pk_ prefix) is free, self-serve, never expires — obtainable by any ClickUp user via Settings > Apps, including on the free tier. OAuth2 apps also self-serve for workspace owners/admins, no formal review mentioned. Rate limits apply on free tier too (100 req/min), so not paid-gated. ClickUp also publishes an official first-party MCP server (mcp.clickup.com), in public beta, available on all plans. api_breadth marked medium based on typical ClickUp API scope (tasks, lists, folders, spaces, goals, docs, webhooks, etc. — roughly 100+ endpoints); apis.guru spec showing only 2 endpoints appears stale/incomplete and was not relied on.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.261
  },
  {
    "id": 78,
    "name": "Coda",
    "category": "Productivity and Project Management",
    "hint": "coda.io/developers",
    "one_liner": "Coda (rebranded \"Superhuman Docs\" after 2025 Grammarly/Superhuman deal) is a docs/spreadsheet hybrid workspace with a free REST API and an official MCP server for AI agent integration.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://docs.superhuman.com/developers/apis/v1",
    "mcp": {
      "status": "official",
      "url": "https://docs.superhuman.com/apis/mcp"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.55,
    "agreement": 0.93,
    "grounding_rate": 0.0,
    "needs_human": true,
    "needs_human_reasons": [
      "only 0% of quotes grounded in cited pages"
    ],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "apis_guru_spec": [
          "api_key"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "composio_tools": "medium",
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.superhuman.com/developers/apis/v1",
        "quote": "'Authorization': 'Bearer <your API token>'",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.superhuman.com/developers",
        "quote": "Bearer token authentication via API tokens.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://docs.superhuman.com/developers/apis/v1",
        "quote": "We make the Superhuman Docs API available to all of our users free of charge, in both free and paid workspaces.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.superhuman.com/developers",
        "quote": "RESTful API (v1) with a base endpoint at https://coda.io/apis/v1",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.superhuman.com/developers",
        "quote": "developers may also want to consider using the Superhuman Docs MCP server",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.superhuman.com/apis/mcp",
        "quote": "HTTP 401 Unauthorized (live vendor-hosted MCP endpoint requiring auth, at docs.superhuman.com)",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.superhuman.com/developers/apis/v1",
        "quote": "all API scripts should check for HTTP 429 Too Many Requests errors and back off and retry the request",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/coda",
        "quote": "Composio catalog: auth ['API_KEY'], 110 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/codat.io/accounting/2.1.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 127 operations, securitySchemes ['api_key']",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://coda.io/apis/v1/docs",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: {\"statusCode\":401,\"statusMessage\":\"Unauthorized\",\"message\":\"Unauthorized\"}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://docs.superhuman.com/apis/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "CODA",
      "tools": 110,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/coda"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 127
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Coda rebranded to \"Superhuman Docs\" in 2026 following the Grammarly/Superhuman merger; official docs now live at docs.superhuman.com (coda.io/developers 307-redirects there). API base endpoint remains https://coda.io/apis/v1. Auth is a personal API token sent as an HTTP Bearer token (functionally an API key); OAuth2+PKCE is documented for the MCP server per vendor help-center/blog pages (help.superhuman.com, blog.superhuman.com) referenced via search but not directly fetchable in this pass (403/401). api_breadth estimated \"small\" from long-standing knowledge of the Coda API's ~40-50 operations (Docs/Pages/Tables/Rows/Formulas/Controls/Permissions/Analytics); the pre-computed apis.guru spec pointed to an unrelated codat.io accounting API and was disregarded as a lookup mismatch.",
    "pass1": {
      "auth_methods": [
        "bearer_token",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.72
    },
    "cost_usd": 0.39899999999999997
  },
  {
    "id": 79,
    "name": "Smartsheet",
    "category": "Productivity and Project Management",
    "hint": "smartsheet.com/developers",
    "one_liner": "Smartsheet is a work management/collaboration platform (sheets, projects, workflows) with a REST API and official MCP server.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developers.smartsheet.com/",
    "mcp": {
      "status": "official",
      "url": "https://developers.smartsheet.com/ai-mcp/smartsheet/mcp-server"
    },
    "verdict": "yellow",
    "score": 77,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.91,
    "agreement": 1.0,
    "grounding_rate": 0.86,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.smartsheet.com/api/smartsheet/guides/basics/authentication",
        "quote": "If an unauthorized user gets a copy of this token, they will be able to access all Smartsheet data that you have access to, both to read and modify on your behalf.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.smartsheet.com/api/smartsheet/guides/basics/authentication",
        "quote": "You can generate access tokens in the Smartsheet UI.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.smartsheet.com/api/smartsheet/introduction",
        "quote": "Required plan: Business, Enterprise, or Advanced Work Management",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developers.smartsheet.com/register",
        "quote": "The email address used to register for Developer Tools must belong to an existing licensed Smartsheet user on a Business plan or higher.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.smartsheet.com/ai-mcp/smartsheet/mcp-server",
        "quote": "Unlock the power of AI by connecting Smartsheet with Claude, ChatGPT, and other AI clients through the Smartsheet MCP (Model Context Protocol) server.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.smartsheet.com/ai-mcp/smartsheet/mcp-server",
        "quote": "Required plan: Business, Enterprise, or Advanced Work Management",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.smartsheet.com/api/smartsheet/introduction",
        "quote": "REST base URL of https://api.smartsheet.com/2.0",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.smartsheet.com/2.0/sheets",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: {   \"errorCode\" : 1004,   \"message\" : \"You are not authorized to perform this action.\",   \"refId\" : \"inzaz2\" }",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "API and official MCP server both gated behind Business/Enterprise/Advanced Work Management plans; no free-tier credential path exists. Free trial accounts explicitly cannot generate API access tokens.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.85
    },
    "cost_usd": 0.349
  },
  {
    "id": 80,
    "name": "Harvest",
    "category": "Productivity and Project Management",
    "hint": "harvestapp.com (help.getharvest.com/api-v2)",
    "one_liner": "Harvest is a time tracking, invoicing, and project-budgeting tool for teams and freelancers.",
    "auth_methods": [
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://help.getharvest.com/api-v2/",
    "mcp": {
      "status": "official",
      "url": "https://support.getharvest.com/hc/en-us/articles/46293697226381-Harvest-MCP"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.79,
    "agreement": 0.96,
    "grounding_rate": 0.57,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "small",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://help.getharvest.com/api-v2/authentication-api/authentication/authentication/",
        "quote": "The API can be accessed by creating a Personal Access Token from the Developers section of Harvest ID.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://help.getharvest.com/api-v2/authentication-api/authentication/authentication/",
        "quote": "register an OAuth2 Application, also known as an OAuth2 Client",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://help.getharvest.com/api-v2/authentication-api/authentication/authentication/",
        "quote": "After creating it you'll be provided with a random token and a list of your account IDs.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://help.getharvest.com/api-v2/",
        "quote": "the current API V2 documentation",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://www.getharvest.com/pricing",
        "quote": "1 seat, 2 projects, Time tracking, Invoicing, Expense tracking, Mac & iOS apps ... $0 forever",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://support.getharvest.com/hc/en-us/articles/46293697226381-Harvest-MCP",
        "quote": "The Harvest MCP is the connection that gives an MCP-compatible assistant — such as Claude — controlled access to your Harvest account",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://api.harvestapp.com/mcp",
        "quote": "405 Method Not Allowed",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/harvest",
        "quote": "Composio catalog: auth ['OAUTH2'], 57 tools",
        "grounded": "registry"
      },
      {
        "field": "mcp",
        "url": "https://support.getharvest.com/hc/en-us/articles/46293697226381-Harvest-MCP",
        "quote": "MCP initialize POST -> HTTP 403 (text/html; charset=UTF-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "HARVEST",
      "tools": 57,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/harvest"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Harvest API v2 uses Bearer-token auth for both Personal Access Tokens (self-serve, created in the Harvest ID Developers portal, no plan restriction) and OAuth2 apps (self-registered, for multi-account integrations). Harvest has a permanently free plan (1 seat/2 projects) so a developer can get API credentials without paying. Harvest also ships an official remote MCP server (api.harvestapp.com/mcp) documented in its help center, distinct from several community MCP implementations on GitHub. API surface is moderate: ~14 resource groups (Clients, Invoices, Estimates, Expenses, Tasks, Timesheets, Projects, Roles, Users, Reports, PTO) with standard CRUD, estimated 40-50 endpoints total.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.43099999999999994
  },
  {
    "id": 81,
    "name": "Stripe",
    "category": "Finance and Fintech",
    "hint": "stripe.com/docs/api",
    "one_liner": "Stripe is a payments and financial infrastructure platform offering a REST API for payments, billing, Connect marketplaces, issuing, and treasury.",
    "auth_methods": [
      "api_key",
      "basic",
      "bearer_token",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://docs.stripe.com/api",
    "mcp": {
      "status": "official",
      "url": "https://mcp.stripe.com"
    },
    "verdict": "green",
    "score": 100,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.89,
    "agreement": 0.96,
    "grounding_rate": 0.78,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "apis_guru_spec": [
          "api_key"
        ],
        "unauth_probe": [
          "basic"
        ],
        "pass2": [
          "basic",
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "large",
        "composio_tools": "large",
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "official",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.stripe.com/api/authentication",
        "quote": "The Stripe API authenticates requests using HTTP Basic Auth. Provide your API key as the basic auth username value. You don't need to provide a password.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.stripe.com/mcp",
        "quote": "Stripe's MCP server uses OAuth to authorise clients according to the MCP specification",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.stripe.com/keys",
        "quote": "When you sign up for a Stripe account, we create three types of API keys for you",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.stripe.com/keys",
        "quote": "Sandbox keys start with `pk_test_` for publishable keys, `rk_test_` for restricted keys and `sk_test_` for secret keys.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.stripe.com/api",
        "quote": "The Stripe API is organized around REST. Our API has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.stripe.com/mcp",
        "quote": "The Stripe Model Context Protocol (MCP) server provides tools that AI agents can use to interact with the Stripe API and search Stripe's knowledge base, including documentation and support articles.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.stripe.com/keys",
        "quote": "Build and test: Create or select a sandbox and use its test keys.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.stripe.com/api/authentication",
        "quote": "If you need to authenticate using bearer auth (for example, for a cross-origin request), use `-H \"Authorization: Bearer ,[object Object],\"` instead of `-u ,[object Object]`.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/stripe.com/2022-11-15/openapi.json",
        "quote": "446 endpoints (apis.guru catalog entry for stripe.com OpenAPI spec)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/stripe",
        "quote": "Composio catalog: auth ['API_KEY', 'OAUTH2'], 432 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/stripe.com/2022-11-15/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 446 operations, securitySchemes ['basic', 'bearer_token']",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.stripe.com/v1/customers",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Basic realm=\"Stripe\"; body: {   \"error\": {     \"message\": \"You did not provide an API key. You need to provide your API key in the Authorization header, using Bearer auth (e.g. 'Authorization: Bearer YOUR_SECRET_KEY'). See https",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://mcp.stripe.com",
        "quote": "MCP initialize POST -> HTTP 401 (application/json); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "STRIPE",
      "tools": 432,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/stripe"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 446
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Basic realm=\"Stripe\"",
      "inferred": "basic"
    },
    "notes": "Primary auth for the REST API is HTTP Basic Auth with the API key as username (bearer auth also explicitly supported as an alternative). OAuth2 applies to the official hosted MCP server (mcp.stripe.com) and to Stripe Connect platform flows; it is not the primary REST API auth mechanism. Signup is fully self-serve and free (sandbox/test-mode keys issued immediately on account creation, no approval needed for test mode). API breadth is large (446 endpoints per apis.guru OpenAPI catalog; docs.stripe.com/api lists dozens of resource families including Core, Payments, Billing, Connect, Issuing, Treasury, Tax). MCP is officially vendor-published and hosted at mcp.stripe.com with documented setup for Claude Code, Cursor, VS Code, ChatGPT, and Codex.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "basic",
        "bearer_token",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.93
    },
    "cost_usd": 0.459
  },
  {
    "id": 82,
    "name": "Plaid",
    "category": "Finance and Fintech",
    "hint": "plaid.com/docs",
    "one_liner": "Plaid is a fintech API platform that lets developers securely connect apps to users' bank accounts for data, payments, and identity verification.",
    "auth_methods": [
      "api_key",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://plaid.com/docs/api/",
    "mcp": {
      "status": "official",
      "url": "https://docs.composio.dev/toolkits/plaid_mcp"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.81,
    "agreement": 0.93,
    "grounding_rate": 0.67,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_trial vs self_serve_free)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "other"
        ],
        "apis_guru_spec": [
          "api_key"
        ],
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_trial"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "composio_tools": "small",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "composio_wraps_mcp": "official",
        "github": "community",
        "pass2": "community",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://plaid.com/docs/api/",
        "quote": "Almost all Plaid API endpoints require a client_id and secret. These may be sent either in the request body or in the headers PLAID-CLIENT-ID and PLAID-SECRET.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://plaid.com/docs/quickstart/",
        "quote": "Get started with test credentials and life-like data.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://plaid.com/docs/api/",
        "quote": "create an account on the Plaid Dashboard. Once you've completed the signup process and acknowledged our terms, we'll provide a live client_id and secret via the Dashboard.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://plaid.com/docs/quickstart/",
        "quote": "Get started with test credentials and life-like data.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://api.apis.guru/v2/specs/plaid.com/2020-09-14_1.334.0/openapi.json",
        "quote": "198 endpoints",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.composio.dev/toolkits/plaid_mcp",
        "quote": "wraps_official_mcp: true",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/plaid_mcp",
        "quote": "Composio catalog: auth ['DCR_OAUTH'], 5 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/plaid.com/2020-09-14_1.334.0/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 198 operations, securitySchemes ['api_key']",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "PLAID_MCP",
      "tools": 5,
      "auth": [
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/plaid_mcp"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 198
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Core Plaid API auth is client_id/secret (api_key style), sent via headers PLAID-CLIENT-ID/PLAID-SECRET or request body; not OAuth2/bearer for developer access (Plaid Link uses OAuth for end-user bank login, which is a separate concern from developer API auth). Free self-serve Sandbox account obtainable via Dashboard signup with no sales contact required; Production access requires additional verification/compliance review per Plaid policy but is still self-serve initiated. MCP: no official vendor-published MCP server page could be confirmed (docs/mcp and docs/ai-tools paths 404'd); registry and third-party (Composio) list a community/wrapped MCP server plus several community GitHub MCP repos (e.g. plaid/ai-coding-toolkit, 304techmaven/plaid-mcp-server), so classified as community pending direct confirmation.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.82
    },
    "cost_usd": 0.361
  },
  {
    "id": 83,
    "name": "Binance",
    "category": "Finance and Fintech",
    "hint": "binance-docs.github.io",
    "one_liner": "Binance is a cryptocurrency exchange offering spot, margin, futures, and wallet trading via a large REST API.",
    "auth_methods": [
      "api_key",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developers.binance.com/docs/binance-spot-api-docs/rest-api/general-info",
    "mcp": {
      "status": "community",
      "url": "https://github.com/AnalyticAce/binance-mcp-server"
    },
    "verdict": "yellow",
    "score": 98,
    "blocker": "other",
    "model_verdict": "yellow",
    "confidence": 0.59,
    "agreement": 1.0,
    "grounding_rate": 0.0,
    "needs_human": true,
    "needs_human_reasons": [
      "only 0% of quotes grounded in cited pages",
      "most cited pages unreachable"
    ],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key",
          "other"
        ],
        "pass1": [
          "api_key",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "large",
        "pass1": "large"
      },
      "mcp": {
        "mcp_registry": "community",
        "github": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developers.binance.com/docs/binance-spot-api-docs/rest-api/general-info",
        "quote": "Signatures generated using HMAC are not case-sensitive.",
        "grounded": "unreachable"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.binance.com/docs/binance-spot-api-docs/rest-api/general-info",
        "quote": "It is highly recommended to use Ed25519 API keys",
        "grounded": "unreachable"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.binance.com/docs/binance-spot-api-docs/rest-api/endpoint-security-type",
        "quote": "Secure endpoints require a valid API key to be specified and authenticated.",
        "grounded": "unreachable"
      },
      {
        "field": "access",
        "url": "https://www.binance.com/en/support/faq/how-to-create-api-360002502072",
        "quote": "before creating an API Key, you need to make a deposit of any amount to your Spot Wallet to activate your account and complete identity verification",
        "grounded": "unreachable"
      },
      {
        "field": "access",
        "url": "https://developers.binance.com/docs/binance-spot-api-docs/rest-api/general-info",
        "quote": "API keys can be created on the API Management page of your Binance account.",
        "grounded": "unreachable"
      },
      {
        "field": "api_type",
        "url": "https://developers.binance.com/docs/binance-spot-api-docs/rest-api/general-info",
        "quote": "Secure endpoints require a valid API key to be specified and authenticated.",
        "grounded": "unreachable"
      },
      {
        "field": "verdict",
        "url": "https://www.binance.com/en/support/faq/how-to-create-api-360002502072",
        "quote": "before creating an API Key, you need to make a deposit of any amount to your Spot Wallet to activate your account and complete identity verification",
        "grounded": "unreachable"
      },
      {
        "field": "mcp",
        "url": "https://github.com/AnalyticAce/binance-mcp-server",
        "quote": "binance-mcp-server (47 stars)",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 400,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Docs moved from binance-docs.github.io to developers.binance.com (github.io now redirects). REST API is free self-serve via the Binance account's API Management page, but creating a key requires 2FA, a Spot Wallet deposit, and identity (KYC) verification first — a real-world friction point beyond typical dev-account signup, hence yellow rather than green. Auth is a static API key sent via X-MBX-APIKEY header plus a request signature (HMAC, RSA, or Ed25519) — not OAuth2/JWT/bearer/basic. API surface is very large (spot, margin, futures, options, wallet, sub-account endpoints combined run into the hundreds). No vendor-published MCP server found; several community MCP servers exist on GitHub and in the MCP registry (all community-maintained, none official).",
    "pass1": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "other"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "other",
      "confidence": 0.75
    },
    "cost_usd": 0.30300000000000005
  },
  {
    "id": 84,
    "name": "Paygent Connect",
    "category": "Finance and Fintech",
    "hint": "paygent (NMI-powered)",
    "one_liner": "Paygent Connect appears to be a small, NMI-powered white-label payment gateway/reseller, but no official, independently verifiable developer documentation site for this specific branded product could be located.",
    "auth_methods": [
      "api_key"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "unknown",
    "docs_url": "https://docs.nmi.com/",
    "mcp": {
      "status": "official",
      "url": null
    },
    "verdict": "yellow",
    "score": 72,
    "blocker": "undocumented",
    "model_verdict": "red",
    "confidence": 0.72,
    "agreement": 0.83,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "formula verdict yellow, model said red"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "other"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "admin_approval"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "unknown",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "api_type",
        "url": "https://docs.nmi.com/reference/getting-started",
        "quote": "Manage API authentication, user access, and event-driven integrations",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://paygent.com",
        "quote": "",
        "grounded": "unreachable"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 0,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Could not locate an official, independently-documented \"Paygent Connect\" product. Multiple unrelated entities share the \"Paygent\" name (Japanese Paygent Co./GMO-affiliated payment gateway at pay-gent.com with no public dev docs found; api.paygent.tech, an unrelated crypto/AI-agent wallet product; and generic \"paygent\" WooCommerce/gomerchant integrations for the Japanese gateway). The hint \"NMI-powered\" suggests Paygent Connect is a small white-label/ISV reseller built on NMI's gateway platform (common for ISOs), which would mean the underlying tech is NMI's Direct Post/Query REST API (api_key-style security-key auth) but issued under Paygent's own branding after merchant underwriting — a pattern typical of NMI resellers, not self-serve. The paygent.com domain returned no response (status 0) in the deterministic probe and no docs page was found. All fields above are best-effort inference from the NMI white-label reseller pattern, not verified against an actual Paygent Connect developer portal — confidence is low and this should be re-verified with a live fetch of the actual Paygent Connect vendor domain if/when it is identified. MCP registry hits (\"com.obsmetrics.paygent/agents\", \"io.github.djautomd-lab/aipaygent\") could not be confirmed as related to this specific product, so mcp.status is reported as unknown rather than guessed.",
    "pass1": {
      "auth_methods": [
        "other"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "undocumented"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "red",
      "blocker": "undocumented",
      "confidence": 0.15
    },
    "cost_usd": 0.504
  },
  {
    "id": 85,
    "name": "iPayX",
    "category": "Finance and Fintech",
    "hint": "ipayx.ai/docs",
    "one_liner": "iPayX is a FINTRAC-registered FX forensic audit API/MCP service that scores bank and card FX rates against live mid-market rates across 300+ currencies.",
    "auth_methods": [
      "bearer_token"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://www.ipayx.ai/docs/api",
    "mcp": {
      "status": "community",
      "url": "https://www.ipayx.ai/docs/mcp-server"
    },
    "verdict": "green",
    "score": 91,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.52,
    "agreement": 0.83,
    "grounding_rate": 0.0,
    "needs_human": true,
    "needs_human_reasons": [
      "only 0% of quotes grounded in cited pages"
    ],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "bearer_token"
        ],
        "pass1": [
          "api_key"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://www.ipayx.ai/docs/api",
        "quote": "Every request requires a Bearer token in the `Authorization` header. Keys start with `ipx_live_`.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://www.ipayx.ai/docs/mcp-server",
        "quote": "Method: HTTP Bearer token in `Authorization` header. Format: `ipx_live_xxxxx` (production)",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://www.ipayx.ai/pricing",
        "quote": "5 audits, lifetime",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://www.ipayx.ai/pricing",
        "quote": "Banks and institutions: contact sales.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://www.ipayx.ai/docs/api",
        "quote": "POST /audit – Forensic analysis of individual transactions, returning a 0–10 score and hidden spread calculation",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://www.ipayx.ai/docs/api",
        "quote": "POST /audit ... GET /rates ... POST /audit/document",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.ipayx.ai/docs/mcp-server",
        "quote": "Production MCP: `https://hvujzsdwcoweirroubeh.supabase.co/functions/v1/mcp-server`",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://www.ipayx.ai/docs/mcp-server",
        "quote": "How to get a key: Open your iPayX dashboard → API keys",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.ipayx.ai/docs/mcp-server",
        "quote": "10 audits / day per API key (free)",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 200,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "iPayX is a FINTRAC-registered FX forensic audit API (MSB C10001283) that audits bank/card-network FX rates vs live mid-market across 300+ currencies. Self-serve signup grants a free API key (5 lifetime audits via REST, 10/day via MCP free tier), with Bearer token auth (`ipx_live_...`). Small REST surface (3 endpoints: POST /audit, GET /rates, POST /audit/document) plus webhooks. Vendor publishes an official MCP server alongside the REST API. Production/enterprise FINTRAC-signed reporting for banks routes to sales, but that's an enterprise upsell, not a gate on basic self-serve API access.",
    "pass1": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.75
    },
    "cost_usd": 0.292
  },
  {
    "id": 86,
    "name": "QuickBooks",
    "category": "Finance and Fintech",
    "hint": "developer.intuit.com",
    "one_liner": "QuickBooks Online is Intuit's cloud accounting platform, exposing a REST Accounting API (plus separate Payments and Payroll APIs) for invoices, expenses, customers, and financial reporting.",
    "auth_methods": [
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://developer.intuit.com/app/developer/qbo/docs/get-started",
    "mcp": {
      "status": "community",
      "url": "https://github.com/NyxToolsDev/quickbooks-mcp-server"
    },
    "verdict": "green",
    "score": 98,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.7,
    "agreement": 1.0,
    "grounding_rate": 0.4,
    "needs_human": true,
    "needs_human_reasons": [
      "only 40% of quotes grounded in cited pages"
    ],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://www.getknit.dev/blog/quickbooks-online-api-integration-guide-in-depth",
        "quote": "OAuth 2.0 allows users to log into their QuickBooks account via the OAuth 2.0 flow.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://www.getknit.dev/blog/quickbooks-online-api-integration-guide-in-depth",
        "quote": "Each entity supports full and sparse update operations",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://quickbooks.api.intuit.com/v3/company/1/companyinfo/1",
        "quote": "Bearer realm=\"Intuit\"",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://www.getknit.dev/blog/quickbooks-online-api-integration-guide-in-depth",
        "quote": "QuickBooks Online imposes rate limits to restrict the number of requests in a specified timeframe.",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.composio.dev/toolkits/quickbooks",
        "quote": "wraps_official_mcp: false",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/quickbooks",
        "quote": "Composio catalog: auth ['OAUTH2'], 114 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://quickbooks.api.intuit.com/v3/company/1/companyinfo/1",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Bearer realm=\"Intuit\"; body: <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> <IntuitResponse time=\"2026-09-16T13:21:18.009-07:00\" xmlns=\"http://schema.intuit.com/finance/v3\">     <Fault type=\"AUTHENTICATION\">         <Err",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "QUICKBOOKS",
      "tools": 114,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/quickbooks"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Bearer realm=\"Intuit\"",
      "inferred": "bearer_token"
    },
    "notes": "developer.intuit.com is a JS-rendered SPA that WebFetch could not extract text from (pages returned as truncated/empty), so auth/getting-started claims lean on the unauthenticated API probe (401 + WWW-Authenticate: Bearer realm=\\\"Intuit\\\", confirming OAuth2 bearer tokens) and secondary sources (Intuit's own Medium/help-article summaries, getknit.dev) rather than a directly quoted primary page. Multiple independent secondary sources consistently describe: free self-serve signup at developer.intuit.com, automatic sandbox company creation (up to 5 per account), OAuth 2.0 Authorization Code flow exclusively (no API keys/basic auth), Client ID/Secret issued per app, and a rate limit around 500 req/min/company. QuickBooks spans multiple APIs (Accounting ~30 entities with CRUD+query, Payments, Payroll, Reports), pushing combined endpoint count into the hundreds (Composio wraps 114 discrete tools alone), hence \"large\". MCP support is community-only (caribooks/quickbooks, NyxToolsDev/quickbooks-mcp-server on registries); no official Intuit-published MCP server found. Confidence lowered because the primary developer.intuit.com pages could not be directly fetched/quoted within this pass.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.65
    },
    "cost_usd": 0.455
  },
  {
    "id": 87,
    "name": "Xero",
    "category": "Finance and Fintech",
    "hint": "developer.xero.com",
    "one_liner": "Xero is cloud accounting/bookkeeping software (invoicing, payroll, bank reconciliation) with a REST API for building financial integrations.",
    "auth_methods": [
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developer.xero.com",
    "mcp": {
      "status": "official",
      "url": "https://github.com/XeroAPI/xero-mcp-server"
    },
    "verdict": "green",
    "score": 97,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.93,
    "agreement": 1.0,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "apis_guru_spec": [
          "oauth2"
        ],
        "pass2": [
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "composio_tools": "medium",
        "pass2": "medium",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://developer.xero.com/faq/getting-started",
        "quote": "The Xero API does not support basic API Key authentication.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.xero.com/faq/getting-started",
        "quote": "The first step is to sign up for a free Xero account.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.xero.com/faq/getting-started",
        "quote": "The quickest way to try out the API is to set up your demo company and dive into the API Explorer.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://api.xero.com/api.xro/2.0/Organisation",
        "quote": "{\"Type\":null,\"Title\":\"Unauthorized\",\"Status\":401,\"Detail\":\"AuthenticationUnsuccessful\",\"Instance\":\"c3d029bd-75c1-4486-9178-d9c98a83a756\",\"Extensions\":{}}",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/XeroAPI/xero-mcp-server",
        "quote": "An MCP server that integrates with the MCP protocol",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://developer.xero.com/faq/getting-started",
        "quote": "OAuth 1.0a is in the process of being deprecated and OAuth 2.0 is required for all new integrations.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/xero",
        "quote": "Composio catalog: auth ['OAUTH2'], 53 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/xero.com/xero_accounting/2.9.4/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 224 operations, securitySchemes ['oauth2']",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.xero.com/api.xro/2.0/Organisation",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Bearer; body: {\"Type\":null,\"Title\":\"Unauthorized\",\"Status\":401,\"Detail\":\"AuthenticationUnsuccessful\",\"Instance\":\"c3d029bd-75c1-4486-9178-d9c98a83a756\",\"Extensions\":{}}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "XERO",
      "tools": 53,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/xero"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 224
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Bearer",
      "inferred": "bearer_token"
    },
    "notes": "Xero's public Accounting/Payroll REST APIs use OAuth2 only (no API-key/basic auth). Any developer can sign up for a free Xero account, register an app in the developer portal to get a Client ID/Secret immediately, and build/test freely against a free demo company via the API Explorer — no paywall or approval needed to start developing. Publishing an app for broad public/production use (beyond the developer's own demo/trial orgs) goes through Xero's App Store review, and a premium 'Custom Connections' feature (client_credentials grant, no user consent screen) is a paid add-on — but base API access and OAuth2 authorization-code development is self-serve free. apis.guru lists 224 accounting-API endpoints (medium breadth). Xero publishes an official MCP server (@xeroapi/xero-mcp-server, MIT licensed, under the XeroAPI GitHub org) that runs locally via OAuth2 Custom Connections credentials.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.72
    },
    "cost_usd": 0.291
  },
  {
    "id": 88,
    "name": "Brex",
    "category": "Finance and Fintech",
    "hint": "developer.brex.com",
    "one_liner": "Brex is a corporate card and spend-management platform offering a REST API (cards, expenses, transactions, budgets, users) plus an official MCP server for agent access.",
    "auth_methods": [
      "api_key",
      "bearer_token",
      "oauth2"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "medium",
    "docs_url": "https://developer.brex.com",
    "mcp": {
      "status": "official",
      "url": "https://developer.brex.com/docs/mcp"
    },
    "verdict": "red",
    "score": 79,
    "blocker": "partner_gate",
    "model_verdict": "yellow",
    "confidence": 0.8,
    "agreement": 0.93,
    "grounding_rate": 0.71,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (partner_gated vs admin_approval)",
      "formula verdict red, model said yellow"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "apis_guru_spec": [
          "api_key"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "medium",
        "composio_tools": "medium",
        "pass2": "medium",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official"
      }
    },
    "evidence": [
      {
        "field": "api_type",
        "url": "https://developer.brex.com",
        "quote": "Brex APIs use the REST architecture, are defined using the OpenAPI specification",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.brex.com/guides/partner_authentication",
        "quote": "only for Brex developer partners",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.brex.com/guides/quickstart",
        "quote": "This guide assumes you are a Brex customer with admin access to your dashboard.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://developer.brex.com/guides/partner_authentication",
        "quote": "Please contact our developer support team to be issued a client ID and client secret for partner authentication.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developer.brex.com/docs/mcp",
        "quote": "MCP clients that support OAuth will automatically initiate a browser-based authorization flow when you first connect.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developer.brex.com/docs/authentication/",
        "quote": "Authorization: \"Bearer {{user_token}}\"",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/brex.io/2021.12/openapi.json",
        "quote": "54 endpoints (apis.guru OpenAPI spec index for brex.io)",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/brex",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 84 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/brex.io/2021.12/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 54 operations, securitySchemes ['api_key']",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "BREX",
      "tools": 84,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/brex"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 54
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Two distinct credential paths. (1) Existing Brex customers: an account/card admin logs into dashboard.brex.com, accepts a developer API agreement, and self-issues a bearer token (90-day expiry, scoped) from Settings > Developer — no sandbox, no free signup for non-customers. (2) Third-party/partner integrations: OAuth2 (authorization_code and client_credentials grants) requires contacting Brex developer support to be issued a client ID/secret as a registered partner — this is the path relevant to building a general-purpose agent toolkit and is gated. Brex also publishes an official hosted MCP server (api.brex.com/mcp) supporting both OAuth (per-user, browser flow, RFC 7591 dynamic client registration) and bearer-token auth for non-OAuth MCP clients. API is REST/OpenAPI-based (~54 endpoints per apis.guru spec) covering cards, expenses, transactions, users, budgets, etc.",
    "pass1": {
      "auth_methods": [
        "bearer_token",
        "oauth2"
      ],
      "access": "partner_gated",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "partner_gate"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token",
        "oauth2"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "partner_gate",
      "confidence": 0.72
    },
    "cost_usd": 0.329
  },
  {
    "id": 89,
    "name": "Ramp",
    "category": "Finance and Fintech",
    "hint": "docs.ramp.com",
    "one_liner": "Ramp is a corporate card, expense management, bill pay, and accounting-automation platform for businesses, with a developer REST API and an official hosted MCP server for AI agents.",
    "auth_methods": [
      "oauth2"
    ],
    "access": "partner_gated",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://docs.ramp.com/developer-api/v1/overview",
    "mcp": {
      "status": "official",
      "url": "https://mcp.ramp.com/mcp"
    },
    "verdict": "red",
    "score": 65,
    "blocker": "partner_gate",
    "model_verdict": "yellow",
    "confidence": 0.73,
    "agreement": 0.82,
    "grounding_rate": 0.77,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs partner_gated)",
      "formula verdict red, model said yellow"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "oauth2"
        ],
        "pass2": [
          "oauth2"
        ],
        "pass1": [
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "partner_gated",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "large",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://support.ramp.com/accessing-the-developer-api",
        "quote": "Client ID and Client Secret",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://support.ramp.com/accessing-the-developer-api",
        "quote": "onboard production customers through OAuth",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.ramp.com/developer/v1/transactions",
        "quote": "Access token with given access_token not found",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://support.ramp.com/hc/en-us/articles/46681939909907-Accessing-the-Developer-API",
        "quote": "Admin access is required",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://support.ramp.com/accessing-the-developer-api",
        "quote": "Request access using the sandbox access form",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://ramp.com/developer-api",
        "quote": "One platform, three ways in.",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://docs.ramp.com/openapi/developer-api.json",
        "quote": "\"security\": [ { \"oauth2\": [\"accounting:read\"] } ]",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://support.ramp.com/ramp-mcp",
        "quote": "Any MCP-compatible AI client can connect using the server URL `https://mcp.ramp.com/mcp`.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://support.ramp.com/ramp-mcp",
        "quote": "Your Ramp permissions come with you.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://ramp.com/developer-api",
        "quote": "Dedicated partner manager",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://ramp.com/developer-api",
        "quote": "Embed Ramp's full spend management stack directly into your platform via API.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.ramp.com",
        "quote": "api.ramp.com/developer/v1",
        "grounded": "not_grounded"
      },
      {
        "field": "one_liner",
        "url": "https://ramp.com",
        "quote": "Time and money-saving corporate cards, bill payments, accounting automation",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/ramp",
        "quote": "Composio catalog: auth ['OAUTH2'], 88 tools",
        "grounded": "registry"
      },
      {
        "field": "mcp",
        "url": "https://mcp.ramp.com/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "RAMP",
      "tools": 88,
      "auth": [
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/ramp"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Ramp has a substantial official REST API (docs.ramp.com/developer-api, api.ramp.com/developer/v1) covering transactions, cards, bills, vendors, reimbursements, purchase orders, trips, accounting sync (Accounting API alone has ~45-50 endpoints per OpenAPI spec sampling; Composio's toolkit wraps 88 tools). Auth is OAuth2 only: a business Admin/Business Owner creates a \"Developer app\" in-app and enables the client_credentials grant for server-to-server access to their own data (self-serve within an existing paid Ramp business account); authorization_code/OAuth is used when onboarding other businesses. Building an integration that serves OTHER Ramp businesses (the agent-toolkit case) requires either the sandbox access form (self-serve, ~1 min provisioning, pre-populated sandbox business) for testing, then explicitly \"apply for production access,\" or going through Ramp's Technology Partner Program (contact-sales form) for embedded/integration partnerships - hence partner_gated/yellow rather than fully self-serve. Notably Ramp also ships an OFFICIAL hosted MCP server (mcp.ramp.com/mcp, one-click install for Claude/ChatGPT) that proxies the authenticated end-user's own Ramp permissions - this is a strong, low-friction path for an agent toolkit even though the raw REST API has partner gating for multi-tenant production use. api_breadth marked \"large\" with moderate confidence only - could not get an exact total endpoint count within budget (OpenAPI spec fetch was truncated to the Accounting sub-API).",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "partner_gated",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "yellow",
      "blocker": "partner_gate",
      "confidence": 0.55
    },
    "cost_usd": 0.59
  },
  {
    "id": 90,
    "name": "PitchBook",
    "category": "Finance and Fintech",
    "hint": "pitchbook.com (research API)",
    "one_liner": "PitchBook is a private-market financial data platform (companies, deals, funds, investors, valuations) offering a REST API as a paid, contract-gated add-on to its subscription platform.",
    "auth_methods": [
      "api_key"
    ],
    "access": "partner_gated",
    "api_type": "rest",
    "api_breadth": "large",
    "docs_url": "https://api.pitchbook.com/api-docs",
    "mcp": {
      "status": "none",
      "url": null
    },
    "verdict": "red",
    "score": 60,
    "blocker": "partner_gate",
    "model_verdict": "red",
    "confidence": 0.8,
    "agreement": 1.0,
    "grounding_rate": 0.62,
    "needs_human": true,
    "needs_human_reasons": [
      "gated/no-API finding with weak grounding needs a human eye"
    ],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key"
        ]
      },
      "access": {
        "pass2": "partner_gated",
        "pass1": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "large",
        "pass1": "unknown"
      },
      "mcp": {
        "pass2": "none",
        "pass1": "none"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://pipeline.zoominfo.com/sales/pitchbook-api-review",
        "quote": "The API uses API key or token-based authentication.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://pipeline.zoominfo.com/sales/pitchbook-api-review",
        "quote": "Existing PitchBook platform customers start in the Plugins & Apps section of the Platform sidebar. New customers contact the Direct Data team directly.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://pipeline.zoominfo.com/sales/pitchbook-api-review",
        "quote": "There is no self-serve path, no free trial for the API.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://pipeline.zoominfo.com/sales/pitchbook-api-review",
        "quote": "a separate enterprise contract on top of a platform subscription",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://pipeline.zoominfo.com/sales/pitchbook-api-review",
        "quote": "A developer cannot evaluate the API's capabilities, request shapes, or response schemas without first signing a contract.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.pitchbook.com/api-docs",
        "quote": "OpenAPI 3.0.1 specification ... security scheme called \"pbToken\" ... all endpoints require this authentication method",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://api.pitchbook.com/api-docs",
        "quote": "extensive endpoints across multiple categories including: Company data and search, Deal information and analytics, Patent records, Investor and fund data, Financial metrics and valuations, Social analytics",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://registry.modelcontextprotocol.io",
        "quote": "no hits for pitchbook in MCP registry",
        "grounded": "not_grounded"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 404,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Official OpenAPI 3.0.1 spec exists at api.pitchbook.com/api-docs showing a broad REST surface (companies, deals, patents, investors, funds, financials, social analytics) authenticated via a custom pbToken/PB-Token header. However, the API is sold as a separate enterprise add-on to the PitchBook Platform subscription, requires a standalone contract negotiated with PitchBook's Direct Data team, and has no self-serve signup or free trial. Sandbox keys are provisioned manually by the account team on request, not generated by developers themselves. Public developer docs (Postman collection, endpoint guide) are gated behind being a contracted client, so capability/schema details cannot be verified pre-contract.",
    "pass1": {
      "auth_methods": [
        "api_key"
      ],
      "access": "partner_gated",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "red",
      "blocker": "partner_gate"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "partner_gated",
      "api_type": "rest",
      "api_breadth": "large",
      "verdict": "red",
      "blocker": "partner_gate",
      "confidence": 0.72
    },
    "cost_usd": 0.302
  },
  {
    "id": 91,
    "name": "NotebookLM",
    "category": "AI, Research and Media-native",
    "hint": "cloud.google.com/gemini (Enterprise API)",
    "one_liner": "NotebookLM is Google's AI-powered research/notetaking tool that lets users upload sources and get grounded summaries, Q&A, and audio overviews; programmatic access exists only via the separately-sold 'Gemini Notebook Enterprise' Google Cloud REST API.",
    "auth_methods": [
      "bearer_token",
      "oauth2"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://docs.cloud.google.com/gemini/enterprise/notebooklm-enterprise/docs/api-notebooks",
    "mcp": {
      "status": "community",
      "url": "https://github.com/mcp-dir/notebooklm-mcp"
    },
    "verdict": "yellow",
    "score": 71,
    "blocker": "enterprise_only",
    "model_verdict": "yellow",
    "confidence": 0.91,
    "agreement": 0.93,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (admin_approval vs paid_plan)"
    ],
    "sources": {
      "auth_methods": {
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "admin_approval"
      },
      "api_type": {
        "pass2": "rest",
        "apis_guru_spec": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "apis_guru_spec": "small",
        "pass2": "small",
        "pass1": "small"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "community"
      }
    },
    "evidence": [
      {
        "field": "api_type",
        "url": "https://docs.cloud.google.com/gemini/enterprise/notebooklm-enterprise/docs/api-notebooks",
        "quote": "https://ENDPOINT_LOCATION-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/LOCATION/notebooks",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.cloud.google.com/gemini/enterprise/notebooklm-enterprise/docs/api-notebooks",
        "quote": "gcloud auth print-access-token",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.cloud.google.com/gemini/enterprise/notebooklm-enterprise/docs/overview",
        "quote": "You can purchase Gemini Notebook Enterprise as a standalone product or as part of Gemini Enterprise.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.cloud.google.com/gemini/enterprise/notebooklm-enterprise/docs/api-notebooks",
        "quote": "Pre-GA features are available 'as is' and might have limited support.",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.cloud.google.com/gemini/enterprise/notebooklm-enterprise/docs/overview",
        "quote": "a highly compliant, enterprise-ready version of Gemini Notebook",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/mcp-dir/notebooklm-mcp",
        "quote": "NotebookLM has no official API",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/cloud-elements.com/ecwid/api-v2/swagger.json",
        "quote": "APIs.guru OpenAPI spec: 42 operations, securitySchemes []",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": true,
      "endpoints": 42
    },
    "probe": {
      "status": 301,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "The consumer-facing NotebookLM product (notebooklm.google.com) has no public API at all. Programmatic access only exists through 'Gemini Notebook Enterprise' (formerly NotebookLM Enterprise), a separately-purchased enterprise product built on Google Cloud's Discovery Engine, requiring a GCP project, IAM role 'Cloud NotebookLM User', and enterprise identity federation. The REST API is at v1alpha (pre-GA/preview) and covers a small set of operations (create/get/list/delete/share notebooks, sources, audio overviews). No official vendor MCP server exists; only unofficial/community MCP wrappers (e.g. Pantheon-Security/notebooklm-mcp-secure, mcp-dir/notebooklm-mcp) exist, and these explicitly note there is no official API and typically rely on browser automation rather than the enterprise REST API.",
    "pass1": {
      "auth_methods": [
        "oauth2"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "red",
      "blocker": "no_public_api"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "enterprise_only",
      "confidence": 0.75
    },
    "cost_usd": 0.311
  },
  {
    "id": 92,
    "name": "Otter AI",
    "category": "AI, Research and Media-native",
    "hint": "help.otter.ai (MCP server)",
    "one_liner": "Otter.ai is an AI meeting assistant that records, transcribes, and summarizes conversations, exposing an Enterprise-gated REST API and an official OAuth MCP server for querying meeting transcripts/insights.",
    "auth_methods": [
      "bearer_token",
      "oauth2",
      "other"
    ],
    "access": "admin_approval",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://help.otter.ai/hc/en-us/articles/36130822688279-Otter-ai-Public-API",
    "mcp": {
      "status": "official",
      "url": "https://help.otter.ai/hc/en-us/articles/35287607569687-Otter-MCP-Server"
    },
    "verdict": "yellow",
    "score": 75,
    "blocker": "enterprise_only",
    "model_verdict": "yellow",
    "confidence": 0.64,
    "agreement": 0.89,
    "grounding_rate": 0.3,
    "needs_human": true,
    "needs_human_reasons": [
      "only 30% of quotes grounded in cited pages"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (paid_plan vs admin_approval)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "other"
        ],
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "bearer_token"
        ]
      },
      "access": {
        "pass2": "admin_approval",
        "pass1": "paid_plan"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "composio_wraps_mcp": "official",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://otter.ai/blog/otter-for-enterprise-connect-ai-to-ai-with-otters-mcp",
        "quote": "OAuth-authenticated with granular permissions.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://otter.ai/blog/otter-for-enterprise-connect-ai-to-ai-with-otters-mcp",
        "quote": "Interested in Otter for your enterprise? Request a demo to see how the MCP Server can transform your team's workflow.",
        "grounded": "grounded"
      },
      {
        "field": "one_liner",
        "url": "https://otter.ai/blog/otter-for-enterprise-connect-ai-to-ai-with-otters-mcp",
        "quote": "Otter's MCP Server connects your meeting data directly to AI tools like Claude and ChatGPT, bringing your meeting intelligence into your everyday AI workflows.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://help.otter.ai/hc/en-us/articles/36130822688279-Otter-ai-Public-API",
        "quote": "All API requests require authentication using Bearer token authentication.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://help.otter.ai/hc/en-us/articles/36130822688279-Otter-ai-Public-API",
        "quote": "This content is available for the Otter Enterprise plan and may require admin permissions.",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://help.otter.ai/hc/en-us/articles/36130822688279-Otter-ai-Public-API",
        "quote": "If you do not see this feature for your workspace, contact your Otter account manager.",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://help.otter.ai/hc/en-us/articles/36130822688279-Otter-ai-Public-API",
        "quote": "Authorization: Bearer YOUR_API_KEY",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://help.otter.ai/hc/en-us/articles/36130822688279-Otter-ai-Public-API",
        "quote": "Enterprise plan users are currently limited to 10 requests / second.",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://otter.ai/blog/otter-for-enterprise-connect-ai-to-ai-with-otters-mcp",
        "quote": "Otter's MCP Server",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://help.otter.ai/hc/en-us/articles/36130822688279-Otter-ai-Public-API",
        "quote": "This content is available for the Otter Enterprise plan and may require admin permissions.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/otter_ai_mcp",
        "quote": "Composio catalog: auth ['DCR_OAUTH'], 3 tools",
        "grounded": "registry"
      },
      {
        "field": "mcp",
        "url": "https://help.otter.ai/hc/en-us/articles/35287607569687-Otter-MCP-Server",
        "quote": "MCP initialize POST -> HTTP 403 (text/html; charset=UTF-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "OTTER_AI_MCP",
      "tools": 3,
      "auth": [
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/otter_ai_mcp"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 200,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Otter's REST/webhook Public API (Bearer-token API keys, ~7 documented endpoints across channel/conversation/workspace resources plus webhooks) is restricted to Enterprise-plan workspaces and may require admin permissions to enable; workspaces that don't see the Developer tab must contact their Otter account manager. Otter also runs an official OAuth-authenticated remote MCP server for meeting-transcript search/summarization, again positioned as an enterprise offering (\"Request a demo\"). Could not directly fetch the help.otter.ai pages (403 to normal WebFetch; used a read-proxy) so treat exact endpoint counts as approximate.",
    "pass1": {
      "auth_methods": [
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "medium",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token",
        "oauth2"
      ],
      "access": "admin_approval",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "enterprise_only",
      "confidence": 0.72
    },
    "cost_usd": 0.392
  },
  {
    "id": 93,
    "name": "Fathom",
    "category": "AI, Research and Media-native",
    "hint": "fathom.video",
    "one_liner": "Fathom is an AI meeting recorder/notetaker that transcribes, summarizes, and extracts action items from video calls, exposing a public REST API for meetings, recordings, transcripts, summaries, and webhooks.",
    "auth_methods": [
      "api_key",
      "oauth2"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developers.fathom.ai/",
    "mcp": {
      "status": "official",
      "url": "https://api.fathom.ai/mcp"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.88,
    "agreement": 0.96,
    "grounding_rate": 0.88,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key",
          "oauth2"
        ],
        "pass2": [
          "api_key",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "jwt",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://help.fathom.video/en/articles/8368641",
        "quote": "Anyone can browse the API docs and start building",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://help.fathom.video/en/articles/8368641",
        "quote": "API keys are created at the user level. Your key can access meetings recorded by you or shared to your Team.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.fathom.ai/api-overview",
        "quote": "All REST API resources are authenticated with API keys generated via the Fathom website's settings area.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://developers.fathom.ai/",
        "quote": "Build a Fathom integration that other users can install.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.fathom.ai/mcp-docs",
        "quote": "Fathom now offers an official MCP (Model Context Protocol) server, allowing you to connect your Fathom meeting data to AI assistants like ChatGPT, Claude, and more.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.fathom.ai/mcp-docs",
        "quote": "MCP server URL: `https://api.fathom.ai/mcp`",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://help.fathom.video/en/articles/8368641",
        "quote": "users can make 60 calls per minute across all of their API keys; this ensures system stability and reliability",
        "grounded": "grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://developers.fathom.ai/api-overview",
        "quote": "/recordings",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/fathom",
        "quote": "Composio catalog: auth ['OAUTH2', 'API_KEY'], 7 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.fathom.ai/external/v1/meetings",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: None; body: ",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://api.fathom.ai/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "FATHOM",
      "tools": 7,
      "auth": [
        "api_key",
        "oauth2"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/fathom"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Official docs live at developers.fathom.ai (Fathom's dedicated API domain), separate from the consumer app at fathom.video. API key access is self-serve and free (generated from account Settings > API Access, no plan gate or approval mentioned in docs). OAuth2 is documented as the path for multi-tenant/marketplace apps installed by other users, alongside per-user API keys for single-workspace/internal use. Vendor-hosted official MCP server exists at api.fathom.ai/mcp using OAuth-based user authorization; exact OAuth scope/flow details and total endpoint count could not be confirmed within fetch budget (authentication sub-page 404'd), and api_breadth is estimated as small based on the handful of named resources (meetings, recordings summary/transcript, webhooks) — lowering confidence slightly for auth_methods completeness.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "bearer_token",
        "oauth2",
        "jwt"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "oauth2"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.75
    },
    "cost_usd": 0.336
  },
  {
    "id": 94,
    "name": "Consensus",
    "category": "AI, Research and Media-native",
    "hint": "consensus.app (OAuth requested)",
    "one_liner": "Consensus is an AI-powered search engine that finds, ranks, and synthesizes findings from 220+ million peer-reviewed academic research papers.",
    "auth_methods": [
      "api_key"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://docs.consensus.app/api-get-started",
    "mcp": {
      "status": "community",
      "url": "com.consensus-analytics/mcp (MCP registry listing, community-maintained; no vendor-published server found)"
    },
    "verdict": "yellow",
    "score": 71,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.68,
    "agreement": 0.93,
    "grounding_rate": 0.43,
    "needs_human": true,
    "needs_human_reasons": [
      "only 43% of quotes grounded in cited pages"
    ],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs paid_plan)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "community",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://consensus.app/home/api/",
        "quote": "The Consensus API is now open to everyone",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://consensus.app/home/api/",
        "quote": "Calls are $0.05 each beyond the credits included in your plan (500 on Pro/Team/Enterprise, 2,000 on Deep) plus 1 additional credit per 100 papers.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://agentsapis.com/consensus-api/",
        "quote": "GET /v1/quick_search",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/consensus",
        "quote": "Auth: API_KEY",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/consensus",
        "quote": "Composio-managed OAuth available? N/A",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://docs.composio.dev/toolkits/consensus",
        "quote": "Tools: 1",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.composio.dev/toolkits/consensus",
        "quote": "Pagination beyond the first page and full-text chunks require Enterprise access",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/consensus",
        "quote": "Composio catalog: auth ['API_KEY'], 1 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://consensus.app/api",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: <!DOCTYPE html><html lang=\"en-US\"><head><title>Just a moment...</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"><meta nam",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "CONSENSUS",
      "tools": 1,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/consensus"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Note: \"consensus.app\" (AI academic-research search engine) is a distinct company from \"goconsensus.com\" (B2B sales-demo software also branded \"Consensus\") — several third-party trackers (e.g. apitracker.io/a/consensus) conflate the two; disregard any goconsensus.com data. The official docs.consensus.app and help.consensus.app pages returned HTTP 403 (Cloudflare bot-block) on direct fetch, so findings here rely on the consensus.app/home/api marketing page, the Composio toolkit page (which mirrors the official docs), and a third-party API guide (agentsapis.com) — lowering confidence versus a primary-source read. Access is via a self-serve \"Create API key\" flow with no approval/waitlist (\"now open to everyone\"), but usable credits are allocated per paid plan tier (Pro/Team/Enterprise: 500 credits; Deep: 2,000), with no evidence of a free-tier credit allocation, so classified as paid_plan rather than self_serve_free. Auth is a single x-api-key header (api_key), not OAuth — the task hint \"(OAuth requested)\" and the precomputed .well-known/oauth-authorization-server discovery URL likely relate to consensus.app's own user login/SSO rather than the public data API; this was not independently verified due to fetch-budget limits and repeated 403s on the consensus.app domain. Only one documented endpoint (quick_search) was found; pagination beyond page 1 and full-text chunk retrieval are gated to Enterprise. No official MCP server found; MCP registry shows only community/unrelated entries.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.62
    },
    "cost_usd": 0.35
  },
  {
    "id": 95,
    "name": "Reducto",
    "category": "AI, Research and Media-native",
    "hint": "reducto.ai (document parsing)",
    "one_liner": "Reducto is a document parsing/extraction API that converts PDFs and complex documents into structured, LLM-ready data.",
    "auth_methods": [
      "bearer_token"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://docs.reducto.ai/get-started/quickstart",
    "mcp": {
      "status": "community",
      "url": "https://docs.reducto.ai/mcp-server"
    },
    "verdict": "green",
    "score": 91,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.73,
    "agreement": 0.8,
    "grounding_rate": 0.57,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "bearer_token"
        ],
        "pass1": [
          "api_key"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "small",
        "pass1": "small"
      },
      "mcp": {
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "access",
        "url": "https://docs.reducto.ai/get-started/quickstart",
        "quote": "Go to studio.reducto.ai and sign up for a free account.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://reducto.ai/pricing",
        "quote": "Free$150 in free usage",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.reducto.ai/get-started/quickstart",
        "quote": "Authorization: Bearer $REDUCTO_API_KEY",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.reducto.ai/get-started/quickstart",
        "quote": "Go to studio.reducto.ai and sign up for a free account.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://platform.reducto.ai/openapi.json",
        "quote": "/parse, /extract, /split, /edit, /pipeline, /classify, /job/{job_id}, /upload",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://platform.reducto.ai/openapi.json",
        "quote": "18 distinct paths including /parse, /parse_async, /extract, /split, /edit, /pipeline, /classify, /job/{job_id}, /upload",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.reducto.ai/mcp-server",
        "quote": "The hosted server runs at https://mcp.reducto.ai/mcp, and you can add this to your MCP client config by replacing your-api-key with a key from studio.reducto.ai/api-keys.",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://platform.reducto.ai/parse",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: <html>\r <head><title>403 Forbidden</title></head>\r <body>\r <center><h1>403 Forbidden</h1></center>\r </body>\r </html>\r ",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Self-serve free account at studio.reducto.ai grants an API key immediately (bearer token auth), with $150 free usage credit before paid rates ($10/1k pages parse, $20/1k pages extract) apply. REST API is small (~18 paths) covering parse/extract/split/edit/classify/pipeline plus job/upload management. Official vendor-published MCP server (reductoai/mcp-server-reducto) is hosted at mcp.reducto.ai and uses the same API key. Higher tiers (Growth/Enterprise) require sales contact but are not needed for basic agent-toolkit buildability.",
    "pass1": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.85
    },
    "cost_usd": 0.321
  },
  {
    "id": 96,
    "name": "Devin",
    "category": "AI, Research and Media-native",
    "hint": "docs.devin.ai (MCP)",
    "one_liner": "Devin is Cognition's AI software engineering agent, controllable via a REST API and an official MCP server for programmatic session/playbook management.",
    "auth_methods": [
      "api_key",
      "bearer_token"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://docs.devin.ai/api-reference/authentication",
    "mcp": {
      "status": "official",
      "url": "https://docs.devin.ai/work-with-devin/devin-mcp"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "yellow",
    "confidence": 0.77,
    "agreement": 0.93,
    "grounding_rate": 0.75,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "formula verdict green, model said yellow"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "bearer_token"
        ],
        "pass1": [
          "bearer_token"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest_and_graphql"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "unknown",
        "pass1": "medium"
      },
      "mcp": {
        "mcp_registry": "community",
        "composio_wraps_mcp": "official",
        "pass2": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.devin.ai/api-reference/authentication",
        "quote": "starts with cog_ and is shown only once at creation",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.devin.ai/api-reference/authentication",
        "quote": "Bearer cog_your_token_here",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://devin.ai/pricing",
        "quote": "$0 Light quota to code with agents, Limited model availability",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.devin.ai/api-reference/overview",
        "quote": "Most customers should start with the Teams quick start",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.devin.ai/work-with-devin/devin-mcp",
        "quote": "To use the Devin MCP server, you need a Devin API key",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://docs.devin.ai/work-with-devin/devin-mcp",
        "quote": "Legacy API keys (apk_ / apk_user_ prefix) are not supported by the Devin MCP server. Use a service user API key instead.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.devin.ai/api-reference/authentication",
        "quote": "Personal Access Tokens (PATs): Generated by individual users for personal programmatic access",
        "grounded": "not_grounded"
      },
      {
        "field": "verdict",
        "url": "https://docs.devin.ai/api-reference/authentication",
        "quote": "Service users require organization admin capability to create",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/devin_mcp",
        "quote": "Composio catalog: auth ['API_KEY'], 22 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://api.devin.ai/v1/sessions",
        "quote": "Unauthenticated probe -> HTTP 403; WWW-Authenticate: None; body: {\"detail\":\"Unauthorized\"}",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "DEVIN_MCP",
      "tools": 22,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/devin_mcp"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 403,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Devin has a genuine $0 free product tier (devin.ai/pricing) and individual users can generate Personal Access Tokens (cog_ prefix, Bearer auth) for programmatic API access without needing org admin approval. However, the primary documented path (Service User API Keys) requires organization admin capability, and the API docs steer most customers toward Teams/Enterprise setup, so real-world usage often involves an org context. No OAuth is documented. Official MCP server (mcp.devin.ai) is Cognition-published and requires the same API key (service user key recommended; legacy apk_ keys unsupported). Endpoint count/breadth not disclosed in docs; Composio's third-party wrapper lists 22 tools but that reflects their integration, not the full API surface. Legacy apk_/apk_user_ key scheme also exists but is deprecated.",
    "pass1": {
      "auth_methods": [
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest_and_graphql",
      "api_breadth": "medium",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "none",
      "confidence": 0.55
    },
    "cost_usd": 0.379
  },
  {
    "id": 97,
    "name": "higgsfield",
    "category": "AI, Research and Media-native",
    "hint": "higgsfield.ai/cli (content suite)",
    "one_liner": "Higgsfield is an AI-native image/video generation platform offering a REST API, CLI, and official MCP server for building agentic creative-media workflows.",
    "auth_methods": [
      "api_key",
      "other"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://docs.higgsfield.ai/docs",
    "mcp": {
      "status": "official",
      "url": "https://mcp.higgsfield.ai/mcp"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.82,
    "agreement": 0.93,
    "grounding_rate": 0.75,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_trial vs self_serve_free)"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "other"
        ],
        "pass2": [
          "api_key"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_trial"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "medium",
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "composio_wraps_mcp": "official",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://docs.higgsfield.ai/docs/authentication",
        "quote": "Authenticate server-side API requests with your Higgsfield key and secret.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.higgsfield.ai/docs/authentication",
        "quote": "Send both values in the Authorization header: Authorization: Key YOUR_KEY_ID:YOUR_KEY_SECRET",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://console.higgsfield.ai/api-keys",
        "quote": "Sign up with a business email and get $15",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://docs.higgsfield.ai/docs/authentication",
        "quote": "Create and manage API credentials in Higgsfield Console. Each credential consists of a key ID and a secret.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://docs.higgsfield.ai/docs",
        "quote": "immediately returns a request identifier and links for checking or canceling the request",
        "grounded": "grounded"
      },
      {
        "field": "one_liner",
        "url": "https://docs.higgsfield.ai/docs",
        "quote": "Authorization: Key ${HF_API_KEY_ID}:${HF_API_KEY_SECRET}",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://higgsfield.ai/mcp",
        "quote": "No API keys to manage or configure.",
        "grounded": "not_grounded"
      },
      {
        "field": "mcp",
        "url": "https://higgsfield.ai/mcp",
        "quote": "30+ models for image generation, video creation, and character training",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/higgsfield_mcp",
        "quote": "Composio catalog: auth ['DCR_OAUTH'], 101 tools",
        "grounded": "registry"
      },
      {
        "field": "mcp",
        "url": "https://mcp.higgsfield.ai/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json; charset=utf-8); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "HIGGSFIELD_MCP",
      "tools": 101,
      "auth": [
        "other"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/higgsfield_mcp"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 200,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Higgsfield's core developer API (docs.higgsfield.ai) uses a custom two-part API key (key ID + secret) sent via Authorization: Key header, obtainable via free self-serve signup at console.higgsfield.ai with a $15 signup credit, then pay-per-use pricing (not a hard trial cutoff, so classified as self_serve_free rather than self_serve_trial). Separately, Higgsfield also ships an official hosted MCP server (mcp.higgsfield.ai) that authenticates via account login/OAuth-style sign-in instead of API keys — this is a second, higher-level access path layered on top of the same account/credits, not a replacement for the REST API's auth. api_breadth is an estimate (docs list ~5+ model endpoints: SOUL, SOUL 2, SOUL Cinema, video models, etc.) — no endpoint count was published, so treat as approximate.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_trial",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "api_key"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.72
    },
    "cost_usd": 0.33
  },
  {
    "id": 98,
    "name": "Mermaid CLI",
    "category": "AI, Research and Media-native",
    "hint": "github.com/mermaid-js/mermaid-cli",
    "one_liner": "Mermaid CLI (mmdc) is an open-source command-line tool that renders Mermaid diagram text definitions into SVG, PNG, or PDF files.",
    "auth_methods": [
      "none"
    ],
    "access": "no_public_api",
    "api_type": "cli_only",
    "api_breadth": "large",
    "docs_url": "https://github.com/mermaid-js/mermaid-cli",
    "mcp": {
      "status": "official",
      "url": "https://github.com/andrewginns/mermaid-mcp-server"
    },
    "verdict": "red",
    "score": 30,
    "blocker": "cli_not_api",
    "model_verdict": "yellow",
    "confidence": 0.89,
    "agreement": 0.82,
    "grounding_rate": 1.0,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [
      "pass1/pass2 disagree on access (self_serve_free vs no_public_api)",
      "formula verdict red, model said yellow"
    ],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "none"
        ],
        "pass2": [
          "none"
        ],
        "pass1": [
          "none"
        ]
      },
      "access": {
        "pass2": "no_public_api",
        "pass1": "self_serve_free"
      },
      "api_type": {
        "pass2": "cli_only",
        "apis_guru_spec": "rest",
        "pass1": "cli_only"
      },
      "api_breadth": {
        "apis_guru_spec": "large",
        "composio_tools": "small",
        "pass2": "unknown",
        "pass1": "unknown"
      },
      "mcp": {
        "composio_wraps_mcp": "official",
        "pass2": "community",
        "pass1": "community"
      }
    },
    "evidence": [
      {
        "field": "api_type",
        "url": "https://github.com/mermaid-js/mermaid-cli",
        "quote": "npm install -g @mermaid-js/mermaid-cli",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://github.com/mermaid-js/mermaid-cli",
        "quote": "docker run --rm -u `id -u`:`id -g` -v /path/to/diagrams:/data minlag/mermaid-cli",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://github.com/andrewginns/mermaid-mcp-server",
        "quote": "Python MCP Server abstracting the official mermaid-cli for ease of use",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://github.com/mermaid-js/mermaid-cli",
        "quote": "npx -p @mermaid-js/mermaid-cli mmdc -h",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/mermaid_chart_mcp",
        "quote": "Composio catalog: auth ['NO_AUTH'], 1 tools",
        "grounded": "registry"
      },
      {
        "field": "api_breadth",
        "url": "https://api.apis.guru/v2/specs/github.com/1.1.4/openapi.json",
        "quote": "APIs.guru OpenAPI spec: 845 operations, securitySchemes []",
        "grounded": "registry"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "MERMAID_CHART_MCP",
      "tools": 1,
      "auth": [
        "none"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/mermaid_chart_mcp"
    },
    "apis_guru": {
      "found": true,
      "endpoints": 845
    },
    "probe": {
      "status": null,
      "www_authenticate": null,
      "inferred": null
    },
    "notes": "Mermaid CLI (mmdc) is an open-source command-line tool (npm package / Docker image) that renders Mermaid diagram definitions to SVG/PNG/PDF locally. There is no hosted vendor API or auth of any kind — it runs entirely offline as a local process. No official MCP server exists for mermaid-cli itself; several community-built MCP wrappers (Python and JS) exist that shell out to mmdc, but none are vendor-published by mermaid-js. Note: this is distinct from the commercial 'Mermaid Chart' SaaS product (mermaidchart.com), which does have its own official hosted MCP server — that is a different product from this open-source CLI and was not evaluated here. Buildability verdict is for mermaid-cli as a local agent skill/tool invocation, not a hosted API integration.",
    "pass1": {
      "auth_methods": [
        "none"
      ],
      "access": "self_serve_free",
      "api_type": "cli_only",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "cli_not_api"
    },
    "pass2": {
      "auth_methods": [
        "none"
      ],
      "access": "no_public_api",
      "api_type": "cli_only",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "cli_not_api",
      "confidence": 0.85
    },
    "cost_usd": 0.258
  },
  {
    "id": 99,
    "name": "YouTube Transcript",
    "category": "AI, Research and Media-native",
    "hint": "transcriptapi.com",
    "one_liner": "TranscriptAPI.com is a third-party REST API for fetching YouTube video transcripts, channel/video search, and playlist data.",
    "auth_methods": [
      "api_key",
      "bearer_token"
    ],
    "access": "self_serve_free",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://transcriptapi.com/docs/",
    "mcp": {
      "status": "official",
      "url": "https://transcriptapi.com/mcp"
    },
    "verdict": "green",
    "score": 93,
    "blocker": "none",
    "model_verdict": "green",
    "confidence": 0.76,
    "agreement": 0.96,
    "grounding_rate": 0.5,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "composio_catalog": [
          "api_key"
        ],
        "pass2": [
          "api_key",
          "bearer_token"
        ],
        "pass1": [
          "api_key",
          "bearer_token"
        ]
      },
      "access": {
        "pass2": "self_serve_free",
        "pass1": "self_serve_free",
        "docs_signal": "partner_gated"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "composio_tools": "small",
        "pass2": "small",
        "pass1": "small"
      },
      "mcp": {
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://transcriptapi.com",
        "quote": "Authorization: Bearer API_KEY",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://transcriptapi.com",
        "quote": "100 free credits to try the API — no card required.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://transcriptapi.com",
        "quote": "claude mcp add --transport http transcript-api https://transcriptapi.com/mcp",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://transcriptapi.com",
        "quote": "100 free credits to try the API — no card required.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://transcriptapi.com/api/v2/youtube/transcript",
        "quote": "www-authenticate: Bearer",
        "grounded": "not_grounded"
      },
      {
        "field": "access",
        "url": "https://transcriptapi.com",
        "quote": "Monthly: $5/month (1,000 credits/month)",
        "grounded": "not_grounded"
      },
      {
        "field": "api_type",
        "url": "https://transcriptapi.com",
        "quote": "REST API with HTTP endpoints (curl examples provided throughout documentation).",
        "grounded": "not_grounded"
      },
      {
        "field": "api_breadth",
        "url": "https://transcriptapi.com",
        "quote": "Get Transcripts, Search YouTube, Search Within Channels, Browse Channel Videos, Track New Uploads (RSS), Extract Playlist Videos, Resolve Channel Handles",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://docs.composio.dev/toolkits/youtube_transcript",
        "quote": "Composio catalog: auth ['API_KEY'], 9 tools",
        "grounded": "registry"
      },
      {
        "field": "auth_methods",
        "url": "https://transcriptapi.com/api/v2/youtube/transcript",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Bearer; body: {\"detail\":\"Not authenticated\"}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://transcriptapi.com/mcp",
        "quote": "MCP initialize POST -> HTTP 401 (application/json); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": true,
      "slug": "YOUTUBE_TRANSCRIPT",
      "tools": 9,
      "auth": [
        "api_key"
      ],
      "auth_agrees": true,
      "url": "https://docs.composio.dev/toolkits/youtube_transcript"
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Bearer",
      "inferred": "bearer_token"
    },
    "notes": "Vendor is transcriptapi.com (third-party service exposing YouTube transcripts, not a YouTube-owned product). Self-serve signup with 100 free credits, no card required; paid tiers start at $5/mo for 1,000 credits. REST API with bearer-token API key auth (confirmed by live 401 probe returning www-authenticate: Bearer). Vendor also hosts its own MCP endpoint at /mcp on the same domain (self-serve, streamable HTTP transport), which counts as official since it's first-party. Note: the site's /mcp path itself returned 401 to unauthenticated WebFetch (expected, since MCP requires a session), so MCP quote is taken from the homepage's install instructions rather than the MCP endpoint response. Some docs subpages (/docs/api, /billing) failed to yield extractable text via WebFetch within the 6-fetch budget; homepage content was sufficiently detailed to cover all required claims.",
    "pass1": {
      "auth_methods": [
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none"
    },
    "pass2": {
      "auth_methods": [
        "api_key",
        "bearer_token"
      ],
      "access": "self_serve_free",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "green",
      "blocker": "none",
      "confidence": 0.8
    },
    "cost_usd": 0.272
  },
  {
    "id": 100,
    "name": "Grain",
    "category": "AI, Research and Media-native",
    "hint": "grain.com (meeting notes)",
    "one_liner": "Grain is an AI meeting-recorder/notes platform whose public REST API (recordings, transcripts, notes, hooks) and official remote MCP server let developers pull meeting data and automate workflows.",
    "auth_methods": [
      "bearer_token",
      "oauth2"
    ],
    "access": "paid_plan",
    "api_type": "rest",
    "api_breadth": "small",
    "docs_url": "https://developers.grain.com/",
    "mcp": {
      "status": "official",
      "url": "https://developers.grain.com/mcp"
    },
    "verdict": "yellow",
    "score": 73,
    "blocker": "paid_only",
    "model_verdict": "yellow",
    "confidence": 0.89,
    "agreement": 0.95,
    "grounding_rate": 0.86,
    "needs_human": false,
    "needs_human_reasons": [],
    "auto_notes": [],
    "sources": {
      "auth_methods": {
        "pass2": [
          "bearer_token",
          "oauth2"
        ],
        "pass1": [
          "api_key",
          "bearer_token",
          "oauth2"
        ]
      },
      "access": {
        "pass2": "paid_plan",
        "pass1": "paid_plan",
        "docs_signal": "self_serve_free"
      },
      "api_type": {
        "pass2": "rest",
        "pass1": "rest"
      },
      "api_breadth": {
        "pass2": "small",
        "pass1": "unknown"
      },
      "mcp": {
        "mcp_registry": "community",
        "pass2": "official",
        "mcp_endpoint_probe": "official",
        "pass1": "official"
      }
    },
    "evidence": [
      {
        "field": "auth_methods",
        "url": "https://support.grain.com/en/articles/15507288-grain-api",
        "quote": "Click here to generate a PAT.",
        "grounded": "grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://support.grain.com/en/articles/15507288-grain-api",
        "quote": "Workspace API access is available on Business and Enterprise plans and requires admin access to generate.",
        "grounded": "grounded"
      },
      {
        "field": "access",
        "url": "https://support.grain.com/en/articles/15507288-grain-api",
        "quote": "Personal API access is available on Starter, Business, and Enterprise plans.",
        "grounded": "grounded"
      },
      {
        "field": "api_type",
        "url": "https://developers.grain.com/",
        "quote": "https://api.grain.com",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://developers.grain.com/mcp",
        "quote": "Official Grain MCP Server: Quick Start Guide",
        "grounded": "grounded"
      },
      {
        "field": "verdict",
        "url": "https://support.grain.com/en/articles/15507288-grain-api",
        "quote": "Personal API access is available on Starter, Business, and Enterprise plans.",
        "grounded": "grounded"
      },
      {
        "field": "mcp",
        "url": "https://grain.com/release-note/06-18-2025",
        "quote": "Grain's official MCP server",
        "grounded": "not_grounded"
      },
      {
        "field": "auth_methods",
        "url": "https://api.grain.com/_/public-api/recordings",
        "quote": "Unauthenticated probe -> HTTP 401; WWW-Authenticate: Bearer resource_metadata=\"https://grain.com/.well-known/oauth-protected-resource\"; body: {\"error\":\"unauthorized\"}",
        "grounded": "probe"
      },
      {
        "field": "mcp",
        "url": "https://developers.grain.com/mcp",
        "quote": "MCP initialize POST -> HTTP 403 (text/html); endpoint is live",
        "grounded": "probe"
      }
    ],
    "composio": {
      "in_catalog": false,
      "slug": null,
      "tools": null,
      "auth": null,
      "auth_agrees": null,
      "url": null
    },
    "apis_guru": {
      "found": false,
      "endpoints": null
    },
    "probe": {
      "status": 401,
      "www_authenticate": "Bearer resource_metadata=\"https://grain.com/.well-known/oauth-protected-resource\"",
      "inferred": "bearer_token"
    },
    "notes": "Grain's public REST API requires a bearer token (Personal Access Token or Workspace Access Token, generated in account/workspace settings) or OAuth2 for third-party distributed integrations. No free tier: PAT access needs Starter plan or above; WAT needs Business/Enterprise and admin rights. All requests need a Public-Api-Version header (current: 2025-10-31). API surface is small (~20 endpoints: recordings, hooks/webhooks, users/teams/meeting types, OAuth token mgmt). Grain also ships an official hosted remote MCP server (https://api.grain.com/_/mcp) using OAuth, exposing meeting recordings/notes/transcripts/deals/coaching data with built-in report prompts — this MCP path could give agent builders a self-serve-ish route via OAuth without a paid PAT, but the underlying REST API itself is paid-gated.",
    "pass1": {
      "auth_methods": [
        "oauth2",
        "bearer_token",
        "api_key"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "unknown",
      "verdict": "yellow",
      "blocker": "paid_only"
    },
    "pass2": {
      "auth_methods": [
        "oauth2",
        "bearer_token"
      ],
      "access": "paid_plan",
      "api_type": "rest",
      "api_breadth": "small",
      "verdict": "yellow",
      "blocker": "paid_only",
      "confidence": 0.82
    },
    "cost_usd": 0.315
  }
]