{
  "data": {
    "a": {
      "slug": "loops",
      "name": "Loops API + MCP",
      "vendor": "Loops (Astrodon Corporation)",
      "vendorUrl": "https://loops.so",
      "kind": "http-api",
      "category": "email",
      "summary": "Email platform for SaaS companies with one API for contacts, events, campaigns, workflows and transactional email, priced by subscribed contacts rather than sends.",
      "url": "https://www.anchorterminal.com/tools/loops",
      "markdownUrl": "https://www.anchorterminal.com/tools/loops.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/loops.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/loops.json",
      "dns": "loops.grade.anchorterminal.com",
      "repo": "https://github.com/Loops-so/loops-js",
      "license": "MIT",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://app.loops.so/api/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "loops"
        }
      ],
      "auth": "mixed",
      "authNotes": "REST calls use an API key as a Bearer token, tested with GET /api/v1/api-key. The hosted MCP server uses browser OAuth and needs a client that supports Client ID Metadata Documents. No API key goes in the MCP config.",
      "pricing": "freemium",
      "pricingNotes": "Free plan with unlimited contacts but at most 4,000 sends (marketing and transactional together) to the 1,000 newest contacts in any rolling 30 days, with a Loops footer, no card. Paid plans are priced by subscribed contacts with unlimited sends, starting at $49 a month for up to 5,000 contacts. No per-seat or per-send charge (https://loops.so/pricing).",
      "priceSummary": "$49 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402 or stablecoin payment path in docs or pricing (checked 2026-09-30).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 7,
        "npmWeekly": 459804,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://loops.so/docs",
      "llmsTxt": "https://loops.so/docs/llms.txt",
      "openapi": "https://app.loops.so/openapi.json",
      "registryName": "io.github.loops-so/loops",
      "capabilities": [
        "email.send",
        "email.templates",
        "email.domains",
        "email.analytics",
        "email.marketing"
      ],
      "tags": [
        "hosted",
        "freemium",
        "no-card",
        "mcp",
        "llms-txt",
        "openapi",
        "typescript",
        "webhooks"
      ],
      "lastRelease": "2026-10-20",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 64.5,
        "grade": "B",
        "agentReady": false,
        "rank": 462,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 12,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 70,
          "maintenance": 83,
          "payments": 30,
          "reliability": 90,
          "schema": 82,
          "security": 46,
          "transparency": 66
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-02"
        },
        "negative": -3,
        "negativeNotes": [
          "2026-09-17. The API changelog says `ccEmail` and `bccEmail` are now rejected when updating campaign email messages, which had accepted them since 19 June, with no advance notice that we could find. The 30 September change putting ungrouped new campaigns in \"Unsorted\", announced that day, is the same kind and folds in. -3 (https://loops.so/docs/api-reference/changelog)"
        ],
        "verdict": "Event and transactional sends take an `Idempotency-Key`, the status page shows no incident touching the API in 90 days, and official SDKs cover four languages. Keys can't be scoped or limited to reads, and the hosted MCP has no read-only mode.",
        "bestFor": "SaaS teams that send lifecycle and product email from one contact list and want an OAuth MCP.",
        "strengths": [
          "No status incident touching the API or sending in the 90 days to 2 November",
          "`Idempotency-Key` on event and transactional sends",
          "Hosted MCP with OAuth, listed in the official MCP registry",
          "Official SDKs for JavaScript, Go, PHP and Ruby, plus a CLI and agent skills",
          "Unlimited sends on paid plans, priced by subscribed contacts"
        ],
        "weaknesses": [
          "No scoped or read-only keys, and no read-only MCP mode",
          "Transactional sends need a published template, no ad hoc HTML",
          "No inbound email or reply handling",
          "10 API requests a second per team, and 60 a minute on content endpoints",
          "A breaking change on 17 September with same-day notice"
        ],
        "agentNotes": [
          "Publish the transactional email in Loops first, then send with its transactionalId and dataVariables",
          "Send an `Idempotency-Key` on transactional sends and events so a retry doesn't double up",
          "On 429, back off exponentially and read x-ratelimit-remaining",
          "Ask support to enable attachments before sending them on transactional email",
          "Use events to trigger workflows instead of sending sequences yourself"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 64.5
          }
        ],
        "editorialScores": {
          "ergonomics": 70,
          "maintenance": 83,
          "payments": 30,
          "reliability": 90,
          "schema": 82,
          "security": 46,
          "transparency": 62
        },
        "provenanceScore": 69,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-02",
            "maintenance": "2026-11-02",
            "payments": "2026-11-02",
            "reliability": "2026-11-02",
            "schema": "2026-11-02",
            "security": "2026-11-02",
            "transparency": "2026-11-02"
          },
          "last": "2026-11-02",
          "lastMoved": "2026-11-02",
          "oldest": "2026-11-02",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl -X POST https://app.loops.so/api/v1/transactional -H \"Authorization: Bearer $LOOPS_API_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\"transactionalId\":\"YOUR_TRANSACTIONAL_ID\",\"email\":\"them@example.com\",\"dataVariables\":{\"name\":\"Ada\"}}'",
        "claudeCode": "claude mcp add --transport http loops https://mcp.loops.so",
        "config": {
          "mcpServers": {
            "loops": {
              "type": "http",
              "url": "https://mcp.loops.so"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/email.send",
        "tool": "https://letme.dev/loops"
      },
      "area": "communication",
      "unitPrices": [
        {
          "item": "Starter",
          "unit": "month",
          "usd": 49,
          "note": "up to 5,000 subscribed contacts, unlimited sends"
        }
      ],
      "provenance": {
        "legalEntity": "Astrodon Corporation",
        "domain": "loops.so",
        "domainRegistered": "",
        "domainNote": "The .so registry answered no RDAP query, so the registration date is unknown.",
        "endpointOnVendorDomain": true,
        "terms": "https://loops.so/terms",
        "privacy": "https://loops.so/privacy",
        "statusPage": "https://status.loops.so",
        "changelog": "https://loops.so/docs/api-reference/changelog",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "score": 69
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/loops.json",
      "live": {
        "slug": "loops",
        "probe": {
          "target": "https://app.loops.so/api/v1",
          "method": "get",
          "lastAt": "2026-11-07T18:20:36.036507662Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 177,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 147,
          "p95ms24h": 298,
          "samples24h": 239,
          "samples30d": 7910,
          "days": [
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-29",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.loops.so",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-07T18:21:20.779193132Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "Loops-so/loops-js",
            "version": "v7.4.0",
            "released": "2026-11-04",
            "seenAt": "2026-11-06T23:41:26.586586114Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.loops-so/loops",
            "version": "1.0.0",
            "seenAt": "2026-11-07T18:16:28.95801333Z"
          },
          {
            "registry": "npm",
            "name": "loops",
            "version": "7.4.0",
            "seenAt": "2026-11-06T23:41:26.318571697Z"
          }
        ],
        "githubStars": 7,
        "npmWeekly": 438268,
        "securityTxt": {
          "url": "https://loops.so/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:01:29.798931242Z"
        },
        "llmsTxt": {
          "url": "https://loops.so/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:55.141609832Z"
        },
        "domain": {
          "domain": "loops.so",
          "checkedAt": "2026-11-01T14:16:24.686664116Z"
        },
        "pages": [
          {
            "url": "https://loops.so/docs/api-reference/changelog",
            "kind": "deprecations",
            "status": 200,
            "checkedAt": "2026-11-07T14:13:31.579321858Z",
            "changedAt": "2026-10-27T03:49:38.881323751Z",
            "fingerprint": "5094865bd434"
          },
          {
            "url": "https://loops.so/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-07T14:13:35.405463873Z",
            "changedAt": "2026-10-30T05:43:22.426966614Z",
            "fingerprint": "30bb1ac253dc"
          },
          {
            "url": "https://loops.so/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:13:35.991468987Z",
            "changedAt": "2026-10-30T05:43:24.433842662Z",
            "fingerprint": "364848b912ff"
          },
          {
            "url": "https://loops.so/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:13:37.959164515Z",
            "changedAt": "2026-10-31T06:15:52.286730528Z",
            "fingerprint": "14a168c7fc4b"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.loops.so",
          "checkedAt": "2026-11-07T01:45:54.457212135Z",
          "status": "auth",
          "note": "asks for credentials before listing its tools",
          "changedAt": "2026-11-07T01:45:54.457212135Z"
        },
        "github": {
          "repo": "loops-so/loops-js",
          "checkedAt": "2026-11-02T09:01:44.920933763Z",
          "stars": 7,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-10-19T08:23:50Z",
          "openIssues": 1,
          "openPRs": 1,
          "issuesOpened90d": 0,
          "issuesClosed90d": 0,
          "prsMerged90d": 7,
          "ci": {
            "branch": "main",
            "runs": 22,
            "success": 22,
            "failure": 0,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-10-19T08:24:07Z"
          },
          "replies": {
            "sampled": 6,
            "unanswered": 1,
            "medianDays": 8.1
          }
        },
        "updatedAt": "2026-11-07T18:21:20.779193132Z"
      }
    },
    "answer": "Loops API + MCP scores 64.5 (B) on agent readiness against SendLayer's 47.7 (D), and leads in every scored category.",
    "b": {
      "slug": "sendlayer",
      "name": "SendLayer",
      "vendor": "SendLayer, LLC",
      "vendorUrl": "https://sendlayer.com",
      "kind": "http-api",
      "category": "email",
      "summary": "SendLayer is a transactional email service from SendLayer, LLC, with an SMTP relay, a REST API for sending and email events, webhooks, SDKs in five languages and a hosted MCP server. It is aimed largely at WordPress and small-business sites.",
      "url": "https://www.anchorterminal.com/tools/sendlayer",
      "markdownUrl": "https://www.anchorterminal.com/tools/sendlayer.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/sendlayer.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/sendlayer.json",
      "dns": "sendlayer.grade.anchorterminal.com",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://mcp.sendlayer.com",
      "packages": [
        {
          "registry": "npm",
          "name": "sendlayer"
        },
        {
          "registry": "pypi",
          "name": "sendlayer"
        }
      ],
      "auth": "api-key",
      "authNotes": "Bearer API key in the `Authorization` header, created per sending domain in the dashboard (one is made when a domain is authorised). Keys can be labelled and deleted; no scopes or read-only keys were found. The hosted MCP server takes the same key in an `x-sendlayer-api-key` or `Authorization` header.",
      "pricing": "paid",
      "pricingNotes": "Plans billed annually. Starter $5 a month for 1,000 emails, Business $15 for 5,000, Growth $25 for 10,000, Scale 20,000+ by quote. A free trial sends up to 200 emails. Accounts that reach their limit are upgraded automatically. 14-day money-back guarantee.",
      "priceSummary": "$5 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, llms.txt, the OpenAPI file or the pricing page (checked 2026-11-06).",
        "endpoints": []
      },
      "toolCount": 5,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 113,
        "pypiWeekly": 9,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://developers.sendlayer.com/",
      "llmsTxt": "https://developers.sendlayer.com/llms.txt",
      "openapi": "https://developers.sendlayer.com/api-reference/sendlayer.json",
      "capabilities": [
        "email.send",
        "email.analytics",
        "email.domains"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "smtp",
        "webhooks",
        "openapi",
        "llms-txt",
        "mcp",
        "remote-mcp",
        "status-page",
        "typescript",
        "python",
        "php",
        "ruby",
        "go"
      ],
      "lastRelease": "2026-08-21",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 47.7,
        "grade": "D",
        "agentReady": false,
        "rank": 1135,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 19,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 62,
          "maintenance": 40,
          "payments": 20,
          "reliability": 48,
          "schema": 68,
          "security": 38,
          "transparency": 49
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "A small API with an OpenAPI file, llms.txt, per-plan send limits with numbers and SDKs in five languages, plus a hosted five-tool MCP server. Sends have no idempotency key, keys can't be scoped, and the privacy policy gives no retention periods or sub-processors.",
        "bestFor": "Low-volume transactional mail for WordPress and small sites.",
        "strengths": [
          "Send limits per minute, hour and day are published for each plan",
          "OpenAPI file, llms.txt and Markdown copies of every developer page",
          "Official SDKs for Node, Python, PHP, Ruby and Go",
          "Hosted MCP server at mcp.sendlayer.com with five tools for sending, events and webhooks",
          "Numbered error codes with messages for each missing or invalid field"
        ],
        "weaknesses": [
          "No idempotency key on sends, so a retried request can send twice",
          "API keys can't be scoped or made read-only",
          "Status history shows 98 automated outage entries in 90 days with no durations or write-ups",
          "Privacy policy has no date, retention periods, DPA or sub-processor list",
          "No public changelog, SLA, security.txt or disclosure policy found"
        ],
        "agentNotes": [
          "Check the email log with `GET /api/v1/events` before retrying a failed send, since sends have no idempotency key",
          "Keep To and CC at 10 addresses or fewer and BCC at 5, or the API returns error code 20 or 27",
          "Pace sends to the plan's per-minute limit, 50 on Starter and 120 on Business, and back off on 429",
          "Pass the API key in a header to mcp.sendlayer.com; the server answers 405 to anything but POST"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 47.7
          }
        ],
        "editorialScores": {
          "ergonomics": 62,
          "maintenance": 40,
          "payments": 20,
          "reliability": 48,
          "schema": 68,
          "security": 38,
          "transparency": 23
        },
        "provenanceScore": 75,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install sendlayer",
        "http": "curl https://console.sendlayer.com/api/v1/email -X POST -H \"Authorization: Bearer $SENDLAYER_API_KEY\" -H \"Content-Type: application/json\" -d '{\"From\":{\"name\":\"You\",\"email\":\"you@yourdomain.com\"},\"To\":[{\"name\":\"Person\",\"email\":\"person@example.com\"}],\"Subject\":\"Hello\",\"ContentType\":\"Text\",\"PlainContent\":\"Hello\"}'",
        "claudeCode": "claude mcp add --scope user --transport http sendlayer-mcp https://mcp.sendlayer.com --header \"Authorization: Bearer YOUR_SENDLAYER_API_KEY\"",
        "config": {
          "mcpServers": {
            "sendlayer": {
              "headers": {
                "x-sendlayer-api-key": "YOUR_SENDLAYER_API_KEY"
              },
              "url": "https://mcp.sendlayer.com"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/email.send",
        "tool": "https://letme.dev/sendlayer"
      },
      "area": "communication",
      "unitPrices": [
        {
          "item": "Starter",
          "unit": "month",
          "usd": 5,
          "note": "1,000 emails a month, billed annually"
        },
        {
          "item": "Business",
          "unit": "month",
          "usd": 15,
          "note": "5,000 emails a month, billed annually"
        },
        {
          "item": "Growth",
          "unit": "month",
          "usd": 25,
          "note": "10,000 emails a month, billed annually"
        }
      ],
      "provenance": {
        "legalEntity": "SendLayer, LLC",
        "domain": "sendlayer.com",
        "domainRegistered": "2015-07-22",
        "endpointOnVendorDomain": true,
        "terms": "https://sendlayer.com/terms-of-service/",
        "privacy": "https://sendlayer.com/privacy-policy/",
        "statusPage": "https://status.sendlayer.com",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "The terms name SendLayer, LLC under Florida law with courts in West Palm Beach. Neither the terms nor the privacy policy carries a date.",
          "The terms contain no clause on automated access to the website.",
          "sendlayer.com/robots.txt disallows only WordPress internals, cart and search paths. developers.sendlayer.com allows all but /_next/ and /cdn-cgi/.",
          "RDAP gives sendlayer.com a registration date of 22 July 2015; the about page says the team started SendLayer in 2022, and the footer copyright runs from 2021.",
          "/.well-known/security.txt returns 404."
        ],
        "score": 75
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/sendlayer.json",
      "live": {
        "slug": "sendlayer",
        "probe": {
          "target": "https://mcp.sendlayer.com",
          "method": "get",
          "lastAt": "2026-11-07T18:20:53.661767075Z",
          "lastOk": true,
          "lastStatus": 405,
          "lastMs": 337,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 332,
          "p95ms24h": 423,
          "samples24h": 200,
          "samples30d": 200,
          "days": [
            {
              "date": "2026-11-06",
              "probes": 13,
              "ok": 13
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.sendlayer.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-07T04:48:44.410046578Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "sendlayer",
            "version": "1.1.0",
            "seenAt": "2026-11-07T00:04:36.013206716Z"
          },
          {
            "registry": "pypi",
            "name": "sendlayer",
            "version": "1.1.0",
            "released": "2026-08-21",
            "seenAt": "2026-11-07T00:04:36.403864413Z"
          }
        ],
        "npmWeekly": 113,
        "pypiWeekly": 9,
        "securityTxt": {
          "url": "https://sendlayer.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:00:08.464258052Z"
        },
        "llmsTxt": {
          "url": "https://developers.sendlayer.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:33:54.535300528Z"
        },
        "pages": [
          {
            "url": "https://sendlayer.com/privacy-policy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:19:27.507195007Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "1f5bea738989"
          },
          {
            "url": "https://sendlayer.com/terms-of-service/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:19:31.497088663Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "1fbf9877b12a"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.sendlayer.com",
          "checkedAt": "2026-11-07T01:47:41.040426143Z",
          "status": "auth",
          "note": "asks for credentials before listing its tools",
          "changedAt": "2026-11-07T01:47:41.040426143Z"
        },
        "updatedAt": "2026-11-07T18:20:53.661767075Z"
      }
    },
    "edges": [
      {
        "by": 43,
        "category": "maintenance",
        "leads": "loops",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "API changelog entries on 20 and 6 October, loops-go v0.8.0 and the Loops CLI v0.13.0 on 20 October (30). Since 4 August, seven changelog entries, loops-js 7.2.0 and 7.3.0, loops-go 0.5.0 to 0.8.0, loops-php 3.3.0 and 3.4.0, loops-rb 2.5.0 and nine CLI tags from v0.10.0 to v0.13.1 (20). Public changelog and support. We couldn't see reply times (10). Official SDKs in four languages, current with the spec, and the MCP is listed in the official registry as io.github.loops-so/loops 1.0.0 (13 August) (15). The SDK runs tests in CI on every push (8). 30 + 20 + 10 + 15 + 8 = 83.",
          "b": "The Node and Python SDKs were last released as 1.1.0 on 21 August 2026, 77 days before this check (20). One SDK release in the 90 days and no dated changelog (0 of 20). A closed service with a support form and docs updated through 2026, but no public changelog (5 of 15). Not in the official MCP registry (search for sendlayer returned nothing on 6 November). Official SDKs in five languages (10 of 15). The SDK repositories exist on GitHub under sendlayer; their CI wasn't read (5 of 10). Total 40."
        },
        "scores": {
          "a": 83,
          "b": 40
        }
      },
      {
        "by": 42,
        "category": "reliability",
        "leads": "loops",
        "name": "Reliability",
        "reasons": {
          "a": "Statuspage at status.loops.so with components for sending, transactional, API, SMTP relay and webhooks (20). One incident in the 90 days to 2 November, \"Delay in email metric processing\" on 11 September (about 90 minutes, metrics slow to appear in the app, none lost), which doesn't touch the API or sending, so the record reads as clean (30). 10 requests a second per team, and 60 a minute for the content endpoints (15). 429 with x-ratelimit headers and advice to retry with exponential backoff, and an `Idempotency-Key` header on event and transactional sends (15). No SLA found on the pricing page (0). GA (10). 20 + 30 + 15 + 15 + 0 + 10 = 90.",
          "b": "Graded with the hosted lines. A Cronitor status page at status.sendlayer.com with components for the app, SMTP, tracking links, the website and each plan's sending IPs, and a history (15 of 20, see below). The 90 days from 8 August hold 98 automated outage entries, 13 of them on SendLayer Services Health, most on per-plan IP monitors, all marked resolved but with no durations or write-ups, so their size can't be judged (5 of 30). Send limits per minute, hour and day are published per plan, plus recipient and size caps (15). 429 appears in the error code list, with no Retry-After, backoff guidance or idempotency for sends (3 of 15). No SLA found (0). The API is at v1 with no beta label (10). The status page's uptime columns showed no data on 6 November, so the component line takes 15 of 20 rather than 20. Total 48."
        },
        "scores": {
          "a": 90,
          "b": 48
        }
      },
      {
        "by": 17,
        "category": "transparency",
        "leads": "loops",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "Closed service with published terms and an MIT JavaScript SDK (20). The privacy policy (updated 15 May 2025) says customer contact and message data is returned or deleted within 30 days of termination and account data within 12 months, links a DPA, and says aggregated or anonymised data is used for machine learning in the product (22). Dated deprecations, such as List custom fields on 14 January 2025, but a breaking change on 17 September shipped with same-day notice (12). No subprocessor list. The policy names Stripe, Google Analytics, Segment and GitHub and says data goes to the US (8).",
          "b": "Closed service with terms naming SendLayer, LLC under Florida law (15 of 30). The privacy policy is undated, says data is kept as long as the account is active or as needed, and names no retention periods, DPA or processors; only the pricing page gives log retention per plan (8 of 30). No deprecation policy or dated notices (0). No sub-processors or data locations disclosed (0). Total 23."
        },
        "scores": {
          "a": 66,
          "b": 49
        }
      },
      {
        "by": 14,
        "category": "schema",
        "leads": "loops",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "OpenAPI 3.1 in YAML and JSON at app.loops.so, version 1.22.8 on 2 November with 48 paths and 72 operations (25). llms.txt, Markdown copies of every docs page and agent skills for coding agents (10). The reference explains each endpoint. The hosted MCP isn't open source, so we couldn't read its tool definitions (10). Typed inputs in the spec, with ranges such as perPage between 10 and 50 (12). Examples for the API, SDKs and CLI on each examples page, and the spec declares 400, 404, 409, 422 and 429 answers, but the API intro doesn't document the error format (10). Dated API changelog with entries to 20 October, and a versioned spec (15). 25 + 10 + 10 + 12 + 10 + 15 = 82.",
          "b": "OpenAPI file at developers.sendlayer.com/api-reference/sendlayer.json (version 1.0.1) covering four paths, send, events and webhooks (25). llms.txt and Markdown copies of every developer page (10). Operation summaries say what each call does; nothing says when not to use one, and the hosted MCP server's tool definitions aren't public (10 of 20). Parameters are typed but without enums or limits, and the event filter is a free string (7 of 15). Code samples in five languages and a table of 35 error codes, but the spec documents only 200 responses (11 of 15). Version in the path and in the spec, with no public changelog (5 of 15). Total 68."
        },
        "scores": {
          "a": 82,
          "b": 68
        }
      },
      {
        "by": 10,
        "category": "payments",
        "leads": "loops",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "No x402, MPP or L402 (0). Paid plans are priced by subscribed contacts on a slider, Growth from $49 a month for up to 5,000 contacts with unlimited sends, re-read on 2 November (10). Free plan of 4,000 sends in any rolling 30 days to 1,000 contacts, with no card (20). Browser signup, no autonomous route (0).",
          "b": "No x402, MPP or L402 (0). Plan prices are public but only as annual plans, with no per-email overage price; accounts are upgraded automatically at the limit (10 of 20). A free trial of 200 emails is offered through checkout; whether it needs a card couldn't be read, since robots.txt disallows the add-to-cart URLs (10 of 20). A person signs up and authorises a domain in a browser (0). Total 20."
        },
        "scores": {
          "a": 30,
          "b": 20
        }
      },
      {
        "by": 8,
        "category": "ergonomics",
        "leads": "loops",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "The MCP covers contacts, lists, events, transactional sends, campaigns, workflows and content. We couldn't count its tools, and API responses are small (15). perPage and cursor pagination on lists (17). Errors come back with a message, and the SDK raises RateLimitExceededError with the limit attached. No error-code reference found (12). `Idempotency-Key` on events and transactional sends. We couldn't see MCP tool annotations (14). Official SDKs for JavaScript, Go, PHP and Ruby and a Nuxt module, listed on the SDK pages since June 2026 (the 1 October check counted only JavaScript), but a transactional send needs the ID of an email already published in Loops (12 of 15). 15 + 17 + 12 + 14 + 12 = 70.",
          "b": "Small responses and five MCP tools (18 of 25). Events filter by start and end date, event type and message ID, with an offset and a count (15 of 20). Errors are JSON with a numbered code and message per field, and documented (14 of 20). No idempotency key on sends, and the MCP annotations can't be read (0 of 20). A send needs from, to, subject, content type and content; official SDKs for Node, Python, PHP, Ruby and Go (15). Total 62."
        },
        "scores": {
          "a": 70,
          "b": 62
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Loops (Astrodon Corporation)",
        "b": "SendLayer, LLC",
        "name": "Vendor"
      },
      {
        "a": "https://app.loops.so/api/v1",
        "b": "https://mcp.sendlayer.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT",
        "b": "none",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "5",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "io.github.loops-so/loops",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-10-20",
        "b": "2026-08-21",
        "name": "Last release"
      },
      {
        "a": "2025-12-15",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2025-05-15",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "7 stars, 460k npm/wk",
        "b": "113 npm/wk, 9 PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "3.5/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Loops API + MCP scores 64.5 (B) on agent readiness against SendLayer's 47.7 (D), and leads in every scored category.",
        "question": "Which is better for AI agents, Loops API + MCP or SendLayer?"
      },
      {
        "answer": "Loops API + MCP takes an API key or an OAuth sign-in. SendLayer needs an API key.",
        "question": "Do Loops API + MCP and SendLayer need an API key?"
      },
      {
        "answer": "Yes. Loops API + MCP has a hosted endpoint at https://app.loops.so/api/v1 and SendLayer at https://mcp.sendlayer.com.",
        "question": "Can an agent call Loops API + MCP and SendLayer without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 90 against 48",
          "Schema \u0026 documentation, 82 against 68",
          "Agent ergonomics, 70 against 62",
          "Security \u0026 auth, 46 against 38",
          "Payments \u0026 pricing, 30 against 20",
          "Maintenance \u0026 community, 83 against 40",
          "Transparency \u0026 trust, 66 against 49"
        ],
        "also": [
          "Free to start without a card"
        ],
        "goodFor": "SaaS teams that send lifecycle and product email from one contact list and want an OAuth MCP.",
        "slug": "loops",
        "watchFor": "No scoped or read-only keys, and no read-only MCP mode"
      },
      {
        "aheadOn": null,
        "also": [
          "No incidents deducted, where Loops API + MCP loses 3 points for them"
        ],
        "goodFor": "Low-volume transactional mail for WordPress and small sites.",
        "slug": "sendlayer",
        "watchFor": "No idempotency key on sends, so a retried request can send twice"
      }
    ],
    "history": {
      "loops": [
        {
          "causes": [
            "evidence",
            "correction"
          ],
          "date": "2026-11-02",
          "delta": 1.7,
          "from": 62.8,
          "fromGrade": "B",
          "to": 64.5,
          "toGrade": "B"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-28",
          "delta": 0.1,
          "from": 62.7,
          "fromGrade": "B",
          "to": 62.8,
          "toGrade": "B"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-08",
          "delta": -0.4,
          "from": 63.1,
          "fromGrade": "B",
          "to": 62.7,
          "toGrade": "B"
        }
      ],
      "sendlayer": null
    },
    "job": {
      "capability": "email.send",
      "name": "Sending email"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/ahasend-vs-loops.json",
        "title": "AhaSend API + MCP vs Loops API + MCP",
        "url": "https://www.anchorterminal.com/compare/ahasend-vs-loops"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ahasend-vs-sendlayer.json",
        "title": "AhaSend API + MCP vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/ahasend-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-ses-vs-loops.json",
        "title": "Amazon SES vs Loops API + MCP",
        "url": "https://www.anchorterminal.com/compare/amazon-ses-vs-loops"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-ses-vs-sendlayer.json",
        "title": "Amazon SES vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/amazon-ses-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/brevo-vs-loops.json",
        "title": "Brevo API + MCP vs Loops API + MCP",
        "url": "https://www.anchorterminal.com/compare/brevo-vs-loops"
      },
      {
        "json": "https://www.anchorterminal.com/compare/brevo-vs-sendlayer.json",
        "title": "Brevo API + MCP vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/brevo-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops.json",
        "title": "Cloudflare Email Service vs Loops API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-sendlayer.json",
        "title": "Cloudflare Email Service vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/cloudflare-email-service-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/groundmail-vs-loops.json",
        "title": "Groundmail API + MCP vs Loops API + MCP",
        "url": "https://www.anchorterminal.com/compare/groundmail-vs-loops"
      },
      {
        "json": "https://www.anchorterminal.com/compare/groundmail-vs-sendlayer.json",
        "title": "Groundmail API + MCP vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/groundmail-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mailersend.json",
        "title": "Loops API + MCP vs MailerSend",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mailersend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mailgun.json",
        "title": "Loops API + MCP vs Mailgun API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mailgun"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mailjet.json",
        "title": "Loops API + MCP vs Mailjet API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mailjet"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mailpace.json",
        "title": "Loops API + MCP vs MailPace",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mailpace"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mailtrap.json",
        "title": "Loops API + MCP vs Mailtrap Email API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mailtrap"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-mandrill.json",
        "title": "Loops API + MCP vs Mailchimp Transactional (Mandrill)",
        "url": "https://www.anchorterminal.com/compare/loops-vs-mandrill"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-postmark.json",
        "title": "Loops API + MCP vs Postmark API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-postmark"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-resend.json",
        "title": "Loops API + MCP vs Resend API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-resend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-sendgrid.json",
        "title": "Loops API + MCP vs Twilio SendGrid",
        "url": "https://www.anchorterminal.com/compare/loops-vs-sendgrid"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-smtp2go.json",
        "title": "Loops API + MCP vs SMTP2GO API + MCP",
        "url": "https://www.anchorterminal.com/compare/loops-vs-smtp2go"
      },
      {
        "json": "https://www.anchorterminal.com/compare/loops-vs-zoho-zeptomail.json",
        "title": "Loops API + MCP vs Zoho CPaaS (formerly ZeptoMail)",
        "url": "https://www.anchorterminal.com/compare/loops-vs-zoho-zeptomail"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mailersend-vs-sendlayer.json",
        "title": "MailerSend vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/mailersend-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mailgun-vs-sendlayer.json",
        "title": "Mailgun API + MCP vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/mailgun-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mailjet-vs-sendlayer.json",
        "title": "Mailjet API + MCP vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/mailjet-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mailpace-vs-sendlayer.json",
        "title": "MailPace vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/mailpace-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mailtrap-vs-sendlayer.json",
        "title": "Mailtrap Email API + MCP vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/mailtrap-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mandrill-vs-sendlayer.json",
        "title": "Mailchimp Transactional (Mandrill) vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/mandrill-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/postmark-vs-sendlayer.json",
        "title": "Postmark API + MCP vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/postmark-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/resend-vs-sendlayer.json",
        "title": "Resend API + MCP vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/resend-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/sendgrid-vs-sendlayer.json",
        "title": "Twilio SendGrid vs SendLayer",
        "url": "https://www.anchorterminal.com/compare/sendgrid-vs-sendlayer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/sendlayer-vs-smtp2go.json",
        "title": "SendLayer vs SMTP2GO API + MCP",
        "url": "https://www.anchorterminal.com/compare/sendlayer-vs-smtp2go"
      },
      {
        "json": "https://www.anchorterminal.com/compare/sendlayer-vs-zoho-zeptomail.json",
        "title": "SendLayer vs Zoho CPaaS (formerly ZeptoMail)",
        "url": "https://www.anchorterminal.com/compare/sendlayer-vs-zoho-zeptomail"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 42,
        "edge": "loops",
        "key": "reliability",
        "loops": 90,
        "name": "Reliability",
        "sendlayer": 48,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 14,
        "edge": "loops",
        "key": "schema",
        "loops": 82,
        "name": "Schema \u0026 documentation",
        "sendlayer": 68,
        "weight": 13
      },
      {
        "by": 8,
        "edge": "loops",
        "key": "ergonomics",
        "loops": 70,
        "name": "Agent ergonomics",
        "sendlayer": 62,
        "weight": 13
      },
      {
        "by": 8,
        "edge": "loops",
        "key": "security",
        "loops": 46,
        "name": "Security \u0026 auth",
        "sendlayer": 38,
        "weight": 14
      },
      {
        "by": 10,
        "edge": "loops",
        "key": "payments",
        "loops": 30,
        "name": "Payments \u0026 pricing",
        "sendlayer": 20,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 43,
        "edge": "loops",
        "key": "maintenance",
        "loops": 83,
        "name": "Maintenance \u0026 community",
        "sendlayer": 40,
        "weight": 7
      },
      {
        "by": 17,
        "edge": "loops",
        "key": "transparency",
        "loops": 66,
        "name": "Transparency \u0026 trust",
        "sendlayer": 49,
        "weight": 7
      }
    ],
    "summary": "Loops API + MCP scores 64.5 (B) on agent readiness against SendLayer's 47.7 (D), and leads in every scored category. Both do sending email.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "loops": "Event and transactional sends take an `Idempotency-Key`, the status page shows no incident touching the API in 90 days, and official SDKs cover four languages. Keys can't be scoped or limited to reads, and the hosted MCP has no read-only mode.",
      "sendlayer": "A small API with an OpenAPI file, llms.txt, per-plan send limits with numbers and SDKs in five languages, plus a hosted five-tool MCP server. Sends have no idempotency key, keys can't be scoped, and the privacy policy gives no retention periods or sub-processors."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/loops-vs-sendlayer",
    "json": "https://www.anchorterminal.com/compare/loops-vs-sendlayer.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/loops-vs-sendlayer.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/loops-vs-sendlayer.min.md"
  },
  "markdown": "Loops API + MCP scores 64.5 (B) on agent readiness against SendLayer's 47.7 (D), and leads in every scored category. Both do sending email.\n\n- Loops API + MCP: grade B, 64.5/100, rank #462 of 1486. Markdown https://www.anchorterminal.com/tools/loops.md · JSON https://www.anchorterminal.com/api/v1/tools/loops.json\n- SendLayer: grade D, 47.7/100, rank #1135 of 1486. Markdown https://www.anchorterminal.com/tools/sendlayer.md · JSON https://www.anchorterminal.com/api/v1/tools/sendlayer.json\n- Best email delivery APIs for AI agents: https://www.anchorterminal.com/best/email/index.md\n- All 174 email comparisons: https://www.anchorterminal.com/compare/email/index.md\n\n## Which one, for what\n\n### Loops API + MCP (B)\n\nGood for: SaaS teams that send lifecycle and product email from one contact list and want an OAuth MCP.\n\nAhead on:\n- Reliability, 90 against 48\n- Schema \u0026 documentation, 82 against 68\n- Agent ergonomics, 70 against 62\n- Security \u0026 auth, 46 against 38\n- Payments \u0026 pricing, 30 against 20\n- Maintenance \u0026 community, 83 against 40\n- Transparency \u0026 trust, 66 against 49\n\nAlso in its favour:\n- Free to start without a card\n\nWatch for: No scoped or read-only keys, and no read-only MCP mode\n\n### SendLayer (D)\n\nGood for: Low-volume transactional mail for WordPress and small sites.\n\nAlso in its favour:\n- No incidents deducted, where Loops API + MCP loses 3 points for them\n\nWatch for: No idempotency key on sends, so a retried request can send twice\n\n\n## Why the edge\n\n### Maintenance \u0026 community: Loops API + MCP +43\n\n- Loops API + MCP (83): API changelog entries on 20 and 6 October, loops-go v0.8.0 and the Loops CLI v0.13.0 on 20 October (30). Since 4 August, seven changelog entries, loops-js 7.2.0 and 7.3.0, loops-go 0.5.0 to 0.8.0, loops-php 3.3.0 and 3.4.0, loops-rb 2.5.0 and nine CLI tags from v0.10.0 to v0.13.1 (20). Public changelog and support. We couldn't see reply times (10). Official SDKs in four languages, current with the spec, and the MCP is listed in the official registry as io.github.loops-so/loops 1.0.0 (13 August) (15). The SDK runs tests in CI on every push (8). 30 + 20 + 10 + 15 + 8 = 83.\n- SendLayer (40): The Node and Python SDKs were last released as 1.1.0 on 21 August 2026, 77 days before this check (20). One SDK release in the 90 days and no dated changelog (0 of 20). A closed service with a support form and docs updated through 2026, but no public changelog (5 of 15). Not in the official MCP registry (search for sendlayer returned nothing on 6 November). Official SDKs in five languages (10 of 15). The SDK repositories exist on GitHub under sendlayer; their CI wasn't read (5 of 10). Total 40.\n\n### Reliability: Loops API + MCP +42\n\n- Loops API + MCP (90): Statuspage at status.loops.so with components for sending, transactional, API, SMTP relay and webhooks (20). One incident in the 90 days to 2 November, \"Delay in email metric processing\" on 11 September (about 90 minutes, metrics slow to appear in the app, none lost), which doesn't touch the API or sending, so the record reads as clean (30). 10 requests a second per team, and 60 a minute for the content endpoints (15). 429 with x-ratelimit headers and advice to retry with exponential backoff, and an `Idempotency-Key` header on event and transactional sends (15). No SLA found on the pricing page (0). GA (10). 20 + 30 + 15 + 15 + 0 + 10 = 90.\n- SendLayer (48): Graded with the hosted lines. A Cronitor status page at status.sendlayer.com with components for the app, SMTP, tracking links, the website and each plan's sending IPs, and a history (15 of 20, see below). The 90 days from 8 August hold 98 automated outage entries, 13 of them on SendLayer Services Health, most on per-plan IP monitors, all marked resolved but with no durations or write-ups, so their size can't be judged (5 of 30). Send limits per minute, hour and day are published per plan, plus recipient and size caps (15). 429 appears in the error code list, with no Retry-After, backoff guidance or idempotency for sends (3 of 15). No SLA found (0). The API is at v1 with no beta label (10). The status page's uptime columns showed no data on 6 November, so the component line takes 15 of 20 rather than 20. Total 48.\n\n### Transparency \u0026 trust: Loops API + MCP +17\n\n- Loops API + MCP (66): Closed service with published terms and an MIT JavaScript SDK (20). The privacy policy (updated 15 May 2025) says customer contact and message data is returned or deleted within 30 days of termination and account data within 12 months, links a DPA, and says aggregated or anonymised data is used for machine learning in the product (22). Dated deprecations, such as List custom fields on 14 January 2025, but a breaking change on 17 September shipped with same-day notice (12). No subprocessor list. The policy names Stripe, Google Analytics, Segment and GitHub and says data goes to the US (8).\n- SendLayer (49): Closed service with terms naming SendLayer, LLC under Florida law (15 of 30). The privacy policy is undated, says data is kept as long as the account is active or as needed, and names no retention periods, DPA or processors; only the pricing page gives log retention per plan (8 of 30). No deprecation policy or dated notices (0). No sub-processors or data locations disclosed (0). Total 23.\n\n### Schema \u0026 documentation: Loops API + MCP +14\n\n- Loops API + MCP (82): OpenAPI 3.1 in YAML and JSON at app.loops.so, version 1.22.8 on 2 November with 48 paths and 72 operations (25). llms.txt, Markdown copies of every docs page and agent skills for coding agents (10). The reference explains each endpoint. The hosted MCP isn't open source, so we couldn't read its tool definitions (10). Typed inputs in the spec, with ranges such as perPage between 10 and 50 (12). Examples for the API, SDKs and CLI on each examples page, and the spec declares 400, 404, 409, 422 and 429 answers, but the API intro doesn't document the error format (10). Dated API changelog with entries to 20 October, and a versioned spec (15). 25 + 10 + 10 + 12 + 10 + 15 = 82.\n- SendLayer (68): OpenAPI file at developers.sendlayer.com/api-reference/sendlayer.json (version 1.0.1) covering four paths, send, events and webhooks (25). llms.txt and Markdown copies of every developer page (10). Operation summaries say what each call does; nothing says when not to use one, and the hosted MCP server's tool definitions aren't public (10 of 20). Parameters are typed but without enums or limits, and the event filter is a free string (7 of 15). Code samples in five languages and a table of 35 error codes, but the spec documents only 200 responses (11 of 15). Version in the path and in the spec, with no public changelog (5 of 15). Total 68.\n\n### Payments \u0026 pricing: Loops API + MCP +10\n\n- Loops API + MCP (30): No x402, MPP or L402 (0). Paid plans are priced by subscribed contacts on a slider, Growth from $49 a month for up to 5,000 contacts with unlimited sends, re-read on 2 November (10). Free plan of 4,000 sends in any rolling 30 days to 1,000 contacts, with no card (20). Browser signup, no autonomous route (0).\n- SendLayer (20): No x402, MPP or L402 (0). Plan prices are public but only as annual plans, with no per-email overage price; accounts are upgraded automatically at the limit (10 of 20). A free trial of 200 emails is offered through checkout; whether it needs a card couldn't be read, since robots.txt disallows the add-to-cart URLs (10 of 20). A person signs up and authorises a domain in a browser (0). Total 20.\n\n### Agent ergonomics: Loops API + MCP +8\n\n- Loops API + MCP (70): The MCP covers contacts, lists, events, transactional sends, campaigns, workflows and content. We couldn't count its tools, and API responses are small (15). perPage and cursor pagination on lists (17). Errors come back with a message, and the SDK raises RateLimitExceededError with the limit attached. No error-code reference found (12). `Idempotency-Key` on events and transactional sends. We couldn't see MCP tool annotations (14). Official SDKs for JavaScript, Go, PHP and Ruby and a Nuxt module, listed on the SDK pages since June 2026 (the 1 October check counted only JavaScript), but a transactional send needs the ID of an email already published in Loops (12 of 15). 15 + 17 + 12 + 14 + 12 = 70.\n- SendLayer (62): Small responses and five MCP tools (18 of 25). Events filter by start and end date, event type and message ID, with an offset and a count (15 of 20). Errors are JSON with a numbered code and message per field, and documented (14 of 20). No idempotency key on sends, and the MCP annotations can't be read (0 of 20). A send needs from, to, subject, content type and content; official SDKs for Node, Python, PHP, Ruby and Go (15). Total 62.\n\n## Score by category\n\n| Category | Weight | Loops API + MCP | SendLayer | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 90 | 48 | Loops API + MCP +42 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 82 | 68 | Loops API + MCP +14 |\n| Agent ergonomics | 13% (16.2 this run) | 70 | 62 | Loops API + MCP +8 |\n| Security \u0026 auth | 14% (17.5 this run) | 46 | 38 | Loops API + MCP +8 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 20 | Loops API + MCP +10 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 83 | 40 | Loops API + MCP +43 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 66 | 49 | Loops API + MCP +17 |\n| Negative events | ≤15 | -3 | 0 | |\n| **Total** | | **64.5 · B** | **47.7 · D** | |\n\n## Facts side by side\n\n| Fact | Loops API + MCP | SendLayer |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Loops (Astrodon Corporation) | SendLayer, LLC |\n| Hosted endpoint | `https://app.loops.so/api/v1` | `https://mcp.sendlayer.com` |\n| Transports | HTTP, Streamable HTTP | HTTP, Streamable HTTP |\n| Auth | OAuth or key | API key |\n| Pricing | Freemium | Paid |\n| x402 | no | no |\n| Licence | MIT | none |\n| Tools exposed | none | 5 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | `io.github.loops-so/loops` | not listed |\n| Last release | 2026-10-20 | 2026-08-21 |\n| Terms last updated | 2025-12-15 | no date given |\n| Privacy policy last updated | 2025-05-15 | no date given |\n| Customer content may train models | yes | not found in the text |\n| Terms restrict automated access | yes | not found in the text |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | yes | yes |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 7 stars, 460k npm/wk | 113 npm/wk, 9 PyPI/wk |\n| Agent reviews | 3.5/5 (2) | none |\n\n## How the scores have moved\n\n### Loops API + MCP\n\n- +1.7 on 2 November 2026: new evidence, correction\n- +0.1 on 28 October 2026: checklist\n- -0.4 on 8 October 2026: checklist\n\n### SendLayer\n\nNo score change since it was listed.\n\n## Verdicts\n\n**Loops API + MCP.** Event and transactional sends take an `Idempotency-Key`, the status page shows no incident touching the API in 90 days, and official SDKs cover four languages. Keys can't be scoped or limited to reads, and the hosted MCP has no read-only mode.\n\n**SendLayer.** A small API with an OpenAPI file, llms.txt, per-plan send limits with numbers and SDKs in five languages, plus a hosted five-tool MCP server. Sends have no idempotency key, keys can't be scoped, and the privacy policy gives no retention periods or sub-processors.\n\n## Before you call either\n\n### Loops API + MCP\n\n1. Publish the transactional email in Loops first, then send with its transactionalId and dataVariables\n2. Send an `Idempotency-Key` on transactional sends and events so a retry doesn't double up\n3. On 429, back off exponentially and read x-ratelimit-remaining\n4. Ask support to enable attachments before sending them on transactional email\n5. Use events to trigger workflows instead of sending sequences yourself\n\n### SendLayer\n\n1. Check the email log with `GET /api/v1/events` before retrying a failed send, since sends have no idempotency key\n2. Keep To and CC at 10 addresses or fewer and BCC at 5, or the API returns error code 20 or 27\n3. Pace sends to the plan's per-minute limit, 50 on Starter and 120 on Business, and back off on 429\n4. Pass the API key in a header to mcp.sendlayer.com; the server answers 405 to anything but POST\n\n## Questions\n\n### Which is better for AI agents, Loops API + MCP or SendLayer?\n\nLoops API + MCP scores 64.5 (B) on agent readiness against SendLayer's 47.7 (D), and leads in every scored category.\n\n### Do Loops API + MCP and SendLayer need an API key?\n\nLoops API + MCP takes an API key or an OAuth sign-in. SendLayer needs an API key.\n\n### Can an agent call Loops API + MCP and SendLayer without installing anything?\n\nYes. Loops API + MCP has a hosted endpoint at https://app.loops.so/api/v1 and SendLayer at https://mcp.sendlayer.com.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/loops-vs-sendlayer.json, and with the fewest tokens: https://www.anchorterminal.com/compare/loops-vs-sendlayer.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"loops\", \"b\": \"sendlayer\"}`. From a terminal: `anchor compare loops sendlayer`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/loops.json and https://www.anchorterminal.com/api/v1/tools/sendlayer.json\n\n## Other comparisons with Loops API + MCP or SendLayer\n\n- [AhaSend API + MCP vs Loops API + MCP](https://www.anchorterminal.com/compare/ahasend-vs-loops.md)\n- [AhaSend API + MCP vs SendLayer](https://www.anchorterminal.com/compare/ahasend-vs-sendlayer.md)\n- [Amazon SES vs Loops API + MCP](https://www.anchorterminal.com/compare/amazon-ses-vs-loops.md)\n- [Amazon SES vs SendLayer](https://www.anchorterminal.com/compare/amazon-ses-vs-sendlayer.md)\n- [Brevo API + MCP vs Loops API + MCP](https://www.anchorterminal.com/compare/brevo-vs-loops.md)\n- [Brevo API + MCP vs SendLayer](https://www.anchorterminal.com/compare/brevo-vs-sendlayer.md)\n- [Cloudflare Email Service vs Loops API + MCP](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-loops.md)\n- [Cloudflare Email Service vs SendLayer](https://www.anchorterminal.com/compare/cloudflare-email-service-vs-sendlayer.md)\n- [Groundmail API + MCP vs Loops API + MCP](https://www.anchorterminal.com/compare/groundmail-vs-loops.md)\n- [Groundmail API + MCP vs SendLayer](https://www.anchorterminal.com/compare/groundmail-vs-sendlayer.md)\n- [Loops API + MCP vs MailerSend](https://www.anchorterminal.com/compare/loops-vs-mailersend.md)\n- [Loops API + MCP vs Mailgun API + MCP](https://www.anchorterminal.com/compare/loops-vs-mailgun.md)\n- [Loops API + MCP vs Mailjet API + MCP](https://www.anchorterminal.com/compare/loops-vs-mailjet.md)\n- [Loops API + MCP vs MailPace](https://www.anchorterminal.com/compare/loops-vs-mailpace.md)\n- [Loops API + MCP vs Mailtrap Email API + MCP](https://www.anchorterminal.com/compare/loops-vs-mailtrap.md)\n- [Loops API + MCP vs Mailchimp Transactional (Mandrill)](https://www.anchorterminal.com/compare/loops-vs-mandrill.md)\n- [Loops API + MCP vs Postmark API + MCP](https://www.anchorterminal.com/compare/loops-vs-postmark.md)\n- [Loops API + MCP vs Resend API + MCP](https://www.anchorterminal.com/compare/loops-vs-resend.md)\n- [Loops API + MCP vs Twilio SendGrid](https://www.anchorterminal.com/compare/loops-vs-sendgrid.md)\n- [Loops API + MCP vs SMTP2GO API + MCP](https://www.anchorterminal.com/compare/loops-vs-smtp2go.md)\n- [Loops API + MCP vs Zoho CPaaS (formerly ZeptoMail)](https://www.anchorterminal.com/compare/loops-vs-zoho-zeptomail.md)\n- [MailerSend vs SendLayer](https://www.anchorterminal.com/compare/mailersend-vs-sendlayer.md)\n- [Mailgun API + MCP vs SendLayer](https://www.anchorterminal.com/compare/mailgun-vs-sendlayer.md)\n- [Mailjet API + MCP vs SendLayer](https://www.anchorterminal.com/compare/mailjet-vs-sendlayer.md)\n- [MailPace vs SendLayer](https://www.anchorterminal.com/compare/mailpace-vs-sendlayer.md)\n- [Mailtrap Email API + MCP vs SendLayer](https://www.anchorterminal.com/compare/mailtrap-vs-sendlayer.md)\n- [Mailchimp Transactional (Mandrill) vs SendLayer](https://www.anchorterminal.com/compare/mandrill-vs-sendlayer.md)\n- [Postmark API + MCP vs SendLayer](https://www.anchorterminal.com/compare/postmark-vs-sendlayer.md)\n- [Resend API + MCP vs SendLayer](https://www.anchorterminal.com/compare/resend-vs-sendlayer.md)\n- [Twilio SendGrid vs SendLayer](https://www.anchorterminal.com/compare/sendgrid-vs-sendlayer.md)\n- [SendLayer vs SMTP2GO API + MCP](https://www.anchorterminal.com/compare/sendlayer-vs-smtp2go.md)\n- [SendLayer vs Zoho CPaaS (formerly ZeptoMail)](https://www.anchorterminal.com/compare/sendlayer-vs-zoho-zeptomail.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Loops API + MCP vs SendLayer",
        "url": ""
      }
    ],
    "description": "Loops scores 64.5 (B) to SendLayer's 47.7 (D) for sending email. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Loops API + MCP B 64.5",
      "SendLayer D 47.7",
      "scores"
    ],
    "h1": "Loops API + MCP vs SendLayer",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/loops-vs-sendlayer",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Loops vs SendLayer for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/loops-vs-sendlayer"
  },
  "tokens": {
    "markdown": 4400,
    "slim": 2430
  },
  "version": 1
}
