{
 "slug": "sendgrid",
 "name": "SendGrid",
 "url": "https://sendgrid.com",
 "domain": "sendgrid.com",
 "category": "email-infrastructure",
 "category_name": "Email infrastructure",
 "tested_at": "2026-10-06",
 "run": "20261006T091522Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T231417Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261006T091522Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": null,
    "robots": "start"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: llms.txt and an OpenAPI",
   "have": [
    "llms_txt",
    "openapi"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/8",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": null,
  "robots": "start"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Cloudflare Turnstile (on Auth0 universal login, login.twilio.com)",
  "visible": true,
  "type": "network",
  "human": "",
  "how": "Let verified bots and signed agents past the check on sign-up: in Cloudflare, add a WAF custom rule that skips the bot challenge on your sign-up paths for verified bots and for signed agents (rule field cf.bot_management.signed_agent; since 1 July 2026 signed agents count as verified bots), and render Turnstile only when the request is not from a verified agent.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "form"
  },
  "signed": {
   "state": "robots",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": "closed",
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "twilio.com/docs/llms.txt (~341 SendGrid entries, .md pages), API reference in Markdown, OpenAPI 3.1.0 specs in github.com/twilio/sendgrid-oai, docs-only MCP at mcp.twilio.com/docs."
  },
  "signup": {
   "status": "human",
   "note": "No sign-up API (Account Provisioning API is reseller-only). Web form at login.twilio.com/u/signup shows a Cloudflare Turnstile 'Verify you are human' check on Continue; our agent's browser could not submit. The page says phone verification follows email verification.",
   "via": ""
  },
  "verify": {
   "status": "",
   "note": "not reached: no account (sign-up stopped at Cloudflare Turnstile)",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "API keys come from the console or POST /v3/api_keys with an existing key; no OAuth/agent registration. Not reached: no account (sign-up stopped at Cloudflare Turnstile)",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "Unauthenticated calls answer 401 with clear JSON errors; no authenticated call possible. Not reached: no account (sign-up stopped at Cloudflare Turnstile)",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "not reached: no account (sign-up stopped at Cloudflare Turnstile)",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [
    "card in the Twilio SendGrid console (Settings > Account Details > Billing)"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No 402 on api.sendgrid.com, x402./mpp./agents. subdomains do not resolve, no /.well-known/ucp, not in x402 Bazaar or mpp.dev. Docs: paid plans need a credit or debit card added in the console; no billing API. Every purchase runs through an account that needs a human past Turnstile and a phone number. Not exercised: no account.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "Docs: console only, Cancel Subscription with a 'Keep my Account' modal and a three-question survey; no billing API. No plan started.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "Docs: cancel first, then contact Twilio SendGrid Support to delete the account and data. No self-serve API. No account was created.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "card",
    "name": "Card checkout",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": true,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": true,
  "mcp": "docs",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": true
 },
 "surface_notes": {
  "api": "REST v3 at api.sendgrid.com (+ api.eu.sendgrid.com), JSON errors {errors:[{message,field,help}]}, not problem+json",
  "openapi": "46 per-area OpenAPI 3.1.0 files in twilio/sendgrid-oai",
  "mcp": "official docs-only MCP (Twilio, public beta), 2 tools, the older 25 Nov 2025 spec",
  "sdk": "@sendgrid/mail 8.1.6 (npm), sendgrid 6.12.5 (PyPI)",
  "cli": "Twilio CLI SendGrid email integration (docs)",
  "llms_txt": "twilio.com/docs/llms.txt; sendgrid.com/llms.txt redirects to an HTML page"
 },
 "can_do": [
  "Find and read the full SendGrid API reference as Markdown and OpenAPI 3.1.0 without an account",
  "Search SendGrid docs and API schemas through Twilio's public docs MCP server without an account"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "Cloudflare Turnstile 'Verify you are human' on the Twilio sign-up form; no sign-up API"
  },
  {
   "what": "Get an API key or send any email",
   "why": "needs an account"
  },
  {
   "what": "Delete the account headless",
   "why": "docs: deletion only through Support"
  },
  {
   "what": "Buy or cancel a plan headless",
   "why": "card in the console only, cancel through a console survey flow; no billing API"
  }
 ],
 "blockers": [
  "Cloudflare Turnstile on login.twilio.com/u/signup",
  "Phone verification announced on the sign-up page (not reached)"
 ],
 "tips_for_owner": [
  "Let verified agents sign up",
  "Offer an email-only free trial path",
  "Add OAuth device flow for API keys",
  "Document an account deletion API",
  "Expose plan changes in the API",
  "Move the docs MCP to the 28 Jul 2026 spec"
 ],
 "tips_for_agents": [
  "Use the docs MCP (mcp.twilio.com/docs, no auth) or the .md pages from twilio.com/docs/llms.txt to get exact request schemas; it is read-only.",
  "The account and first API key must come from a human: sign-up has Cloudflare Turnstile and announces phone verification.",
  "Use mail_settings.sandbox_mode to test /v3/mail/send without delivering mail (documented Sandbox Mode).",
  "Errors are JSON {errors:[{message,field,help}]}, not RFC 9457; read errors[].message."
 ],
 "selfhost": null,
 "summary": "An agent can read all of SendGrid's docs headless (llms.txt, Markdown pages, OpenAPI 3.1.0, a docs-only MCP server) but cannot get an account: the Twilio sign-up form shows a Cloudflare Turnstile check to take it. Without an account no API key exists, so no capability could be driven; paying is card-in-console and deleting the account goes through Support.",
 "wall": "Cloudflare Turnstile on the sign-up form",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "SendGrid lets any agent read its full documentation and API schemas without an account, but creating an account requires passing a visible Cloudflare human-check on the sign-up form to do that. Without an account there is no API key, so nothing that actually sends email, manages contacts, or handles billing could be tried.",
  "can_do": [
   "Read all of SendGrid's documentation and API reference without needing an account",
   "Search the documentation through an official automated tool"
  ],
  "cannot_do": [
   {
    "what": "Create a SendGrid account",
    "why": "a visible human-verification check blocks the sign-up form"
   },
   {
    "what": "Get an API key or send any email",
    "why": "this requires an account, which could not be created"
   },
   {
    "what": "Delete the account or cancel a plan through code",
    "why": "these require a support ticket or the web console, with no automated option"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Transactional sending",
   "capability": "Send a transactional email via API or SMTP",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/mail/send",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /v3/messages (Email Activity) shows the message with status processed/delivered",
   "source": "https://www.twilio.com/docs/sendgrid#send-your-first-email; https://www.twilio.com/docs/sendgrid/api-reference/mail-send/mail-send"
  },
  {
   "id": "cap-02",
   "group": "Transactional sending",
   "capability": "Personalize and merge dynamic data into a send",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/mail/send (personalizations[].dynamic_template_data)",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Sent message body contains substituted Handlebars variables per recipient",
   "source": "https://www.twilio.com/docs/sendgrid/for-developers/sending-email/personalizations; https://www.twilio.com/docs/sendgrid#templates-and-dynamic-data"
  },
  {
   "id": "cap-03",
   "group": "Templates",
   "capability": "Create and send a dynamic email template",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/templates, POST /v3/templates/{id}/versions",
    "mcp": null,
    "cli": null,
    "ui": "Email API > Dynamic Templates"
   },
   "check": "GET /v3/templates/{id} returns the created template version with active flag set",
   "source": "https://www.twilio.com/docs/sendgrid/for-developers/sending-email/using-templates; https://www.twilio.com/en-us/products/email-api/pricing (Dynamic templates feature row)"
  },
  {
   "id": "cap-04",
   "group": "Marketing campaigns",
   "capability": "Design and send a marketing email campaign",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/marketing/singlesends",
    "mcp": null,
    "cli": null,
    "ui": "Marketing > Campaigns, drag-and-drop editor"
   },
   "check": "GET /v3/marketing/singlesends/{id} shows status Triggered/Sent after scheduled send",
   "source": "https://www.twilio.com/en-us/products/marketing-campaigns; https://www.twilio.com/docs/sendgrid/ui/sending-email/how-to-send-email-with-marketing-campaigns"
  },
  {
   "id": "cap-05",
   "group": "Marketing campaigns",
   "capability": "Build an automated email journey/drip series",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Marketing > Automations"
   },
   "check": "Automation detail page shows active status and contacts progressing through steps",
   "source": "https://www.twilio.com/en-us/products/marketing-campaigns/email-automation; https://www.twilio.com/docs/sendgrid/ui/sending-email/getting-started-with-automation"
  },
  {
   "id": "cap-06",
   "group": "Contacts",
   "capability": "Add, update and segment contacts into lists",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PUT /v3/marketing/contacts, POST /v3/marketing/lists, POST /v3/marketing/segments/2.0",
    "mcp": null,
    "cli": null,
    "ui": "Marketing > Contacts"
   },
   "check": "GET /v3/marketing/contacts/{id} returns the contact with updated field values and list membership",
   "source": "https://www.twilio.com/docs/sendgrid/ui/managing-contacts/create-and-manage-contacts; https://www.twilio.com/en-us/products/marketing-campaigns"
  },
  {
   "id": "cap-07",
   "group": "Signup capture",
   "capability": "Capture new signups through a hosted signup form",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Marketing > Signup Forms"
   },
   "check": "A form submission creates/updates a contact visible in GET /v3/marketing/contacts/search",
   "source": "https://www.twilio.com/en-us/products/marketing-campaigns/signup-forms"
  },
  {
   "id": "cap-08",
   "group": "Deliverability",
   "capability": "Authenticate a sending domain (SPF/DKIM)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/whitelabel/domains",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Sender Authentication"
   },
   "check": "GET /v3/whitelabel/domains/{id} returns valid: true after DNS records are verified",
   "source": "https://www.twilio.com/docs/sendgrid/ui/account-and-settings/how-to-set-up-domain-authentication; https://www.twilio.com/docs/sendgrid#send-your-first-email"
  },
  {
   "id": "cap-09",
   "group": "Inbound email",
   "capability": "Receive and parse inbound email via webhook",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST config: PATCH /v3/user/webhooks/parse/settings",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Inbound Parse"
   },
   "check": "Configured endpoint receives a POST with parsed MIME fields when an email arrives at the parse domain",
   "source": "https://www.twilio.com/docs/sendgrid/for-developers/parsing-email/setting-up-the-inbound-parse-webhook; https://www.twilio.com/docs/sendgrid#parsing-email"
  },
  {
   "id": "cap-10",
   "group": "Email design",
   "capability": "Design an email with drag-and-drop editor or custom HTML",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Marketing > Design editor"
   },
   "check": "Saved design appears in template gallery and renders in a test send",
   "source": "https://www.twilio.com/en-us/products/marketing-campaigns/email-design-editor"
  },
  {
   "id": "cap-11",
   "group": "Email design",
   "capability": "Use a pre-built responsive email template",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v3/templates?generations=dynamic",
    "mcp": null,
    "cli": null,
    "ui": "Marketing > Templates gallery"
   },
   "check": "Selected gallery template is cloned into account's template list",
   "source": "https://www.twilio.com/en-us/products/marketing-campaigns/email-templates"
  },
  {
   "id": "cap-12",
   "group": "Testing & QA",
   "capability": "Preview inbox rendering, run spam test, validate links before sending",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Marketing > Email Testing"
   },
   "check": "Test run report shows rendering screenshots per client and a spam score",
   "source": "https://www.twilio.com/en-us/products/marketing-campaigns/email-testing"
  },
  {
   "id": "cap-13",
   "group": "Analytics",
   "capability": "View aggregate email statistics (opens, clicks, bounces, delivered)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v3/stats",
    "mcp": null,
    "cli": null,
    "ui": "Stats Overview"
   },
   "check": "GET /v3/stats for the sent date returns non-zero delivered/opens/clicks counters",
   "source": "https://www.twilio.com/docs/sendgrid/ui/analytics-and-reporting/stats-overview"
  },
  {
   "id": "cap-14",
   "group": "Analytics",
   "capability": "Search per-message activity and event history",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v3/messages",
    "mcp": null,
    "cli": null,
    "ui": "Activity Feed"
   },
   "check": "GET /v3/messages/{msg_id} returns delivery events for a specific message id",
   "source": "https://www.twilio.com/docs/sendgrid#analytics-and-reporting"
  },
  {
   "id": "cap-15",
   "group": "Analytics",
   "capability": "Subscribe to real-time delivery/engagement events via Event Webhook",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /v3/user/webhooks/event/settings",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Mail Settings > Event Webhook"
   },
   "check": "Configured endpoint receives JSON event payloads (delivered, open, click) after a send",
   "source": "https://www.twilio.com/docs/sendgrid/for-developers/tracking-events/getting-started-event-webhook; https://www.twilio.com/docs/sendgrid#analytics-and-reporting"
  },
  {
   "id": "cap-16",
   "group": "Analytics",
   "capability": "Score engagement quality of sends",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /v3/engagementquality",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /v3/engagementquality/scores returns a quality score for the queried sender",
   "source": "https://www.twilio.com/docs/sendgrid/for-developers/sending-email/getting-started-engagement-quality-api"
  },
  {
   "id": "cap-17",
   "group": "Deliverability",
   "capability": "Validate an email address before sending",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v3/validations/email",
    "mcp": null,
    "cli": null,
    "ui": "Email Validation"
   },
   "check": "Response returns a verdict (valid/invalid/risky) for the submitted address",
   "source": "https://www.twilio.com/en-us/products/email-api/pricing (Email validation feature row)"
  },
  {
   "id": "cap-18",
   "group": "Send configuration",
   "capability": "Apply X-SMTPAPI / custom headers to a send",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/mail/send (headers), SMTP X-SMTPAPI header",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Received message shows the custom header set in the request",
   "source": "https://www.twilio.com/docs/sendgrid/for-developers/sending-email/x-smtpapi"
  },
  {
   "id": "cap-19",
   "group": "Send configuration",
   "capability": "Schedule a campaign send for a future time",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/marketing/singlesends/{id}/schedule",
    "mcp": null,
    "cli": null,
    "ui": "Marketing > Campaigns > Schedule"
   },
   "check": "GET /v3/marketing/singlesends/{id} shows status Scheduled with the chosen send_at time",
   "source": "https://www.twilio.com/docs/sendgrid/ui/sending-email/how-to-send-email-with-marketing-campaigns"
  },
  {
   "id": "cap-20",
   "group": "Send configuration",
   "capability": "Manage unsubscribe groups and suppressions",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/asm/groups, GET /v3/suppression/unsubscribes",
    "mcp": null,
    "cli": null,
    "ui": "Suppressions"
   },
   "check": "GET /v3/suppression/unsubscribes lists the address after it unsubscribes",
   "source": "https://www.twilio.com/docs/sendgrid/ui/sending-email/unsubscribe-groups"
  },
  {
   "id": "cap-21",
   "group": "Team & access",
   "capability": "Invite teammates with role-based permissions",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v3/teammates",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Teammates"
   },
   "check": "GET /v3/teammates lists the invited teammate with pending/accepted status",
   "source": "https://www.twilio.com/docs/sendgrid/ui/account-and-settings/teammates"
  },
  {
   "id": "cap-22",
   "group": "Team & access",
   "capability": "Create and manage API keys with scoped permissions",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v3/api_keys",
    "mcp": null,
    "cli": null,
    "ui": "Settings > API Keys"
   },
   "check": "GET /v3/api_keys/{id} returns the key's name and granted scopes",
   "source": "https://www.twilio.com/docs/sendgrid/ui/account-and-settings/api-keys"
  },
  {
   "id": "cap-23",
   "group": "Team & access",
   "capability": "Create subusers to isolate sending by brand/department",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "POST /v3/subusers",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Subusers"
   },
   "check": "GET /v3/subusers lists the created subuser with its own credentials",
   "source": "https://www.twilio.com/docs/sendgrid/ui/account-and-settings/subusers; https://www.twilio.com/en-us/products/email-api/pricing (Subuser management feature row)"
  },
  {
   "id": "cap-24",
   "group": "Team & access",
   "capability": "Enable single sign-on (SSO) for account login",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > SSO"
   },
   "check": "SSO-configured login redirects to the identity provider instead of password form",
   "source": "https://www.twilio.com/docs/sendgrid/ui/account-and-settings/sso; https://www.twilio.com/en-us/products/email-api/pricing (Single sign-on feature row)"
  },
  {
   "id": "cap-25",
   "group": "Deliverability",
   "capability": "Use a dedicated sending IP",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /v3/ips",
    "mcp": null,
    "cli": null,
    "ui": "Settings > IP Addresses"
   },
   "check": "GET /v3/ips/{ip} shows the dedicated IP assigned to the account/subuser",
   "source": "https://www.twilio.com/en-us/products/email-api/pricing (Dedicated IPs included feature row)"
  },
  {
   "id": "cap-26",
   "group": "Deliverability",
   "capability": "Warm up a dedicated IP automatically",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "PUT /v3/ips/warmup",
    "mcp": null,
    "cli": null,
    "ui": "Settings > IP Warmup"
   },
   "check": "GET /v3/ips/warmup/{ip} shows warmup in progress with day count and increasing ramp limit",
   "source": "https://www.twilio.com/docs/sendgrid/api-reference/ip-warmup-api/retrieve-all-ips-currently-in-warmup"
  },
  {
   "id": "cap-27",
   "group": "Integrations",
   "capability": "Send via cloud integration (e.g. Microsoft Azure)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Azure-configured relay successfully delivers a test message through SendGrid",
   "source": "https://www.twilio.com/docs/sendgrid#send-email"
  },
  {
   "id": "cap-28",
   "group": "Integrations",
   "capability": "Use official SDKs/CLI libraries to integrate sending",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "sendgrid-cli (community) / language SDKs",
    "ui": null
   },
   "check": "SDK call to mail.send returns a 202 Accepted response via the underlying API",
   "source": "https://www.twilio.com/docs/sendgrid#sdks-and-tools"
  }
 ],
 "attempts": [
  {
   "t": "03:41",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "robots.txt + Content-Usage",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "sendgrid.com/robots.txt 301 -> www.twilio.com/robots.txt; User-agent: * group has \"Content-Signal: ai-train=no, search=yes, ai-input=yes\" (Cloudflare Content Signals scheme, parses); no aipref Content-Usage line or header",
   "notes": ""
  },
  {
   "t": "03:41",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "llms.txt",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "sendgrid.com/llms.txt 301 -> twilio.com/en-us/sendgrid (HTML). https://www.twilio.com/docs/llms.txt 200 text/plain 379521 bytes, ~341 SendGrid entries with .md links",
   "notes": ""
  },
  {
   "t": "03:41",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "MCP server/discover on https://mcp.twilio.com/docs",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "server/discover -> HTTP 405 {\"error\":{\"code\":-32601,\"message\":\"method \\\"server/discover\\\" not supported\"}}; initialize offering 2026-07-28 -> protocolVersion 2025-11-25, serverInfo twilio-docs-mcp 0.1.0; tools/list: twilio__search, twilio__retrieve (read-only docs). tools/call twilio__search \"SendGrid send mail v3\" returned SendGrid API reference",
   "notes": "Docs-only MCP: does not execute API calls (per docs/ai/mcp.md). Legacy protocol."
  },
  {
   "t": "03:41",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "cards: server-card, ai-catalog, agent-card, PRM",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "mcp.twilio.com/docs/server-card 404; mcp.twilio.com/.well-known/oauth-protected-resource 404; www.twilio.com/.well-known/{ai-catalog.json,agent-card.json,agent.json} 404 text/html; sendgrid.com/.well-known/{ai-catalog.json,agent-card.json,ucp} 403 text/html",
   "notes": ""
  },
  {
   "t": "03:41",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "markdown docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET twilio.com/docs/sendgrid/api-reference with Accept: text/markdown -> 200 content-type text/markdown, vary: Accept-Encoding only (no Vary: Accept); api-reference.md URL -> 200 text/markdown",
   "notes": ""
  },
  {
   "t": "03:41",
   "cap": "discovery",
   "capability": "agent discovery",
   "task": "OpenAPI",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "github.com/twilio/sendgrid-oai spec/json: 46 files; tsg_mail_v3.json openapi \"3.1.0\", servers api.sendgrid.com and api.eu.sendgrid.com",
   "notes": ""
  },
  {
   "t": "03:41",
   "cap": "docs",
   "capability": "find docs",
   "task": "find API docs headless",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "twilio.com/docs/llms.txt + /docs/sendgrid/api-reference.md + OpenAPI repo twilio/sendgrid-oai",
   "notes": ""
  },
  {
   "t": "03:41",
   "cap": "pay",
   "capability": "pay step probes",
   "task": "402/agent payment probes",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "api.sendgrid.com/v3/mail/send GET 405 JSON; /v3/user/profile 401 {\"errors\":[{\"field\":null,\"message\":\"authorization required\"}]} no WWW-Authenticate Payment, no PAYMENT-REQUIRED; x402./mpp./agents.sendgrid.com NXDOMAIN; /.well-known/ucp, oauth-protected-resource, oauth-authorization-server 403 HTML; not in x402 Bazaar or mpp.dev/api/services; llms.txt has no x402/MPP terms. Pricing: \"Sign up for a free trial, no credit card required.\"",
   "notes": ""
  },
  {
   "t": "03:41",
   "cap": "signup",
   "capability": "sign up",
   "task": "headless sign-up",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "signup.sendgrid.com 302 -> login.sendgrid.com/unified_login/start?screen_hint=signup -> login.twilio.com/u/signup (Auth0 web form). No documented sign-up API (Account Provisioning API is reseller-only per docs).",
   "notes": ""
  },
  {
   "t": "03:41",
   "cap": "signup",
   "capability": "sign up",
   "task": "browser sign-up at login.twilio.com/u/signup",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Form filled (name, an inbox inbox, password, terms); on Continue a Cloudflare Turnstile \"Verify you are human\" checkbox appeared (script challenges.cloudflare.com/turnstile/v0/api.js) and the form did not submit. Page also loads eHawkTalon.js (fraud scoring) and euob.powerrobotflower.com script.",
   "notes": ""
  },
  {
   "t": "04:39",
   "cap": "signup",
   "capability": "sign up",
   "task": "human handoff for Turnstile (own browser)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Page also states next steps \"Verify your email address & phone number\".",
   "notes": ""
  },
  {
   "t": "04:39",
   "cap": "credentials",
   "capability": "API key",
   "task": "get an API key",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "POST /v3/mail/send without auth -> 401 {\"errors\":[{\"message\":\"Permission denied, wrong credentials\"}]}; with invalid Bearer -> 401 \"The provided authorization grant is invalid, expired, or revoked\". API keys are created in the console or via POST /v3/api_keys (needs an existing key). No OAuth/PRM (/.well-known/oauth-protected-resource 403 HTML).",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key.",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "04:39",
   "cap": "cap-01",
   "capability": "Send a transactional email via API or SMTP",
   "task": "Send a transactional email via API or SMTP via POST /v3/mail/send",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-02",
   "capability": "Personalize and merge dynamic data into a send",
   "task": "Personalize and merge dynamic data into a send via POST /v3/mail/send (personalizations[].dynamic_template_data)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-03",
   "capability": "Create and send a dynamic email template",
   "task": "Create and send a dynamic email template via POST /v3/templates, POST /v3/templates/{id}/versions",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-04",
   "capability": "Design and send a marketing email campaign",
   "task": "Design and send a marketing email campaign via POST /v3/marketing/singlesends",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-05",
   "capability": "Build an automated email journey/drip series",
   "task": "Build an automated email journey/drip series via docs/UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-06",
   "capability": "Add, update and segment contacts into lists",
   "task": "Add, update and segment contacts into lists via PUT /v3/marketing/contacts, POST /v3/marketing/lists, POST /v3/marketing/segments/2.0",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-07",
   "capability": "Capture new signups through a hosted signup form",
   "task": "Capture new signups through a hosted signup form via docs/UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-08",
   "capability": "Authenticate a sending domain (SPF/DKIM)",
   "task": "Authenticate a sending domain (SPF/DKIM) via POST /v3/whitelabel/domains",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-13",
   "capability": "View aggregate email statistics (opens, clicks, bounces, delivered)",
   "task": "View aggregate email statistics (opens, clicks, bounces, delivered) via GET /v3/stats",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-14",
   "capability": "Search per-message activity and event history",
   "task": "Search per-message activity and event history via GET /v3/messages",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-22",
   "capability": "Create and manage API keys with scoped permissions",
   "task": "Create and manage API keys with scoped permissions via POST /v3/api_keys",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "cap-28",
   "capability": "Use official SDKs/CLI libraries to integrate sending",
   "task": "Use official SDKs/CLI libraries to integrate sending via docs/UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "not attempted against the account: no API key",
   "notes": "No account: sign-up blocked by Cloudflare Turnstile on login.twilio.com/u/signup, so no API key."
  },
  {
   "t": "04:39",
   "cap": "delete",
   "capability": "delete account",
   "task": "find how to delete account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "docs/sendgrid/ui/account-and-settings/billing.md \"Delete your account\": cancel subscription, then \"Contact Twilio SendGrid Support for help deleting accounts and account data.\" No delete API for own account (Account Provisioning Delete Account is reseller-only). No account was created, so nothing to delete.",
   "notes": ""
  },
  {
   "t": "04:39",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "find how to cancel a paid plan",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "billing.md \"Cancel your subscription\": console Settings > Account Details > Your Products > Cancel Subscription, confirmation modal with \"Keep my Account\", reason survey, two more survey questions, then Confirm Cancellation. No billing API documented. No plan started in this drive.",
   "notes": ""
  }
 ],
 "stale": false,
 "icon": "/logos/sendgrid.png",
 "monitored": false,
 "verdict": "Needs a person stops our agent at sign-up: the only path to a key runs through login.twilio.com's web form, and a Cloudflare Turnstile \"Verify you are human\" check on Continue blocked it there. Docs are the strongest part of the record: llms.txt, Markdown API pages, an OpenAPI spec and a docs-only MCP server, all readable without a browser, but none of it gets past the check. Without an account there is no key, no authenticated call, and no work done. Paying needs a card added in the console, and leaving means contacting Support to delete the account.",
 "page": "https://agentdrives.com/tools/sendgrid?via=api"
}