Legible
Scan APIChrome extension

SendGrid vs Mailgun

On the 29 checks both could be read on, SendGrid is 2 ahead of Mailgun.

SendGridyouMailgun

  1. SendGrid92/100

    Our scan, 9 Nov 2026, 04:00 UTC.

    Find 100 out of 100, Read 85 out of 100, Act 96 out of 100. Weakest step: Read.

  2. Mailgun90/100

    Our scan, 9 Nov 2026, 04:00 UTC.

    Find 81 out of 100, Read 94 out of 100, Act 90 out of 100. Weakest step: Find.

These are public files we could read. They don't rank the products or show what an agent can do with them.

How close · on the 29 shared checks

SendGrid 92Mailgun 90

Dashed: SendGrid after 1 fix (96) and 2 fixes (97). Our maths on these checks, not a forecast.

3 checks pass on Mailgun and fail on SendGrid. SendGrid passes 4 checks that fail on Mailgun. SendGrid passes 1 check where we found something close on Mailgun.

Fix these first

Most points for the least effort. What you tick goes into the prompts below, one for each team with a job to do.

If these 3 pass, SendGrid's full score goes from 92 to 99. That's our checks, not a forecast of what agents do. Effort: minutes, our estimate.

Passes on Mailgun, fails our check on SendGrid

Most points for the least effort first, each next to the real file that passes.

  1. FailRead step+7 pointsEffort: minutes, our estimate

    Fix 1: Your llms.txt has broken links, or it's too long for an agent to read

    Do this: Make every link in your llms.txt return 200: fix or drop the broken ones. Keep the file under 50,000 characters; if it's longer, make it a short index that links to an llms.txt for each section.

    llms.txt links work, and it fits: every link in your llms.txt works, and the file is short enough for an agent to read whole.

    FailWhat we read on SendGrid (1)

    • https://twilio.com/llms.txtHTTP 200over 2 MB, 8039 links; too long for an agent to read whole, so we didn't open the links (redirected to https://www.twilio.com/llms.txt); read the first 2 MB; the file is larger

    PassWhat passes on Mailgun, from our 9 Nov 2026 scan

    View their file ↗

    Why it might matter

    An agent trusts the links in your llms.txt; a broken one sends it to a dead end, and a file past its context gets cut off.

    Our call · Worth doing.

    A broken link in your llms.txt sends an agent to a dead end it trusted.

    Our judgement.

    Report a mistake
    How we test this
    • We read the llms.txt AR-READ-07 passes on (the first with markdown links) and fetch up to 12 of its links, spread through the file, two at a time.
    • A link is broken when it answers 404 or 410, or its host doesn't exist.
    • A 2xx after redirects resolves, and so does an answer like 400, 405 or 406 that shows the address is there (an MCP endpoint answers a plain GET with 405).
    • A refusal, a 429 or a server error isn't judged.
    • The credit is the share that resolve, halved when the file runs to 50,000 characters or more, and nothing past 100,000: AFDocs' size bands.
    • With no llms.txt it isn't counted: AR-READ-07 counts that.
  2. FailRead step+2 pointsEffort: minutes, our estimate

    Fix 2: Your homepage has no structured data for agents to parse

    Do this: Add a <script type="application/ld+json"> block to your homepage's raw HTML, with "@context": "https://schema.org", "@type": "Organization" and your real name and URL.

    Structured data: facts about your company and product, in a standard format (schema.org) in your homepage's code.

    FailWhat we read on SendGrid (1)

    PassWhat passes on Mailgun, from our 9 Nov 2026 scan

    • https://mailgun.com/HTTP 200has an application/ld+json block (redirected to https://www.mailgun.com/)

    What the rival shippedView their file ↗

    Their file
    {  "@context": "https://schema.org",  "@graph": [    {      "@type": "WebPage",      "@id": "https://www.mailgun.com/",      "url": "https://www.mailgun.com/",      "name": "Transactional Email API Service For Developers | Mailgun",      "isPartOf": {        "@id": "https://www.mailgun.com/#website"      },      "about": {        "@id": "https://www.mailgun.com/#organization"      },      "datePublished": "2025-06-30T05:17:31+00:00",      "dateModified": "2026-11-04T16:12:30+00:00",      "description": "Powerful Transactional Email APIs that enable you to send, receive, and track emails, built with developers in mind. Learn more today!",      "breadcrumb": {        "@id": "https://www.mailgun.com/#breadcrumb"      },      "inLanguage": "en-US",      "potentialAction": [        {          "@type": "ReadAction",          "target": ["https://www.mailgun.com/"]        }      ]    },    {      "@type": "BreadcrumbList",      "@id": "https://www.mailgun.com/#breadcrumb",      "itemListElement": [        {          "@type": "ListItem",          "position": 1,          "name": "Home"        }      ]    },    {      "@type": "WebSite",      "@id": "https://www.mailgun.com/#website",      "url": "https://www.mailgun.com/",      "name": "Transactional Email API Service For Developers | Mailgun",      "description": "Powerful Transactional Email APIs that enable you to send, receive, and track emails, built with developers in mind. Learn more today!",      "publisher": {        "@id": "https://www.mailgun.com/#organization"      },      "potentialAction": [        {          "@type": "SearchAction",          "target": {            "@type": "EntryPoint",            "urlTemplate": "https://www.mailgun.com/?s={search_term_string}"          },          "query-input": {            "@type": "PropertyValueSpecification",            "valueRequired": true,            "valueName": "search_term_string"          }        }      ],      "inLanguage": "en-US"    },    {      "@type": "Organization",      "@id": "https://www.mailgun.com/#organization",      "name": "Transactional Email API Service For Developers | Mailgun",      "url": "https://www.mailgun.com/",      "logo": {        "@type": "ImageObject",        "inLanguage": "en-US",        "@id": "https://www.mailgun.com/#/schema/logo/image/",        "url": "https://www.mailgun.com/wp-content/uploads/2025/06/cropped-android-chrome-512x512-1.png",        "contentUrl": "https://www.mailgun.com/wp-content/uploads/2025/06/cropped-android-chrome-512x512-1.png",        "width": 512,        "height": 512,        "caption": "Transactional Email API Service For Developers | Mailgun"      },      "image": {        "@id": "https://www.mailgun.com/#/schema/logo/image/"      }    }  ]}

    Why it might matter

    An agent may have to work out basic facts about your company and product from free text.

    Our call · Worth doing.

    Our judgement.

    Report a mistake
    How we test this
    • We check your homepage's raw HTML has an application/ld+json block that parses as JSON and has @type or @context.
  3. FailRead step+2 pointsEffort: minutes, our estimate

    Fix 3: No .well-known file tells agents how your API or sign-in works

    Do this: Serve one of these files as JSON at /.well-known/ on your site root. Publish only what's true for you: the OAuth or OpenID files only if you run that sign-in, agent-card.json only if you run an A2A agent, otherwise api-catalog, which just lists your APIs (RFC 9727).

    Machine-readable discovery file: a file at a standard address (/.well-known/...) that says how your API or sign-in works.

    FailWhat we read on SendGrid (5)

    2 more

    PassWhat passes on Mailgun, from our 9 Nov 2026 scan

    What the rival shippedView their file ↗

    Their file
    {  "issuer": "https://www.mailgun.com",  "authorization_endpoint": "https://www.mailgun.com/oauth/authorize",  "token_endpoint": "https://www.mailgun.com/oauth/token",  "revocation_endpoint": "https://www.mailgun.com/oauth/revoke",  "response_types_supported": ["code"],  "grant_types_supported": ["authorization_code", "refresh_token"],  "code_challenge_methods_supported": ["S256"],  "scopes_supported": ["mcp"],  "token_endpoint_auth_methods_supported": ["none"],  "client_id_metadata_document_supported": true,  "authorization_response_iss_parameter_supported": true}

    Why it might matter

    An agent may have to guess how sign-in or your API works instead of reading it from a standard file.

    Our call · Depends on your product.

    Publish only what's true for you. An API catalog fits most APIs; OAuth or agent card files only fit if you run them.

    Our judgement.

    Report a mistake
    How we test this
    • We fetch five standard .well-known files and check at least one returns 200 with valid JSON: oauth-authorization-server (RFC 8414), oauth-protected-resource (RFC 9728), openid-configuration, api-catalog (RFC 9727) and agent-card.json (A2A).
    • This list is ours: AgentReady v2.0 doesn't name one.
    • Off the board, on a miss, we also read oauth-protected-resource on the mcp., api. and docs. hosts of your domain, where that metadata usually lives, and it counts only with its resource field.

We couldn't judge SendGrid on these

They pass on Mailgun. These don't count against SendGrid, and they aren't in the numbers above.

Where you're ahead

Passes on SendGrid, fails our check on Mailgun

Nobody here passes our check yet

A chance to be first, if it's worth doing for you.

Check by check

CheckSendGridMailgun
llms.txt linked from your pagesPassPassFailFails our check
llms.txt links work, and it fitsFailFails our checkPassPass
Structured docs pagePassPassFailFails our check, but we found something close
Docs in MarkdownPassPassFailFails our check
Structured dataFailFails our checkPassPass
Machine-readable discovery fileFailFails our checkPassPass
Errors have a schemaPassPassFailFails our check
An agent skill is publishedPassPassFailFails our check

31 checks in all, 8 differ. 2 checks count for only some of you (Couldn't check or Not counted where it doesn't), so your totals can differ even where no check does. * We found something close: the full result has a dated note.

Track it weekly, or add it for your coding agent

Add it for your coding agent

Adds a skill to your project. Ask your agent to use it, and it scans your live site, reads the real file behind each gap and helps write your own. It only publishes if you ask.

npx legible-cli skill

If Windows PowerShell blocks npx, type npx.cmd instead.

A fail means our check didn't pass on what we read, which doesn't prove the thing isn't there. How we check. Why another scanner gives a different number.