{
  "data": {
    "a": {
      "slug": "easypost",
      "name": "EasyPost",
      "vendor": "Simpler Postage, Inc. (d/b/a EasyPost)",
      "vendorUrl": "https://www.easypost.com",
      "kind": "http-api",
      "category": "shipping",
      "summary": "EasyPost is a multi-carrier shipping API from Simpler Postage, Inc. Its REST API quotes carrier rates, buys labels, verifies addresses, tracks parcels and files refunds and insurance claims, with a hosted read-only MCP server in early release.",
      "url": "https://www.anchorterminal.com/tools/easypost",
      "markdownUrl": "https://www.anchorterminal.com/tools/easypost.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/easypost.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/easypost.json",
      "dns": "easypost.grade.anchorterminal.com",
      "repo": "https://github.com/EasyPost/easypost-node",
      "license": "Proprietary service under the EasyPost Master Customer Agreement. The official client libraries on GitHub are MIT, with the Go library under ISC",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.easypost.com/v2",
      "packages": [
        {
          "registry": "npm",
          "name": "@easypost/api"
        },
        {
          "registry": "pypi",
          "name": "easypost"
        },
        {
          "registry": "go",
          "name": "github.com/EasyPost/easypost-go/v5"
        }
      ],
      "auth": "api-key",
      "authNotes": "A self-serve API key, sent as the HTTP Basic username with an empty password. The docs say a wallet and a ship-from address must be set up before keys can be seen or generated. Test and production keys exist, both with full account access, and they can be created, disabled, enabled and deleted through /api_keys or the dashboard. The hosted MCP server takes a production key as a Bearer token. No OAuth, partner review or sales approval is needed for the core API.",
      "pricing": "freemium",
      "pricingNotes": "Free for up to 3,000 labels on wallet carriers, with postage charged separately and a per-label fee after that which the pricing page doesn't state. Bringing your own carrier accounts costs $20 a month plus a per-label fee. Tracking is listed at $0.01 to $0.03 a shipment and insurance at 1 per cent of value, minimum $1.00. Test keys cost nothing, so an agent can build without a contract. Forge, GlobalShip and Luma are priced by sales (checked 2026-10-07).",
      "priceSummary": "$0.02 / call",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, the pricing page or the legal centre (checked 2026-10-07).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 149,
        "npmWeekly": 99736,
        "pypiWeekly": null,
        "asOf": "2026-10-07"
      },
      "docsUrl": "https://docs.easypost.com",
      "llmsTxt": "https://docs.easypost.com/llms.txt",
      "capabilities": [
        "shipping.rates",
        "shipping.labels",
        "shipping.tracking",
        "shipping.address-validation",
        "shipping.returns"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "api-key",
        "llms-txt",
        "mcp",
        "webhooks",
        "sandbox",
        "free-tier",
        "python",
        "typescript",
        "go",
        "java",
        "php",
        "ruby",
        "dotnet",
        "status-page",
        "soc2"
      ],
      "lastRelease": "2026-10-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 57.4,
        "grade": "C",
        "agentReady": false,
        "rank": 794,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 5,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 63,
          "maintenance": 85,
          "payments": 22,
          "reliability": 68,
          "schema": 55,
          "security": 47,
          "transparency": 71
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-04"
        },
        "negative": 0,
        "verdict": "Docs written for agents (llms.txt, a Markdown copy of each page, a JSON page index), seven official SDKs updated in late October 2026 and free test keys make the REST API easy to start on. No OpenAPI spec or REST idempotency keys were found, and every key has full account access. The MCP server now buys labels, with retry-safe buys.",
        "bestFor": "An agent that quotes rates across carriers, buys a label, verifies an address, follows tracking by webhook and requests a refund from one merchant account, mainly on US carriers.",
        "strengths": [
          "llms.txt, a Markdown copy of almost every docs page and a JSON page index with a note on when to read each page",
          "Test API keys run the rate, buy, track and webhook flow at no cost, with no postage bought and no carrier contacted",
          "Seven official SDKs (C#, Go, Java, Node, PHP, Python, Ruby), each with a release on 27 or 29 October 2026",
          "Dated release notes almost every week, 8 entries between 8 August and 29 October 2026",
          "The hosted MCP server's `buy_shipment` refuses a price other than the approved one, and a retried buy returns the label already bought"
        ],
        "weaknesses": [
          "No OpenAPI spec was found in the docs or in the EasyPost GitHub organisation. The reference is prose and tables, with a Postman workspace",
          "The REST API has no idempotency keys, and `reference` on a shipment isn't unique, so a retried buy can purchase a second label",
          "API keys allow full account access. Test and production modes and child users are the only separation, with no read-only or scoped key",
          "The load-based limiter on buying and rating publishes no number, and the 429 guidance gives no Retry-After header",
          "The Master Customer Agreement supplies the service as is, with no uptime commitment, and the per-label fee after 3,000 free labels isn't on the pricing page"
        ],
        "agentNotes": [
          "Use a test API key while building. It buys no postage and contacts no carrier, and test tracking codes simulate each tracking status",
          "Don't blind-retry `POST /shipments/:id/buy` after a timeout. Retrieve the shipment first and check for `postage_label`, since the REST API has no idempotency key",
          "Send the API key as the HTTP Basic username with an empty password on the REST API, and as a Bearer production key on the MCP server",
          "On the MCP server, pass the approved price to `buy_shipment` and keep client approval on for buy, insure and refund; it runs in production mode only",
          "Pass a scoped `carrier_accounts` list when rating. Only the first 60 accounts are rated and the call doesn't fail when more are enabled"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 57.4
          }
        ],
        "editorialScores": {
          "ergonomics": 63,
          "maintenance": 85,
          "payments": 22,
          "reliability": 68,
          "schema": 55,
          "security": 47,
          "transparency": 53
        },
        "provenanceScore": 89,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-04",
            "maintenance": "2026-11-04",
            "payments": "2026-11-04",
            "reliability": "2026-11-04",
            "schema": "2026-11-04",
            "security": "2026-11-04",
            "transparency": "2026-11-04"
          },
          "last": "2026-11-04",
          "lastMoved": "2026-11-04",
          "oldest": "2026-11-04",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npm install @easypost/api",
        "http": "curl -u \"$EASYPOST_API_KEY\": https://api.easypost.com/v2/shipments",
        "claudeCode": "claude mcp add --scope project --transport http easypost \\\n  https://app-api.easypost.com/mcp \\\n  --header 'Authorization: Bearer ${EASYPOST_API_KEY}'",
        "config": {
          "mcpServers": {
            "easypost": {
              "headers": {
                "Authorization": "Bearer ${EASYPOST_API_KEY}"
              },
              "type": "http",
              "url": "https://app-api.easypost.com/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/shipping.rates",
        "tool": "https://letme.dev/easypost"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Extra tracker call",
          "unit": "call",
          "usd": 0.02,
          "note": "one included with each label bought"
        },
        {
          "item": "Extra US address verification",
          "unit": "call",
          "usd": 0.02,
          "note": "one included with each label bought; $0.06 outside the US"
        },
        {
          "item": "Extra rating call",
          "unit": "call",
          "usd": 0.02,
          "note": "three included with each label bought"
        },
        {
          "item": "SmartRate call",
          "unit": "call",
          "usd": 0.03
        },
        {
          "item": "Bring your own carrier accounts",
          "unit": "month",
          "usd": 20,
          "note": "plus a per-label fee not stated on the pricing page"
        },
        {
          "item": "Amazon label",
          "unit": "tx",
          "usd": 0.2,
          "note": "API Addendum 4.3, effective 30 October 2026; per label bought"
        },
        {
          "item": "Pay-On-Delivery label",
          "unit": "tx",
          "usd": 0.15,
          "note": "API Addendum 4.3, effective 30 October 2026; per label bought"
        }
      ],
      "provenance": {
        "legalEntity": "Simpler Postage, Inc. (d/b/a EasyPost)",
        "domain": "easypost.com",
        "domainRegistered": "1998-01-18",
        "endpointOnVendorDomain": true,
        "terms": "https://legal.easypost.com/#mca",
        "privacy": "https://legal.easypost.com/#privacy-policy",
        "statusPage": "https://www.easypoststatus.com",
        "changelog": "https://docs.easypost.com/releases",
        "securityTxt": "none",
        "checked": "2026-10-07",
        "notes": [
          "The Master Customer Agreement (version 6.1, effective 25 August 2026) names Simpler Postage, Inc. (d/b/a EasyPost), 2600 N. Ashton Blvd., Suite 300A, Lehi, UT 84043.",
          "www.easypost.com/.well-known/security.txt and api.easypost.com/.well-known/security.txt return 404. The legal centre carries a Responsible Disclosure Policy with the contact security-abuse@easypost.com.",
          "The privacy policy and the Data Protection Addendum are both version 1.0, effective 18 August 2025. The addendum's Annex D lists 12 subprocessors, all in the USA.",
          "The MCP server is on app-api.easypost.com and the REST API on api.easypost.com. The status page is on a separate domain, easypoststatus.com.",
          "trust.easypost.com answered 403 to our reader, so certifications are taken only from the addendum, which refers to a SOC 2 Type 2 report."
        ],
        "score": 89
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/easypost.json",
      "live": {
        "slug": "easypost",
        "probe": {
          "target": "https://api.easypost.com/v2",
          "method": "get",
          "lastAt": "2026-11-07T19:22:04.487627787Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 635,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 638,
          "p95ms24h": 752,
          "samples24h": 238,
          "samples30d": 7473,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 93,
              "ok": 93
            },
            {
              "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": 197,
              "ok": 197
            }
          ]
        },
        "vendorStatus": {
          "page": "https://www.easypoststatus.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-07T19:22:01.56483997Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "EasyPost/easypost-node",
            "version": "v9.1.0",
            "released": "2026-10-29",
            "seenAt": "2026-11-06T23:23:16.065201068Z"
          },
          {
            "registry": "npm",
            "name": "@easypost/api",
            "version": "9.1.0",
            "seenAt": "2026-11-06T23:23:15.533378968Z"
          },
          {
            "registry": "pypi",
            "name": "easypost",
            "version": "10.8.0",
            "released": "2026-10-27",
            "seenAt": "2026-11-06T23:23:15.755248342Z"
          }
        ],
        "githubStars": 149,
        "npmWeekly": 102012,
        "pypiWeekly": 53087,
        "securityTxt": {
          "url": "https://easypost.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T15:59:51.434551522Z"
        },
        "llmsTxt": {
          "url": "https://docs.easypost.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:20.754835539Z"
        },
        "domain": {
          "domain": "easypost.com",
          "registered": "1998-01-18",
          "source": "https://rdap.verisign.com/com/v1/domain/easypost.com",
          "checkedAt": "2026-11-01T14:19:24.344804688Z"
        },
        "pages": [
          {
            "url": "https://docs.easypost.com/releases",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:06:14.751979914Z",
            "changedAt": "2026-10-30T05:37:17.396564341Z",
            "fingerprint": "4d4d10092075"
          },
          {
            "url": "https://legal.easypost.com/",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-11-07T14:12:54.12231437Z",
            "changedAt": "2026-10-31T06:15:06.468473081Z",
            "fingerprint": "64ee0b96e376"
          }
        ],
        "mcpTools": {
          "url": "https://app-api.easypost.com/mcp",
          "checkedAt": "2026-11-07T01:44:00.380144193Z",
          "status": "auth",
          "note": "asks for credentials before listing its tools",
          "changedAt": "2026-11-07T01:44:00.380144193Z"
        },
        "github": {
          "repo": "easypost/easypost-node",
          "checkedAt": "2026-11-02T08:45:46.426816178Z",
          "stars": 149,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-10-29T21:40:19Z",
          "openIssues": 0,
          "openPRs": 2,
          "issuesOpened90d": 0,
          "issuesClosed90d": 2,
          "prsMerged90d": 35,
          "ci": {
            "branch": "master",
            "runs": 42,
            "success": 36,
            "failure": 6,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-10-29T21:35:40Z"
          },
          "replies": {
            "sampled": 25,
            "unanswered": 0,
            "medianDays": 0.9
          }
        },
        "updatedAt": "2026-11-07T19:22:04.487627787Z"
      }
    },
    "answer": "EasyPost scores 57.4 (C) on agent readiness against Envia's 36.5 (F), and leads in 6 of 7 scored categories. Envia leads on schema \u0026 documentation.",
    "b": {
      "slug": "envia",
      "name": "Envia",
      "vendor": "Envia Shipping",
      "vendorUrl": "https://envia.com",
      "kind": "http-api",
      "category": "shipping",
      "summary": "Envia is a multi-carrier shipping platform, strongest in Latin America, with REST APIs for rates, labels, tracking, pickups, commercial invoices and address data. An official stdio MCP server exposes ten of those operations to agents.",
      "url": "https://www.anchorterminal.com/tools/envia",
      "markdownUrl": "https://www.anchorterminal.com/tools/envia.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/envia.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/envia.json",
      "dns": "envia.grade.anchorterminal.com",
      "transports": [
        "stdio"
      ],
      "packages": [
        {
          "registry": "npm",
          "name": "@envia/envia-mcp"
        }
      ],
      "auth": "api-key",
      "authNotes": "Bearer API tokens created in the dashboard under `Desarrolladores \u003e Acceso de API`, one environment each: sandbox tokens work only against api-test.envia.com and production tokens only against api.envia.com. Several tokens can exist and each can be deleted to revoke it. No scopes were found. The MCP server reads the token from `ENVIA_API_KEY` and defaults to sandbox.",
      "pricing": "usage",
      "pricingNotes": "Prepaid balance: labels, notifications, insurance and add-ons draw on money added to the Envia account, and each price is shown when quoting. There is no public price list; volume plans go through sales. A free sandbox account returns simulated rates and creates test labels with no charges.",
      "priceSummary": "Pay per use",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs, the MCP package or the pricing page (checked 2026-11-06). Charges come from a prepaid balance.",
        "endpoints": []
      },
      "toolCount": 10,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://docs.envia.com/docs/getting-started",
      "llmsTxt": "https://docs.envia.com/llms.txt",
      "openapi": "https://docs.envia.com/reference/shipping-rates.md",
      "capabilities": [
        "shipping.rates",
        "shipping.labels",
        "shipping.tracking",
        "shipping.address-validation"
      ],
      "tags": [
        "official",
        "hosted",
        "mcp",
        "llms-txt",
        "openapi",
        "sandbox",
        "prepaid",
        "webhooks",
        "latam",
        "typescript"
      ],
      "lastRelease": "2026-03-06",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 36.5,
        "grade": "F",
        "agentReady": false,
        "rank": 1384,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 12,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 53,
          "maintenance": 10,
          "payments": 20,
          "reliability": 20,
          "schema": 80,
          "security": 35,
          "transparency": 16
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "low",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "Envia's shipping APIs are documented for agents, with llms.txt, OpenAPI definitions on every reference page, a free sandbox and a compact ten-tool MCP server that defaults to test mode. No status page, rate limits, public price list or readable terms were found, and the MCP package has had one release.",
        "bestFor": "Shops and platforms shipping in Mexico and Latin America that want rates and labels from many local carriers.",
        "strengths": [
          "Free sandbox with simulated rates and test labels, kept apart from production by separate tokens",
          "OpenAPI definitions embedded in every reference page, plus llms.txt and Markdown docs",
          "Ten MCP tools that default to the sandbox environment",
          "Labels cancelled before the first carrier scan are refunded to the balance automatically",
          "Postal code and address-structure lookups work without a token"
        ],
        "weaknesses": [
          "No status page or rate limits found",
          "No public price list; costs appear only when quoting",
          "Terms and privacy text could not be read, and no legal entity was found",
          "MCP tools carry no readOnly or destructive annotations, and the package has one release, 0.1.0",
          "The docs changelog stops at March 2026"
        ],
        "agentNotes": [
          "Leave `ENVIA_ENVIRONMENT` unset until the user confirms live shipping; the default is sandbox",
          "Ask the user before `envia_create_label` in production, since it spends the account balance",
          "Validate the postal code at geocodes.envia.com before quoting to avoid no-coverage errors",
          "Cancel an unwanted label before the carrier scans it to get the automatic refund",
          "Use a sandbox token with sandbox hosts and a production token with production hosts; they are not interchangeable"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "low",
            "grade": "F",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 36.5
          }
        ],
        "editorialScores": {
          "ergonomics": 53,
          "maintenance": 10,
          "payments": 20,
          "reliability": 20,
          "schema": 80,
          "security": 35,
          "transparency": 0
        },
        "provenanceScore": 32,
        "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": "npx -y @envia/envia-mcp@latest",
        "config": {
          "mcpServers": {
            "envia": {
              "args": [
                "-y",
                "@envia/envia-mcp@latest"
              ],
              "command": "npx",
              "env": {
                "ENVIA_API_KEY": "your_api_key_here"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/shipping.rates",
        "tool": "https://letme.dev/envia"
      },
      "area": "business",
      "provenance": {
        "legalEntity": "",
        "domain": "envia.com",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "",
        "privacy": "https://envia.com/en-US/legal/privacy-policy?n=privacy_policy",
        "statusPage": "",
        "changelog": "https://docs.envia.com/docs/changelog",
        "securityTxt": "unknown",
        "checked": "2026-11-06",
        "notes": [
          "envia.com/robots.txt allows all but language-change paths; docs.envia.com disallows edit, login and api-next paths and links llms.txt.",
          "The privacy policy page renders only a heading without script, and every terms URL tried answered 500, so neither text was read.",
          "status.envia.com did not connect and no status page is linked. security.txt was not checked."
        ],
        "score": 32
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/envia.json",
      "live": {
        "slug": "envia",
        "versions": [
          {
            "registry": "npm",
            "name": "@envia/envia-mcp",
            "version": "0.1.0",
            "seenAt": "2026-11-06T23:24:27.893485506Z"
          }
        ],
        "npmWeekly": 81,
        "securityTxt": {
          "url": "https://envia.com/.well-known/security.txt",
          "state": "unknown",
          "checkedAt": "2026-11-07T16:01:23.154161694Z"
        },
        "llmsTxt": {
          "url": "https://docs.envia.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:25.501362093Z"
        },
        "pages": [
          {
            "url": "https://docs.envia.com/docs/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:06:16.542743112Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b3c01b7da2e7"
          },
          {
            "url": "https://envia.com/en-US/legal/privacy-policy?n=privacy_policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:09:20.480053366Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "52e5d34d2a62"
          }
        ],
        "updatedAt": "2026-11-07T16:01:23.154161694Z"
      }
    },
    "edges": [
      {
        "by": 75,
        "category": "maintenance",
        "leads": "easypost",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "The releases page has an entry dated 29 October 2026, six days before this check, and the Node, Go, Java and C# libraries were tagged the same day (30). Eight dated release notes fall in the 90 days from 6 August (8, 15, 22 and 29 August, 25 and 28 September, 8 and 29 October), and every library had a release on 27 or 29 October (20). A closed service with public release notes, support@easypost.com, a help centre, ai@easypost.com for the MCP server and a published four-hour response target on the Base support tier. We didn't read GitHub issues or test response times (11 of 15). Seven official SDKs, each with a release on 27 or 29 October 2026: Node 9.1.0, Python 10.8.0, Go 5.12.0, Java 8.10.0, C# 7.12.0, PHP 8.9.0 and Ruby 7.8.0 (15). The Python library's CI lints and runs tests, per the 7 October check, and Node 9.0.0 moved to TypeScript and fetch (9 of 10, partly met). 30 + 20 + 11 + 15 + 9 = 85.",
          "b": "The latest dated change found is the docs changelog for March 2026 and @envia/envia-mcp 0.1.0 on 4 March 2026, more than 180 days ago; doc pages show later `updatedAt` stamps (28 October for the FAQ) that record no change (0). No dated entries in the 90 days from 8 August (0). Support through the dashboard and docs, with no public tracker; the MCP repository named on npm could not be cloned (5 of 15). The MCP package is official, with no API SDK and no registry entry (5 of 15). No public CI to read (0). 0 + 0 + 5 + 5 + 0 = 10."
        },
        "scores": {
          "a": 85,
          "b": 10
        }
      },
      {
        "by": 55,
        "category": "transparency",
        "leads": "easypost",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "The service is closed, under a Master Customer Agreement (version 6.1, effective 25 August 2026) and seven addenda in a legal centre that keeps every past version. The SDKs are MIT or ISC (15). The privacy policy (18 August 2025) gives no retention period. The agreement points to a Data Retention Policy in the help centre, which refused our reader, and it grants EasyPost a licence to use customer data to improve its services and develop new products during and after the term. A data processing addendum with EU and UK standard clauses is public (15 of 30). The agreement says EasyPost will use reasonable efforts to notify customers before API changes that aren't backwards compatible, with no notice period, and allows termination with a refund within 15 days if functionality is materially reduced. No deprecation policy with dates was found (6 of 20). Annex D of the addendum lists 12 subprocessors with purpose and country, all in the USA, and customers have 10 days to object to a new one (17 of 20). The legal centre was re-read on 4 November; the MCA is still version 6.1. 15 + 15 + 6 + 17 = 53.",
          "b": "Every terms URL tried answered 500 and the privacy policy is drawn by script, so no terms, entity or data-handling statement was read (0 of 30, 0 of 30). No deprecation policy or dated notices (0). No subprocessors or data locations found (0). 0 + 0 + 0 + 0 = 0, as unread rather than absent where the pages exist."
        },
        "scores": {
          "a": 71,
          "b": 16
        }
      },
      {
        "by": 48,
        "category": "reliability",
        "leads": "easypost",
        "name": "Reliability",
        "reasons": {
          "a": "Read with the hosted lines and scored on the REST API at api.easypost.com/v2, the surface an agent would use to rate, buy and track. www.easypoststatus.com on Statuspage lists 44 components on its page, re-read 4 November 2026 (20). Its history feed covers the whole 90 days from 6 August. Five incidents fall in that window, each partial. On 27 August the Core APIs degraded briefly during a deployment, resolved 14 minutes after it was identified. On 20 September USPS Ship requests failed most of the time for about five and a half hours (09:55 to 15:19 PDT) on a USPS-side fault, on 23 September a subset of USPS Ship buys failed, on 5 October UPS Mail Innovations returned elevated errors, and on 8 October some rating and tracking requests timed out for about 73 minutes at the hosting provider. Announced maintenance windows (14, 21 and 28 August, and the USPS windows in October and November) are maintenance, not incidents. Minor incidents only (20). The rate-limiting guide gives five requests a second on index endpoints and a 60-account cap on rating, but the load-based limiter on buying and rating has no published number (8 of 15, partly met). The guide asks for retry with growing backoff on 429 and gives a code sample that retries only GET and DELETE. No Retry-After header, no idempotency keys and no stated safe-retry rule for writes on the REST API (10). The Master Customer Agreement supplies the service as is and as available, and the support addendum sets response targets only (0). The v2 API is generally available (10). 20 + 20 + 8 + 10 + 0 + 10 = 68.",
          "b": "Graded as a hosted service on Envia's REST APIs, with the local MCP server noted. No status page is linked and status.envia.com did not connect (0). No readable incident history (5). No rate limits found in the docs index, FAQs, integration guide or production checklist (0). The production checklist asks for 5xx retry logic and webhook deduplication, with no 429 or idempotency guidance for label creation (5 of 15). No SLA found (0). Neither the APIs nor the MCP server is labelled beta (10). 0 + 5 + 0 + 5 + 0 + 10 = 20."
        },
        "scores": {
          "a": 68,
          "b": 20
        }
      },
      {
        "by": 25,
        "category": "schema",
        "leads": "envia",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "No OpenAPI or similar spec was found in the docs, llms.txt, the page index or the 56 public repositories of the EasyPost GitHub organisation. A Postman workspace is listed, which we didn't read (0 of 25). llms.txt, a Markdown copy of almost every page and doc-index.json with audience and usage notes for each page (10). Each object has a property table with a type and description, and the index says when each page applies. Endpoint pages are mostly examples, with little on when not to use a call (12 of 20). Types and allowed values are given in prose tables, such as the ten tracker statuses, with no schema to validate against, and the Markdown copies omit some parameter lists that the HTML pages render (8 of 15). Every endpoint has examples in cURL and seven SDK languages, plus an error object and 13 general error codes. The full error code list is on a part of the page the Markdown copy omits (13 of 15). The path carries v2 and the releases page has dated notes almost every week. No written versioning policy was found, and some calls sit under /beta (12 of 15). 0 + 10 + 12 + 8 + 13 + 12 = 55.",
          "b": "Each reference page's Markdown copy embeds an OpenAPI definition with sandbox and production servers (25). llms.txt and a Markdown copy of each page (10). Endpoint descriptions say what each is for and which call comes next in the workflow, and the rate tool warns that sandbox rates are simulated (15 of 20). The quote definition has 17 enums and required lists (11 of 15). Workflow examples and an error-formats guide named in the changelog, though its Markdown address answered 404 and the quote definition documents only 200 (9 of 15). A dated docs changelog by month, the latest March 2026 (10 of 15). 25 + 10 + 15 + 11 + 9 + 10 = 80."
        },
        "scores": {
          "a": 55,
          "b": 80
        }
      },
      {
        "by": 12,
        "category": "security",
        "leads": "easypost",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "API keys go in the HTTP Basic username over TLS 1.2. Keys can be created, disabled, enabled and deleted through the API or the dashboard, and the docs say a key allows full account access. Plain revocable keys, with no secret in a query string. The MCP server also takes a sign-in with an EasyPost account from the ChatGPT and Claude apps (20 of 30). Test keys buy no postage and child users hold separate keys. The REST API has no read-only or scoped key and no confirmation step before a purchase. Since 29 October 2026 the MCP server buys labels too (20 tools, 7 of them writes); `buy_shipment` refuses a price that differs from the one the user approved, and the guide asks users to keep client approval on for the three paid or destructive writes (8 of 20, held). Responses carry addresses and carrier tracking text. The MCP guide advises connecting only to trusted clients and servers, and no injection guidance was found (4 of 15). Events and their payloads can be retrieved and each shipment lists its fees, but no audit log of API calls or key use was found in the reviewed documentation (5 of 15). A Responsible Disclosure Policy with a safe-harbour commitment and the contact security-abuse@easypost.com, with no acknowledgement time, HMAC-signed webhooks, and a SOC 2 Type 2 report referred to in the data processing addendum. No security.txt (per the 7 October check) and no bug bounty were found, and OSV lists no advisory for EasyPost packages (10 of 20). 20 + 8 + 4 + 5 + 10 = 47.",
          "b": "Bearer tokens bound to one environment, several per account, revocable by deleting them, with no scopes (20). No read-only token; the MCP server's sandbox default keeps test calls from spending money (5 of 20). Responses carry carrier and address data rather than free text from strangers (10). No audit log found (0). No security page, certification, security.txt or disclosure policy found (0). 20 + 5 + 10 + 0 + 0 = 35."
        },
        "scores": {
          "a": 47,
          "b": 35
        }
      },
      {
        "by": 10,
        "category": "ergonomics",
        "leads": "easypost",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "List calls take `page_size` up to 100 with a default of 20 on most endpoints. No field selection was found, and a shipment response nests addresses, parcel, rates and tracker (12 of 25). Cursor pagination by `before_id` and `after_id`, date ranges and a `has_more` flag, with support that varies by endpoint (16 of 20). Errors carry a machine-readable `code`, a message and per-field entries with an occasional suggestion. The `errors` array arrives as objects or as strings, so a client has to handle both (15 of 20). The REST API has no idempotency keys. Trackers are deduplicated by tracking code and carrier for three months, but `reference` on a shipment isn't unique and nothing guards a repeated buy. Since 29 October 2026 the MCP server's `buy_shipment` returns the label already bought when a timed-out buy is retried, and the guide says three write tools are marked destructive; the tool definitions weren't read (5 of 20, partly met, held). One-call buy creates and purchases in one request, addresses and parcels can be nested or reused by id, and official SDKs cover seven languages (15). 12 + 16 + 15 + 5 + 15 = 63.",
          "b": "Ten compact MCP tools (25). Rates take one carrier per request, and the Queries API filters carriers by country and shipment type; no paging or field selection was found (10 of 20). The FAQ maps common errors to fixes, but the changelog says the three APIs return different error formats that need a normalisation helper (10 of 20). No idempotency key for labels; an unscanned label can be cancelled for an automatic refund, and the MCP tools carry no annotations (3 of 20). The MCP server defaults to sandbox, with no official API SDK (5 of 15). 25 + 10 + 10 + 3 + 5 = 53."
        },
        "scores": {
          "a": 63,
          "b": 53
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Simpler Postage, Inc. (d/b/a EasyPost)",
        "b": "Envia Shipping",
        "name": "Vendor"
      },
      {
        "a": "https://api.easypost.com/v2",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "stdio",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Pay per use",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under the EasyPost Master Customer Agreement. The official client libraries on GitHub are MIT, with the Go library under ISC",
        "b": "none",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "10",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-29",
        "b": "2026-03-06",
        "name": "Last release"
      },
      {
        "a": "2026-08-25",
        "b": "no document linked",
        "name": "Terms last updated"
      },
      {
        "a": "2026-08-25",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "not read yet",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "not read yet",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "149 stars, 100k npm/wk",
        "b": "none",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "EasyPost scores 57.4 (C) on agent readiness against Envia's 36.5 (F), and leads in 6 of 7 scored categories. Envia leads on schema \u0026 documentation.",
        "question": "Which is better for AI agents, EasyPost or Envia?"
      },
      {
        "answer": "Both need an API key.",
        "question": "Do EasyPost and Envia need an API key?"
      },
      {
        "answer": "EasyPost has a hosted endpoint at https://api.easypost.com/v2. Envia runs on your own machine, with no hosted endpoint listed.",
        "question": "Can an agent call EasyPost and Envia without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 68 against 20",
          "Agent ergonomics, 63 against 53",
          "Security \u0026 auth, 47 against 35",
          "Maintenance \u0026 community, 85 against 10",
          "Transparency \u0026 trust, 71 against 16"
        ],
        "also": [
          "A hosted endpoint, with nothing to install"
        ],
        "goodFor": "An agent that quotes rates across carriers, buys a label, verifies an address, follows tracking by webhook and requests a refund from one merchant account, mainly on US carriers.",
        "slug": "easypost",
        "watchFor": "No OpenAPI spec was found in the docs or in the EasyPost GitHub organisation. The reference is prose and tables, with a Postman workspace"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 80 against 55"
        ],
        "also": [
          "Runs on your own machine"
        ],
        "goodFor": "Shops and platforms shipping in Mexico and Latin America that want rates and labels from many local carriers.",
        "slug": "envia",
        "watchFor": "No status page or rate limits found"
      }
    ],
    "history": {
      "easypost": [
        {
          "causes": [
            "time"
          ],
          "date": "2026-11-04",
          "delta": 3,
          "from": 54.4,
          "fromGrade": "C",
          "to": 57.4,
          "toGrade": "C"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.1,
          "from": 54.3,
          "fromGrade": "C",
          "to": 54.4,
          "toGrade": "C"
        }
      ],
      "envia": null
    },
    "job": {
      "capability": "shipping.rates",
      "name": "Shipping rates"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/atoship-vs-easypost.json",
        "title": "atoship vs EasyPost",
        "url": "https://www.anchorterminal.com/compare/atoship-vs-easypost"
      },
      {
        "json": "https://www.anchorterminal.com/compare/atoship-vs-envia.json",
        "title": "atoship vs Envia",
        "url": "https://www.anchorterminal.com/compare/atoship-vs-envia"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easypost-vs-easyship.json",
        "title": "EasyPost vs Easyship",
        "url": "https://www.anchorterminal.com/compare/easypost-vs-easyship"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easypost-vs-karrio.json",
        "title": "EasyPost vs Karrio",
        "url": "https://www.anchorterminal.com/compare/easypost-vs-karrio"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easypost-vs-sendcloud.json",
        "title": "EasyPost vs Sendcloud",
        "url": "https://www.anchorterminal.com/compare/easypost-vs-sendcloud"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easypost-vs-shipbob.json",
        "title": "EasyPost vs ShipBob",
        "url": "https://www.anchorterminal.com/compare/easypost-vs-shipbob"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easypost-vs-shippo.json",
        "title": "EasyPost vs Shippo",
        "url": "https://www.anchorterminal.com/compare/easypost-vs-shippo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easypost-vs-shippypro.json",
        "title": "EasyPost vs ShippyPro",
        "url": "https://www.anchorterminal.com/compare/easypost-vs-shippypro"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easypost-vs-shipstation.json",
        "title": "EasyPost vs ShipStation API",
        "url": "https://www.anchorterminal.com/compare/easypost-vs-shipstation"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easyship-vs-envia.json",
        "title": "Easyship vs Envia",
        "url": "https://www.anchorterminal.com/compare/easyship-vs-envia"
      },
      {
        "json": "https://www.anchorterminal.com/compare/envia-vs-karrio.json",
        "title": "Envia vs Karrio",
        "url": "https://www.anchorterminal.com/compare/envia-vs-karrio"
      },
      {
        "json": "https://www.anchorterminal.com/compare/envia-vs-sendcloud.json",
        "title": "Envia vs Sendcloud",
        "url": "https://www.anchorterminal.com/compare/envia-vs-sendcloud"
      },
      {
        "json": "https://www.anchorterminal.com/compare/envia-vs-shipbob.json",
        "title": "Envia vs ShipBob",
        "url": "https://www.anchorterminal.com/compare/envia-vs-shipbob"
      },
      {
        "json": "https://www.anchorterminal.com/compare/envia-vs-shippo.json",
        "title": "Envia vs Shippo",
        "url": "https://www.anchorterminal.com/compare/envia-vs-shippo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/envia-vs-shippypro.json",
        "title": "Envia vs ShippyPro",
        "url": "https://www.anchorterminal.com/compare/envia-vs-shippypro"
      },
      {
        "json": "https://www.anchorterminal.com/compare/envia-vs-shipstation.json",
        "title": "Envia vs ShipStation API",
        "url": "https://www.anchorterminal.com/compare/envia-vs-shipstation"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easypost-vs-ship24.json",
        "title": "EasyPost vs Ship24",
        "url": "https://www.anchorterminal.com/compare/easypost-vs-ship24"
      },
      {
        "json": "https://www.anchorterminal.com/compare/easypost-vs-trackingmore.json",
        "title": "EasyPost vs TrackingMore",
        "url": "https://www.anchorterminal.com/compare/easypost-vs-trackingmore"
      },
      {
        "json": "https://www.anchorterminal.com/compare/envia-vs-ship24.json",
        "title": "Envia vs Ship24",
        "url": "https://www.anchorterminal.com/compare/envia-vs-ship24"
      },
      {
        "json": "https://www.anchorterminal.com/compare/envia-vs-trackingmore.json",
        "title": "Envia vs TrackingMore",
        "url": "https://www.anchorterminal.com/compare/envia-vs-trackingmore"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 48,
        "easypost": 68,
        "edge": "easypost",
        "envia": 20,
        "key": "reliability",
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 25,
        "easypost": 55,
        "edge": "envia",
        "envia": 80,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 10,
        "easypost": 63,
        "edge": "easypost",
        "envia": 53,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 12,
        "easypost": 47,
        "edge": "easypost",
        "envia": 35,
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 2,
        "easypost": 22,
        "edge": "easypost",
        "envia": 20,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 75,
        "easypost": 85,
        "edge": "easypost",
        "envia": 10,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 55,
        "easypost": 71,
        "edge": "easypost",
        "envia": 16,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "EasyPost scores 57.4 (C) on agent readiness against Envia's 36.5 (F), and leads in 6 of 7 scored categories. Envia leads on schema \u0026 documentation. Both do shipping rates.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "easypost": "Docs written for agents (llms.txt, a Markdown copy of each page, a JSON page index), seven official SDKs updated in late October 2026 and free test keys make the REST API easy to start on. No OpenAPI spec or REST idempotency keys were found, and every key has full account access. The MCP server now buys labels, with retry-safe buys.",
      "envia": "Envia's shipping APIs are documented for agents, with llms.txt, OpenAPI definitions on every reference page, a free sandbox and a compact ten-tool MCP server that defaults to test mode. No status page, rate limits, public price list or readable terms were found, and the MCP package has had one release."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/easypost-vs-envia",
    "json": "https://www.anchorterminal.com/compare/easypost-vs-envia.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/easypost-vs-envia.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/easypost-vs-envia.min.md"
  },
  "markdown": "EasyPost scores 57.4 (C) on agent readiness against Envia's 36.5 (F), and leads in 6 of 7 scored categories. Envia leads on schema \u0026 documentation. Both do shipping rates.\n\n- EasyPost: grade C, 57.4/100, rank #794 of 1510. Markdown https://www.anchorterminal.com/tools/easypost.md · JSON https://www.anchorterminal.com/api/v1/tools/easypost.json\n- Envia: grade F, 36.5/100, rank #1384 of 1510. Markdown https://www.anchorterminal.com/tools/envia.md · JSON https://www.anchorterminal.com/api/v1/tools/envia.json\n- Best shipping and fulfilment APIs for AI agents: https://www.anchorterminal.com/best/shipping/index.md\n- All 66 shipping comparisons: https://www.anchorterminal.com/compare/shipping/index.md\n\n## Which one, for what\n\n### EasyPost (C)\n\nGood for: An agent that quotes rates across carriers, buys a label, verifies an address, follows tracking by webhook and requests a refund from one merchant account, mainly on US carriers.\n\nAhead on:\n- Reliability, 68 against 20\n- Agent ergonomics, 63 against 53\n- Security \u0026 auth, 47 against 35\n- Maintenance \u0026 community, 85 against 10\n- Transparency \u0026 trust, 71 against 16\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n\nWatch for: No OpenAPI spec was found in the docs or in the EasyPost GitHub organisation. The reference is prose and tables, with a Postman workspace\n\n### Envia (F)\n\nGood for: Shops and platforms shipping in Mexico and Latin America that want rates and labels from many local carriers.\n\nAhead on:\n- Schema \u0026 documentation, 80 against 55\n\nAlso in its favour:\n- Runs on your own machine\n\nWatch for: No status page or rate limits found\n\n\n## Why the edge\n\n### Maintenance \u0026 community: EasyPost +75\n\n- EasyPost (85): The releases page has an entry dated 29 October 2026, six days before this check, and the Node, Go, Java and C# libraries were tagged the same day (30). Eight dated release notes fall in the 90 days from 6 August (8, 15, 22 and 29 August, 25 and 28 September, 8 and 29 October), and every library had a release on 27 or 29 October (20). A closed service with public release notes, support@easypost.com, a help centre, ai@easypost.com for the MCP server and a published four-hour response target on the Base support tier. We didn't read GitHub issues or test response times (11 of 15). Seven official SDKs, each with a release on 27 or 29 October 2026: Node 9.1.0, Python 10.8.0, Go 5.12.0, Java 8.10.0, C# 7.12.0, PHP 8.9.0 and Ruby 7.8.0 (15). The Python library's CI lints and runs tests, per the 7 October check, and Node 9.0.0 moved to TypeScript and fetch (9 of 10, partly met). 30 + 20 + 11 + 15 + 9 = 85.\n- Envia (10): The latest dated change found is the docs changelog for March 2026 and @envia/envia-mcp 0.1.0 on 4 March 2026, more than 180 days ago; doc pages show later `updatedAt` stamps (28 October for the FAQ) that record no change (0). No dated entries in the 90 days from 8 August (0). Support through the dashboard and docs, with no public tracker; the MCP repository named on npm could not be cloned (5 of 15). The MCP package is official, with no API SDK and no registry entry (5 of 15). No public CI to read (0). 0 + 0 + 5 + 5 + 0 = 10.\n\n### Transparency \u0026 trust: EasyPost +55\n\n- EasyPost (71): The service is closed, under a Master Customer Agreement (version 6.1, effective 25 August 2026) and seven addenda in a legal centre that keeps every past version. The SDKs are MIT or ISC (15). The privacy policy (18 August 2025) gives no retention period. The agreement points to a Data Retention Policy in the help centre, which refused our reader, and it grants EasyPost a licence to use customer data to improve its services and develop new products during and after the term. A data processing addendum with EU and UK standard clauses is public (15 of 30). The agreement says EasyPost will use reasonable efforts to notify customers before API changes that aren't backwards compatible, with no notice period, and allows termination with a refund within 15 days if functionality is materially reduced. No deprecation policy with dates was found (6 of 20). Annex D of the addendum lists 12 subprocessors with purpose and country, all in the USA, and customers have 10 days to object to a new one (17 of 20). The legal centre was re-read on 4 November; the MCA is still version 6.1. 15 + 15 + 6 + 17 = 53.\n- Envia (16): Every terms URL tried answered 500 and the privacy policy is drawn by script, so no terms, entity or data-handling statement was read (0 of 30, 0 of 30). No deprecation policy or dated notices (0). No subprocessors or data locations found (0). 0 + 0 + 0 + 0 = 0, as unread rather than absent where the pages exist.\n\n### Reliability: EasyPost +48\n\n- EasyPost (68): Read with the hosted lines and scored on the REST API at api.easypost.com/v2, the surface an agent would use to rate, buy and track. www.easypoststatus.com on Statuspage lists 44 components on its page, re-read 4 November 2026 (20). Its history feed covers the whole 90 days from 6 August. Five incidents fall in that window, each partial. On 27 August the Core APIs degraded briefly during a deployment, resolved 14 minutes after it was identified. On 20 September USPS Ship requests failed most of the time for about five and a half hours (09:55 to 15:19 PDT) on a USPS-side fault, on 23 September a subset of USPS Ship buys failed, on 5 October UPS Mail Innovations returned elevated errors, and on 8 October some rating and tracking requests timed out for about 73 minutes at the hosting provider. Announced maintenance windows (14, 21 and 28 August, and the USPS windows in October and November) are maintenance, not incidents. Minor incidents only (20). The rate-limiting guide gives five requests a second on index endpoints and a 60-account cap on rating, but the load-based limiter on buying and rating has no published number (8 of 15, partly met). The guide asks for retry with growing backoff on 429 and gives a code sample that retries only GET and DELETE. No Retry-After header, no idempotency keys and no stated safe-retry rule for writes on the REST API (10). The Master Customer Agreement supplies the service as is and as available, and the support addendum sets response targets only (0). The v2 API is generally available (10). 20 + 20 + 8 + 10 + 0 + 10 = 68.\n- Envia (20): Graded as a hosted service on Envia's REST APIs, with the local MCP server noted. No status page is linked and status.envia.com did not connect (0). No readable incident history (5). No rate limits found in the docs index, FAQs, integration guide or production checklist (0). The production checklist asks for 5xx retry logic and webhook deduplication, with no 429 or idempotency guidance for label creation (5 of 15). No SLA found (0). Neither the APIs nor the MCP server is labelled beta (10). 0 + 5 + 0 + 5 + 0 + 10 = 20.\n\n### Schema \u0026 documentation: Envia +25\n\n- EasyPost (55): No OpenAPI or similar spec was found in the docs, llms.txt, the page index or the 56 public repositories of the EasyPost GitHub organisation. A Postman workspace is listed, which we didn't read (0 of 25). llms.txt, a Markdown copy of almost every page and doc-index.json with audience and usage notes for each page (10). Each object has a property table with a type and description, and the index says when each page applies. Endpoint pages are mostly examples, with little on when not to use a call (12 of 20). Types and allowed values are given in prose tables, such as the ten tracker statuses, with no schema to validate against, and the Markdown copies omit some parameter lists that the HTML pages render (8 of 15). Every endpoint has examples in cURL and seven SDK languages, plus an error object and 13 general error codes. The full error code list is on a part of the page the Markdown copy omits (13 of 15). The path carries v2 and the releases page has dated notes almost every week. No written versioning policy was found, and some calls sit under /beta (12 of 15). 0 + 10 + 12 + 8 + 13 + 12 = 55.\n- Envia (80): Each reference page's Markdown copy embeds an OpenAPI definition with sandbox and production servers (25). llms.txt and a Markdown copy of each page (10). Endpoint descriptions say what each is for and which call comes next in the workflow, and the rate tool warns that sandbox rates are simulated (15 of 20). The quote definition has 17 enums and required lists (11 of 15). Workflow examples and an error-formats guide named in the changelog, though its Markdown address answered 404 and the quote definition documents only 200 (9 of 15). A dated docs changelog by month, the latest March 2026 (10 of 15). 25 + 10 + 15 + 11 + 9 + 10 = 80.\n\n### Security \u0026 auth: EasyPost +12\n\n- EasyPost (47): API keys go in the HTTP Basic username over TLS 1.2. Keys can be created, disabled, enabled and deleted through the API or the dashboard, and the docs say a key allows full account access. Plain revocable keys, with no secret in a query string. The MCP server also takes a sign-in with an EasyPost account from the ChatGPT and Claude apps (20 of 30). Test keys buy no postage and child users hold separate keys. The REST API has no read-only or scoped key and no confirmation step before a purchase. Since 29 October 2026 the MCP server buys labels too (20 tools, 7 of them writes); `buy_shipment` refuses a price that differs from the one the user approved, and the guide asks users to keep client approval on for the three paid or destructive writes (8 of 20, held). Responses carry addresses and carrier tracking text. The MCP guide advises connecting only to trusted clients and servers, and no injection guidance was found (4 of 15). Events and their payloads can be retrieved and each shipment lists its fees, but no audit log of API calls or key use was found in the reviewed documentation (5 of 15). A Responsible Disclosure Policy with a safe-harbour commitment and the contact security-abuse@easypost.com, with no acknowledgement time, HMAC-signed webhooks, and a SOC 2 Type 2 report referred to in the data processing addendum. No security.txt (per the 7 October check) and no bug bounty were found, and OSV lists no advisory for EasyPost packages (10 of 20). 20 + 8 + 4 + 5 + 10 = 47.\n- Envia (35): Bearer tokens bound to one environment, several per account, revocable by deleting them, with no scopes (20). No read-only token; the MCP server's sandbox default keeps test calls from spending money (5 of 20). Responses carry carrier and address data rather than free text from strangers (10). No audit log found (0). No security page, certification, security.txt or disclosure policy found (0). 20 + 5 + 10 + 0 + 0 = 35.\n\n### Agent ergonomics: EasyPost +10\n\n- EasyPost (63): List calls take `page_size` up to 100 with a default of 20 on most endpoints. No field selection was found, and a shipment response nests addresses, parcel, rates and tracker (12 of 25). Cursor pagination by `before_id` and `after_id`, date ranges and a `has_more` flag, with support that varies by endpoint (16 of 20). Errors carry a machine-readable `code`, a message and per-field entries with an occasional suggestion. The `errors` array arrives as objects or as strings, so a client has to handle both (15 of 20). The REST API has no idempotency keys. Trackers are deduplicated by tracking code and carrier for three months, but `reference` on a shipment isn't unique and nothing guards a repeated buy. Since 29 October 2026 the MCP server's `buy_shipment` returns the label already bought when a timed-out buy is retried, and the guide says three write tools are marked destructive; the tool definitions weren't read (5 of 20, partly met, held). One-call buy creates and purchases in one request, addresses and parcels can be nested or reused by id, and official SDKs cover seven languages (15). 12 + 16 + 15 + 5 + 15 = 63.\n- Envia (53): Ten compact MCP tools (25). Rates take one carrier per request, and the Queries API filters carriers by country and shipment type; no paging or field selection was found (10 of 20). The FAQ maps common errors to fixes, but the changelog says the three APIs return different error formats that need a normalisation helper (10 of 20). No idempotency key for labels; an unscanned label can be cancelled for an automatic refund, and the MCP tools carry no annotations (3 of 20). The MCP server defaults to sandbox, with no official API SDK (5 of 15). 25 + 10 + 10 + 3 + 5 = 53.\n\n## Score by category\n\n| Category | Weight | EasyPost | Envia | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 68 | 20 | EasyPost +48 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 55 | 80 | Envia +25 |\n| Agent ergonomics | 13% (16.2 this run) | 63 | 53 | EasyPost +10 |\n| Security \u0026 auth | 14% (17.5 this run) | 47 | 35 | EasyPost +12 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 22 | 20 | EasyPost +2 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 85 | 10 | EasyPost +75 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 71 | 16 | EasyPost +55 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **57.4 · C** | **36.5 · F** | |\n\n## Facts side by side\n\n| Fact | EasyPost | Envia |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Simpler Postage, Inc. (d/b/a EasyPost) | Envia Shipping |\n| Hosted endpoint | `https://api.easypost.com/v2` | no (local only) |\n| Transports | HTTP | stdio |\n| Auth | API key | API key |\n| Pricing | Freemium | Pay per use |\n| x402 | no | no |\n| Licence | Proprietary service under the EasyPost Master Customer Agreement. The official client libraries on GitHub are MIT, with the Go library under ISC | none |\n| Tools exposed | none | 10 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-10-29 | 2026-03-06 |\n| Terms last updated | 2026-08-25 | no document linked |\n| Privacy policy last updated | 2026-08-25 | no date given |\n| Customer content may train models | not found in the text | not read yet |\n| Terms restrict automated access | not found in the text | not read yet |\n| Terms restrict benchmarking | yes | not read yet |\n| Terms or service can change without notice | not found in the text | not read yet |\n| Arbitration or class-action waiver | yes | not read yet |\n| Popularity | 149 stars, 100k npm/wk | none |\n\n## How the scores have moved\n\n### EasyPost\n\n- +3.0 on 4 November 2026: time\n- +0.1 on 27 October 2026: checklist\n\n### Envia\n\nNo score change since it was listed.\n\n## Verdicts\n\n**EasyPost.** Docs written for agents (llms.txt, a Markdown copy of each page, a JSON page index), seven official SDKs updated in late October 2026 and free test keys make the REST API easy to start on. No OpenAPI spec or REST idempotency keys were found, and every key has full account access. The MCP server now buys labels, with retry-safe buys.\n\n**Envia.** Envia's shipping APIs are documented for agents, with llms.txt, OpenAPI definitions on every reference page, a free sandbox and a compact ten-tool MCP server that defaults to test mode. No status page, rate limits, public price list or readable terms were found, and the MCP package has had one release.\n\n## Before you call either\n\n### EasyPost\n\n1. Use a test API key while building. It buys no postage and contacts no carrier, and test tracking codes simulate each tracking status\n2. Don't blind-retry `POST /shipments/:id/buy` after a timeout. Retrieve the shipment first and check for `postage_label`, since the REST API has no idempotency key\n3. Send the API key as the HTTP Basic username with an empty password on the REST API, and as a Bearer production key on the MCP server\n4. On the MCP server, pass the approved price to `buy_shipment` and keep client approval on for buy, insure and refund; it runs in production mode only\n5. Pass a scoped `carrier_accounts` list when rating. Only the first 60 accounts are rated and the call doesn't fail when more are enabled\n\n### Envia\n\n1. Leave `ENVIA_ENVIRONMENT` unset until the user confirms live shipping; the default is sandbox\n2. Ask the user before `envia_create_label` in production, since it spends the account balance\n3. Validate the postal code at geocodes.envia.com before quoting to avoid no-coverage errors\n4. Cancel an unwanted label before the carrier scans it to get the automatic refund\n5. Use a sandbox token with sandbox hosts and a production token with production hosts; they are not interchangeable\n\n## Questions\n\n### Which is better for AI agents, EasyPost or Envia?\n\nEasyPost scores 57.4 (C) on agent readiness against Envia's 36.5 (F), and leads in 6 of 7 scored categories. Envia leads on schema \u0026 documentation.\n\n### Do EasyPost and Envia need an API key?\n\nBoth need an API key.\n\n### Can an agent call EasyPost and Envia without installing anything?\n\nEasyPost has a hosted endpoint at https://api.easypost.com/v2. Envia runs on your own machine, with no hosted endpoint listed.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/easypost-vs-envia.json, and with the fewest tokens: https://www.anchorterminal.com/compare/easypost-vs-envia.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"easypost\", \"b\": \"envia\"}`. From a terminal: `anchor compare easypost envia`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/easypost.json and https://www.anchorterminal.com/api/v1/tools/envia.json\n\n## Other comparisons with EasyPost or Envia\n\n- [atoship vs EasyPost](https://www.anchorterminal.com/compare/atoship-vs-easypost.md)\n- [atoship vs Envia](https://www.anchorterminal.com/compare/atoship-vs-envia.md)\n- [EasyPost vs Easyship](https://www.anchorterminal.com/compare/easypost-vs-easyship.md)\n- [EasyPost vs Karrio](https://www.anchorterminal.com/compare/easypost-vs-karrio.md)\n- [EasyPost vs Sendcloud](https://www.anchorterminal.com/compare/easypost-vs-sendcloud.md)\n- [EasyPost vs ShipBob](https://www.anchorterminal.com/compare/easypost-vs-shipbob.md)\n- [EasyPost vs Shippo](https://www.anchorterminal.com/compare/easypost-vs-shippo.md)\n- [EasyPost vs ShippyPro](https://www.anchorterminal.com/compare/easypost-vs-shippypro.md)\n- [EasyPost vs ShipStation API](https://www.anchorterminal.com/compare/easypost-vs-shipstation.md)\n- [Easyship vs Envia](https://www.anchorterminal.com/compare/easyship-vs-envia.md)\n- [Envia vs Karrio](https://www.anchorterminal.com/compare/envia-vs-karrio.md)\n- [Envia vs Sendcloud](https://www.anchorterminal.com/compare/envia-vs-sendcloud.md)\n- [Envia vs ShipBob](https://www.anchorterminal.com/compare/envia-vs-shipbob.md)\n- [Envia vs Shippo](https://www.anchorterminal.com/compare/envia-vs-shippo.md)\n- [Envia vs ShippyPro](https://www.anchorterminal.com/compare/envia-vs-shippypro.md)\n- [Envia vs ShipStation API](https://www.anchorterminal.com/compare/envia-vs-shipstation.md)\n- [EasyPost vs Ship24](https://www.anchorterminal.com/compare/easypost-vs-ship24.md)\n- [EasyPost vs TrackingMore](https://www.anchorterminal.com/compare/easypost-vs-trackingmore.md)\n- [Envia vs Ship24](https://www.anchorterminal.com/compare/envia-vs-ship24.md)\n- [Envia vs TrackingMore](https://www.anchorterminal.com/compare/envia-vs-trackingmore.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": "EasyPost vs Envia",
        "url": ""
      }
    ],
    "description": "EasyPost scores 57.4 (C) to Envia's 36.5 (F) for shipping rates. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "EasyPost C 57.4",
      "Envia F 36.5",
      "scores"
    ],
    "h1": "EasyPost vs Envia",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/easypost-vs-envia",
    "published": "2026-10-01",
    "section": "tools",
    "title": "EasyPost vs Envia for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/easypost-vs-envia"
  },
  "tokens": {
    "markdown": 5000,
    "slim": 3380
  },
  "version": 1
}
