{
  "data": {
    "a": {
      "slug": "atoship",
      "name": "atoship",
      "vendor": "atoship LLC",
      "vendorUrl": "https://atoship.com",
      "kind": "http-api",
      "category": "shipping",
      "summary": "atoship is US shipping software for e-commerce sellers that sells discounted USPS, UPS, FedEx and DHL labels with no subscription. Agents use its REST API v1 or an MCP server, hosted with OAuth or local through npx.",
      "url": "https://www.anchorterminal.com/tools/atoship",
      "markdownUrl": "https://www.anchorterminal.com/tools/atoship.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/atoship.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/atoship.json",
      "dns": "atoship.grade.anchorterminal.com",
      "transports": [
        "streamable-http",
        "stdio"
      ],
      "remoteUrl": "https://atoship.com/api/mcp",
      "packages": [
        {
          "registry": "npm",
          "name": "@atoship/mcp"
        }
      ],
      "auth": "mixed",
      "authNotes": "REST and the local MCP server take API keys from the dashboard, `ak_live_` for production and `ak_test_` for sandbox, sent as Bearer tokens; the docs advise separate keys with limited scopes and periodic rotation. The hosted MCP server uses OAuth with PKCE (S256) and dynamic registration or a published public client ID, and its approval screen lists what the assistant may do, including buying and voiding labels.",
      "pricing": "usage",
      "pricingNotes": "No subscription or seat fee. Wallet-funded labels cost the discounted carrier rate shown live when quoting. Metered fees are $0.08 a label on your own carrier account, $0.03 a number for tracking labels bought elsewhere and $0.03 a call for the standalone Address Verification API. Sign-up is free with no card, and test keys create no real labels.",
      "priceSummary": "$0.08 / tx",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the MCP docs, API docs, llms.txt or pricing page (checked 2026-11-06). Labels are paid from a prefunded wallet.",
        "endpoints": []
      },
      "toolCount": 12,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://atoship.com/docs/mcp",
      "llmsTxt": "https://atoship.com/llms.txt",
      "capabilities": [
        "shipping.rates",
        "shipping.labels",
        "shipping.tracking",
        "shipping.address-validation",
        "shipping.returns"
      ],
      "tags": [
        "official",
        "hosted",
        "mcp",
        "remote-mcp",
        "oauth",
        "llms-txt",
        "usage",
        "prepaid",
        "no-card",
        "sandbox",
        "webhooks",
        "postman"
      ],
      "lastRelease": "2026-02-18",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 43,
        "grade": "E",
        "agentReady": false,
        "rank": 1247,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 9,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 53,
          "maintenance": 10,
          "payments": 40,
          "reliability": 30,
          "schema": 55,
          "security": 55,
          "transparency": 45
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "low",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "atoship gives agents twelve MCP tools and a REST API for US labels with published per-unit fees, free sign-up, test keys and a wallet the agent cannot overspend. No status page, rate-limit figures, OpenAPI spec or changelog was found, and the npm MCP package has not changed since February 2026.",
        "bestFor": "US sellers who want cheap USPS, UPS and FedEx labels bought by an agent from a capped wallet.",
        "strengths": [
          "Free account with no card, and `ak_test_` keys that create no real labels",
          "Per-unit fees published: $0.08 a label on your own carrier account, $0.03 a tracking number or address check",
          "Hosted MCP server with OAuth and PKCE, whose consent screen names label buying and voiding",
          "An agent can spend only what is already in the wallet",
          "Errors carry machine-readable codes and a `retryAfter` on 429"
        ],
        "weaknesses": [
          "No status page; status.atoship.com serves the home page",
          "Rate limits are not given in numbers, and no OpenAPI spec was found",
          "No changelog, and @atoship/mcp was last published on 18 February 2026",
          "Most listed SDKs are not published; only Go installs",
          "No security certification, subprocessor list or retention periods found"
        ],
        "agentNotes": [
          "Use an `ak_test_` key until the user confirms live labels; test mode creates no real labels",
          "Ask the user before `purchase_label`, since it spends the wallet balance",
          "Call `void_label` promptly for a mistaken label, and check the carrier's refund rules",
          "Branch on `error.code`, and on 429 wait `error.retryAfter` seconds",
          "Validate the address with `validate_address` before buying; the standalone endpoint costs $0.03 a call"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "low",
            "grade": "E",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 43
          }
        ],
        "editorialScores": {
          "ergonomics": 53,
          "maintenance": 10,
          "payments": 40,
          "reliability": 30,
          "schema": 55,
          "security": 55,
          "transparency": 25
        },
        "provenanceScore": 65,
        "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 @atoship/mcp",
        "claudeCode": "claude mcp add --transport http atoship https://atoship.com/api/mcp",
        "config": {
          "mcpServers": {
            "atoship": {
              "url": "https://atoship.com/api/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/shipping.rates",
        "tool": "https://letme.dev/atoship"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Label on your own carrier account",
          "unit": "tx",
          "usd": 0.08,
          "note": "Per label; the carrier bills postage"
        },
        {
          "item": "External tracking number",
          "unit": "tx",
          "usd": 0.03,
          "note": "Only for labels bought elsewhere"
        },
        {
          "item": "Address Verification API call",
          "unit": "call",
          "usd": 0.03,
          "note": "Standalone endpoint only; checks inside rate quotes are free"
        }
      ],
      "provenance": {
        "legalEntity": "atoship LLC",
        "domain": "atoship.com",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://atoship.com/terms",
        "privacy": "https://atoship.com/privacy",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "valid",
        "checked": "2026-11-06",
        "notes": [
          "atoship.com/robots.txt disallows /api/, /dashboard/, /admin/, /_next/ and /static/ for all agents, so the MCP and REST endpoints under /api/ were not requested.",
          "Terms last updated 20 August 2026 and privacy policy 7 May 2026. The terms forbid decompiling or reverse engineering the platform; no clause on reading public pages was found.",
          "security.txt names security@atoship.com, points its policy to the terms and expires 31 December 2027.",
          "status.atoship.com answers with the marketing home page and /docs/status rendered no status content, so no status page is recorded."
        ],
        "score": 65
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/atoship.json",
      "live": {
        "slug": "atoship",
        "probe": {
          "target": "https://atoship.com/api/mcp",
          "method": "get",
          "lastAt": "2026-11-07T18:20:11.359764372Z",
          "lastOk": true,
          "lastStatus": 405,
          "lastMs": 404,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 366,
          "p95ms24h": 457,
          "samples24h": 200,
          "samples30d": 200,
          "days": [
            {
              "date": "2026-11-06",
              "probes": 13,
              "ok": 13
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "versions": [
          {
            "registry": "npm",
            "name": "@atoship/mcp",
            "version": "1.0.2",
            "seenAt": "2026-11-06T23:07:48.297476849Z"
          }
        ],
        "npmWeekly": 6,
        "securityTxt": {
          "url": "https://atoship.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2027-12-31T23:59:59.000Z",
          "checkedAt": "2026-11-07T16:01:05.350843408Z"
        },
        "llmsTxt": {
          "url": "https://atoship.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:31:37.315201154Z"
        },
        "pages": [
          {
            "url": "https://atoship.com/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T13:59:42.701099832Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "a06a9e463f87"
          },
          {
            "url": "https://atoship.com/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T13:59:44.734681167Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b9b07e284da6"
          }
        ],
        "mcpTools": {
          "url": "https://atoship.com/api/mcp",
          "checkedAt": "2026-11-07T01:42:32.687477466Z",
          "status": "auth",
          "note": "asks for credentials before listing its tools",
          "changedAt": "2026-11-07T01:42:32.687477466Z"
        },
        "updatedAt": "2026-11-07T18:20:11.359764372Z"
      }
    },
    "answer": "ShipStation API scores 51 (D) on agent readiness against atoship's 43 (E), and leads in 5 of 7 scored categories. atoship leads on security \u0026 auth.",
    "b": {
      "slug": "shipstation",
      "name": "ShipStation API",
      "vendor": "Auctane LLC d/b/a ShipStation",
      "vendorUrl": "https://www.shipstation.com",
      "kind": "http-api",
      "category": "shipping",
      "summary": "Multi-carrier shipping API from ShipStation, an Auctane brand. API v2 at api.shipstation.com/v2 quotes rates, buys and voids labels, validates addresses, tracks parcels and creates return labels, with batches, manifests, pickups and inventory.",
      "url": "https://www.anchorterminal.com/tools/shipstation",
      "markdownUrl": "https://www.anchorterminal.com/tools/shipstation.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/shipstation.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/shipstation.json",
      "dns": "shipstation.grade.anchorterminal.com",
      "repo": "https://github.com/ShipEngine/shipengine-openapi",
      "license": "Proprietary service under ShipStation's terms of service. The v2 OpenAPI file is marked MIT and the SDKs on GitHub are Apache 2.0",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.shipstation.com/v2",
      "packages": [
        {
          "registry": "npm",
          "name": "shipengine"
        },
        {
          "registry": "pypi",
          "name": "shipengine"
        }
      ],
      "auth": "api-key",
      "authNotes": "Self-serve API key sent in an `API-Key` header, with no partner or sales approval. Two routes lead to a v2 key. A ShipStation API account (formerly ShipEngine) gets production keys and `TEST_` sandbox keys from api-portal.shipstation.com on every plan, Free included. A ShipStation platform account needs the Standard or Premium plan and generates one v2 key at a time in API Settings, shown once. The docs say the key gives full access to the account. No OAuth, scopes or read-only keys were found.",
      "pricing": "freemium",
      "pricingNotes": "ShipStation API (formerly ShipEngine) has a Free plan at $0 with a sandbox and, by the pricing page, no card. Advanced is $75 a month for 1,000 labels ($0.075 a label over), $325 for 5,000 ($0.065) or $600 for 10,000 ($0.060), and Enterprise is by quote from 25,000 shipments a month. On the ShipStation platform the API comes with Standard (from $29.99 a month for 50 shipments) and Premium (from $349.99), after a 30-day trial with no card, and has no sandbox. Postage is charged separately at carrier rates (checked 2026-10-07).",
      "priceSummary": "$75 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the v2 docs, the OpenAPI spec or the pricing pages (checked 2026-10-07).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 6835,
        "pypiWeekly": null,
        "asOf": "2026-10-07"
      },
      "docsUrl": "https://docs.shipstation.com/api-overview",
      "llmsTxt": "https://docs.shipstation.com/llms.txt",
      "openapi": "https://docs.shipstation.com/_bundle/apis/@shipstation-v2/openapi.yaml",
      "capabilities": [
        "shipping.rates",
        "shipping.labels",
        "shipping.tracking",
        "shipping.address-validation",
        "shipping.returns"
      ],
      "tags": [
        "hosted",
        "freemium",
        "free-tier",
        "sandbox",
        "api-key",
        "openapi",
        "llms-txt",
        "webhooks",
        "python",
        "javascript",
        "dotnet",
        "status-page"
      ],
      "lastRelease": "2026-10-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 51,
        "grade": "D",
        "agentReady": false,
        "rank": 1038,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 7,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 64,
          "maintenance": 33,
          "payments": 40,
          "reliability": 70,
          "schema": 83,
          "security": 32,
          "transparency": 64
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-04"
        },
        "negative": -6,
        "negativeNotes": [
          "2026-10-27. A status notice posted on 27 October says that from 23 October GlobalPost and GAP DDU services can no longer be used for shipments to Germany and that labels created with them return an error. The change came from German customs, but requests that worked before 23 October failed with notice posted four days after it took effect (-3) (https://status.shipstation.com/incidents/72gds1yvrc52)",
          "2026-10-27. Commits 796387c and 2f2808e in the JavaScript SDK (`shipengine` on npm) fix tracking calls that interpolated the carrier code, tracking number and label ID into the request unencoded, so `\u0026`, `=` or `#` in a value could add or cut query parameters. The fixes are merged but in no release, and no advisory was found (-3 until released) (https://github.com/ShipEngine/shipengine-js)"
        ],
        "verdict": "A public OpenAPI 3.1 contract with 173 operations, Markdown docs for agents and a free ShipStation API plan with a sandbox make a first rate quote or test label reachable without a contract. One API key carries full account access, with no scopes or idempotency keys on label purchases, and API release notes carry month-only dates.",
        "bestFor": "An agent working inside a merchant's existing ShipStation account (orders, batches, inventory, labels), or a developer who wants a free sandbox through the ShipStation API plans.",
        "strengths": [
          "Public OpenAPI 3.1 spec for v2 with 173 operations and 372 schemas, plus llms.txt and a Markdown copy of every docs page",
          "ShipStation API Free plan at $0 with no card stated, and a sandbox on every ShipStation API plan through `TEST_` keys",
          "200 requests a minute by default, with `Retry-After` on 429 responses",
          "Errors carry `error_source`, `error_type`, `error_code` and a `request_id`, and separate carrier faults from ShipStation's own",
          "A Statuspage history in which every incident from 6 August to 4 November 2026 was labelled minor or touched one or two carriers"
        ],
        "weaknesses": [
          "One API key with full account access. No scopes, read-only keys or approval step before a label is bought",
          "No idempotency key on label purchase, so a retry after a timeout can buy a second label",
          "Release notes are dated by month only, and no SDK has a release since 27 May 2026",
          "The official SDKs call api.shipengine.com/v1, and JavaScript fixes for unencoded tracking parameters from 27 October are unreleased",
          "No security.txt, certification, disclosure policy, DPA or named subprocessor list found on the pages read on 7 October"
        ],
        "agentNotes": [
          "Send the key in an `API-Key` header to https://api.shipstation.com/v2. A key that starts `TEST_` runs in the sandbox on the same host",
          "Call GET /v2/carriers first. Rate and label calls need `carrier_ids` or a `carrier_id` and a `service_code` from that account",
          "Don't blindly retry POST /v2/labels after a timeout. List labels first, then void a duplicate with PUT /v2/labels/{label_id}/void",
          "Check the `errors` array on 2XX responses too, and read `error_source` to tell a carrier fault from a ShipStation one",
          "On a platform (Standard or Premium) key every label is real and charged. Ask the owner before buying, and void test labels at once"
        ],
        "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": 51
          }
        ],
        "editorialScores": {
          "ergonomics": 64,
          "maintenance": 33,
          "payments": 40,
          "reliability": 70,
          "schema": 83,
          "security": 32,
          "transparency": 42
        },
        "provenanceScore": 86,
        "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": {
        "http": "curl -iX GET https://api.shipstation.com/v2/carriers \\\n-H 'API-Key: __YOUR_API_KEY_HERE__'",
        "claudeCode": "claude mcp add --transport http shipstation-api https://docs.shipstation.com/mcp"
      },
      "letme": {
        "capability": "https://letme.dev/shipping.rates",
        "tool": "https://letme.dev/shipstation"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "ShipStation API Free",
          "unit": "month",
          "usd": 0,
          "note": "sandbox included, postage extra"
        },
        {
          "item": "ShipStation API Advanced, 1,000 labels",
          "unit": "month",
          "usd": 75,
          "note": "$325 for 5,000 labels, $600 for 10,000"
        },
        {
          "item": "Label over the Advanced 1,000 allowance",
          "unit": "tx",
          "usd": 0.075,
          "note": "$0.065 on the 5,000 tier, $0.060 on the 10,000 tier"
        },
        {
          "item": "ShipStation platform Standard, 50 shipments",
          "unit": "month",
          "usd": 29.99,
          "note": "lowest platform plan with API access"
        }
      ],
      "provenance": {
        "legalEntity": "Auctane LLC d/b/a ShipStation",
        "domain": "shipstation.com",
        "domainRegistered": "2005-04-14",
        "endpointOnVendorDomain": true,
        "terms": "https://www.shipstation.com/terms-of-service/",
        "privacy": "https://www.shipstationglobal.com/legal/privacy-policy/",
        "statusPage": "https://status.shipstation.com",
        "changelog": "https://docs.shipstation.com/apis/release-notes",
        "securityTxt": "none",
        "checked": "2026-10-07",
        "notes": [
          "The terms of service, effective 16 July 2026, name Auctane LLC d/b/a ShipStation and its affiliates, with Auctane, Inc. as parent.",
          "www.shipstation.com/privacy-policy/ redirects through auctane.com to www.shipstationglobal.com/legal/privacy-policy/, Auctane, Inc.'s policy for ShipStation, ShipEngine, Stamps.com and its other brands, effective 18 March 2026.",
          "/.well-known/security.txt returns 404 on www.shipstation.com, api.shipstation.com, docs.shipstation.com and www.shipstationglobal.com.",
          "The v2 API answers at api.shipstation.com. Webhook signing keys and the older v1 endpoints sit on api.shipengine.com, and the docs link a dashboard at dashboard.shipengine.com.",
          "RDAP for shipstation.com gives a registration date of 2005-04-14."
        ],
        "score": 86
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/shipstation.json",
      "live": {
        "slug": "shipstation",
        "probe": {
          "target": "https://api.shipstation.com/v2",
          "method": "get",
          "lastAt": "2026-11-07T18:20:54.247550243Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 478,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 366,
          "p95ms24h": 481,
          "samples24h": 239,
          "samples30d": 7463,
          "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": 250,
              "ok": 250
            },
            {
              "date": "2026-10-29",
              "probes": 249,
              "ok": 249
            },
            {
              "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.shipstation.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-07T18:22:00.924941084Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "shipengine",
            "version": "1.0.7",
            "seenAt": "2026-11-07T00:05:15.955061494Z"
          },
          {
            "registry": "pypi",
            "name": "shipengine",
            "version": "2.1.1",
            "released": "2026-05-06",
            "seenAt": "2026-11-07T00:05:16.754957301Z"
          }
        ],
        "githubStars": 29,
        "npmWeekly": 10199,
        "pypiWeekly": 3731,
        "securityTxt": {
          "url": "https://shipstation.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:00:33.155091512Z"
        },
        "llmsTxt": {
          "url": "https://docs.shipstation.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:33:54.817166778Z"
        },
        "domain": {
          "domain": "shipstation.com",
          "registered": "2005-04-14",
          "source": "https://rdap.verisign.com/com/v1/domain/shipstation.com",
          "checkedAt": "2026-11-01T14:24:35.892205169Z"
        },
        "pages": [
          {
            "url": "https://docs.shipstation.com/apis/release-notes",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:07:56.360848869Z",
            "changedAt": "2026-11-06T13:30:16.233233024Z",
            "fingerprint": "0b48047cda4e"
          },
          {
            "url": "https://status.shipstation.com/incidents/72gds1yvrc52",
            "kind": "deprecations",
            "status": 200,
            "checkedAt": "2026-11-07T14:20:54.784523035Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "205c26ccca63"
          },
          {
            "url": "https://www.shipstationglobal.com/legal/privacy-policy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:34:29.079653473Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6fef845000ca"
          },
          {
            "url": "https://www.shipstation.com/terms-of-service/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:34:26.231730101Z",
            "changedAt": "2026-11-07T14:34:26.231730101Z",
            "fingerprint": "bffb70807a62"
          }
        ],
        "mcpTools": {
          "url": "https://docs.shipstation.com/mcp",
          "checkedAt": "2026-11-07T01:47:54.877871222Z",
          "status": "ok",
          "protocol": "2025-06-18",
          "tools": [
            {
              "name": "list-apis",
              "description": "Lists available APIs with their context and purpose",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "filter": {
                    "description": "API name (or part of it)",
                    "minLength": 1,
                    "nullable": true,
                    "type": "string"
                  },
                  "limit": {
                    "default": 300,
                    "description": "Number of APIs per page. Default is 300",
                    "minimum": 1,
                    "nullable": true,
                    "type": "number"
                  },
                  "page": {
                    "default": 1,
                    "description": "Page number",
                    "minimum": 1,
                    "nullable": true,
                    "type": "number"
                  }
                },
                "required": [],
                "type": "object"
              }
            },
            {
              "name": "get-endpoints",
              "description": "Get all endpoints for a specific API",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "description": "API name",
                    "minLength": 1,
                    "type": "string"
                  },
                  "version": {
                    "description": "API version (required when multiple APIs share the same name but differ by version)",
                    "nullable": true,
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object"
              }
            },
            {
              "name": "get-endpoint-info",
              "description": "Get comprehensive information about specific endpoint including parameters, security, and examples",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "method": {
                    "description": "HTTP method (GET, POST, PUT, DELETE, etc.)",
                    "enum": [
                      "GET",
                      "POST",
                      "PUT",
                      "DELETE",
                      "PATCH",
                      "OPTIONS",
                      "HEAD",
                      "TRACE",
                      "get",
                      "post",
                      "put",
                      "delete",
                      "patch",
                      "options",
                      "head",
                      "trace"
                    ],
                    "minLength": 1,
                    "type": "string"
                  },
                  "name": {
                    "description": "API name",
                    "minLength": 1,
                    "type": "string"
                  },
                  "path": {
                    "description": "Endpoint path (e.g. /api/v1/users)",
                    "minLength": 1,
                    "type": "string"
                  },
                  "version": {
                    "description": "API version (required when multiple APIs share the same name but differ by version)",
                    "nullable": true,
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "path",
                  "method"
                ],
                "type": "object"
              }
            },
            {
              "name": "get-security-schemes",
              "description": "Get the security schemes for a specific API",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "description": "API name",
                    "minLength": 1,
                    "type": "string"
                  },
                  "version": {
                    "description": "API version (required when multiple APIs share the same name but differ by version)",
                    "nullable": true,
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object"
              }
            },
            {
              "name": "get-full-api-description",
              "description": "Get the complete OpenAPI description",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "name": {
                    "description": "API name",
                    "minLength": 1,
                    "type": "string"
                  },
                  "version": {
                    "description": "API version (required when multiple APIs share the same name but differ by version)",
                    "nullable": true,
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object"
              }
            },
            {
              "name": "search",
              "description": "Search across the documentation to fetch relevant content for a given query",
              "inputSchema": {
                "additionalProperties": false,
                "properties": {
                  "query": {
                    "description": "Search query. Should be a single word or that phrase that is presented in a documentation.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            }
          ],
          "schemaTokens": 700,
          "changedAt": "2026-11-07T01:47:54.877871222Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 700,
            "counts": {
              "error": 0,
              "note": 1,
              "warn": 6
            },
            "findings": [
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "get-endpoint-info",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "get-endpoints",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "get-full-api-description",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "get-security-schemes",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "list-apis",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "search",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC24",
                "severity": "note",
                "message": "6 of 6 tools have no outputSchema",
                "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
              }
            ]
          }
        },
        "github": {
          "repo": "shipengine/shipengine-openapi",
          "checkedAt": "2026-11-02T09:25:15.871990048Z",
          "stars": 29,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-06-11T19:38:15Z",
          "openIssues": 10,
          "openPRs": 4,
          "issuesOpened90d": 0,
          "issuesClosed90d": 0,
          "prsMerged90d": 0,
          "ci": {
            "branch": "master",
            "runs": 50,
            "success": 9,
            "failure": 41,
            "other": 0,
            "latest": "failure",
            "latestAt": "2026-06-11T19:38:36Z"
          },
          "replies": {
            "sampled": 12,
            "unanswered": 10,
            "medianDays": 8.2
          }
        },
        "updatedAt": "2026-11-07T18:22:00.924941084Z"
      }
    },
    "edges": [
      {
        "by": 40,
        "category": "reliability",
        "leads": "shipstation",
        "name": "Reliability",
        "reasons": {
          "a": "Graded as a hosted service on the MCP server at atoship.com/api/mcp and REST API v1. status.atoship.com serves the marketing home page and the docs' API Status page rendered no status content, so no status page is counted (0). No readable incident history (5). 429 and a `RATE_LIMIT_EXCEEDED` code are documented, without numbers (5 of 15). A 429 carries `error.retryAfter` and Retry-After; no idempotency key for label purchases was found (10 of 15). No SLA (0). Not labelled beta (10). 0 + 5 + 5 + 10 + 0 + 10 = 30.",
          "b": "Graded on ShipStation API v2 at api.shipstation.com/v2, with the hosted lines. Statuspage at status.shipstation.com with components for Companion API V1 and V2, carriers and marketplaces (20). The history pages and feed, read on 4 November, list 13 incidents and one scheduled maintenance between 6 August and 4 November. The four labelled major each touch one or two carriers (DPD Local and DX on 11 September, Evri on 24 and 25 September, DPD on 20 October, Evri shipments to the EU on 29 and 30 October), and the rest are minor or notices, so all are partial and read as minor (20). 200 requests a minute by default, per the 7 October check, not re-read on 4 November (15). 429 responses carry `Retry-After` and the docs ask for retries handled globally, with no idempotency key or safe-retry guidance for label purchases, per the 7 October check, not re-read on 4 November (10). No SLA found (0). The getting-started page says v2 \"is currently in an early release stage\" while calling it tested and stable, per the 7 October check, not re-read on 4 November (5)."
        },
        "scores": {
          "a": 30,
          "b": 70
        }
      },
      {
        "by": 28,
        "category": "schema",
        "leads": "shipstation",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "No OpenAPI found (/openapi.json is 404); a Postman collection v2.1 of 15 endpoints is the only machine-readable contract, and the hosted MCP tools' schemas were not read because /api/ is disallowed (15 of 25). llms.txt (10). The MCP page gives each tool a one-line description and an example prompt (8 of 20). Input typing could not be checked beyond the docs' object pages (5 of 15). The errors page documents status codes, `error.code` values and `retryAfter`, with examples (12 of 15). v1 API, no changelog found (5 of 15). 15 + 10 + 8 + 5 + 12 + 5 = 55.",
          "b": "OpenAPI 3.1 for v2 at docs.shipstation.com/_bundle/apis/@shipstation-v2/openapi.yaml, 173 operations on 123 paths and 372 schemas (25). llms.txt with 480 lines of links and a Markdown copy of each docs page (10). Guides explain when to use rates against estimates and webhooks against polling. Operation descriptions in the spec are one line each (13). 152 enums, required fields and read-only markers, though carrier and service codes are free strings that depend on the account (12). 1,648 example entries and enumerated `error_code` and `error_type` values. The spec documents 400, 404 and 500 but no 401 or 429 response (11). Release notes are dated by month and the spec version has stayed 2.0.0 through every addition (12). Docs, pricing and legal pages per the 7 October check, not re-read on 4 November."
        },
        "scores": {
          "a": 55,
          "b": 83
        }
      },
      {
        "by": 23,
        "category": "security",
        "leads": "atoship",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "Live and test API keys sent as Bearer tokens, with the docs advising separate keys with limited scopes and rotation, and OAuth with PKCE for the hosted MCP server (25 of 30). Test keys create no real labels, the consent screen names label buying and voiding, and the docs say the agent can spend only funds already in the wallet, with no per-call confirmation (12 of 20). Responses carry addresses and carrier tracking data rather than free text from strangers (10). No audit log found (0). security.txt valid to December 2027 with a security contact; no certification, bounty or disclosure policy beyond the terms (8 of 20). 25 + 12 + 10 + 0 + 8 = 55.",
          "b": "One secret in an `API-Key` header. The docs say the key gives full access. Platform accounts hold one active v2 key that can be regenerated, and ShipStation API accounts have separate `TEST_` sandbox keys (17). No scopes, read-only keys or confirmation before a label purchase. The sandbox key is the only lower-risk mode (5). Responses carry order text, addresses and carrier messages written by others, with no injection guidance (3). A `request_id` on every response. No per-key audit log found in the docs (3). TLS 1.2 or higher required, HSTS on the API host and RSA-SHA256 signed webhooks with a JWKS. security.txt returns 404 on three hosts, and no certification, bug bounty or disclosure policy was found on the pages we read (4). Docs, pricing and legal pages per the 7 October check, not re-read on 4 November."
        },
        "scores": {
          "a": 55,
          "b": 32
        }
      },
      {
        "by": 23,
        "category": "maintenance",
        "leads": "shipstation",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "No changelog or release notes found. The newest dated release is @atoship/mcp 1.0.2 on 18 February 2026, more than 180 days ago (0). No dated releases in the 90 days from 8 August (0). Support by email, with no public tracker; the repository named on npm is not public (5 of 15). The MCP package is official, and only the Go SDK of eight listed is installable (5 of 15). No public CI (0). 0 + 0 + 5 + 5 + 0 = 10.",
          "b": "Release notes on docs.shipstation.com are dated by month only, with entries for August, September and October 2026 on the 7 October reading, so they don't set recency. The newest dated change from ShipStation's own sources is the shipengine-openapi repository commit of 11 June 2026, after .NET SDK v3.2.1 on 27 May and Python 2.1.1 on 6 May (146 days, 10). No dated release in the 90 days from 6 August. Month-dated entries counted at half come to fewer than three, and commits on 27 October in the JavaScript and .NET SDK repositories are in no release (0). Closed service with monthly release notes, an API support address (apisupport@shipstation.com) and a community forum. We couldn't measure reply times (10). Official SDKs exist in six languages, and all call the v1 ShipEngine host. JavaScript's newest tag is v1.0.7 of 31 January 2024 (8). SDK repositories have CI workflows, and the JavaScript SDK's CI was rebuilt on 27 October. The OpenAPI repository was last changed on 11 June 2026 (5)."
        },
        "scores": {
          "a": 10,
          "b": 33
        }
      },
      {
        "by": 19,
        "category": "transparency",
        "leads": "shipstation",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "Closed service under terms naming atoship LLC of California (15 of 30). The privacy policy (7 May 2026) keeps data as long as necessary with no periods and names no processors (10 of 30). No deprecation policy or dated notices found (0). No subprocessor list or data locations found (0). 15 + 10 + 0 + 0 = 25.",
          "b": "Closed service under terms of service effective 16 July 2026 that name Auctane LLC d/b/a ShipStation. The v2 OpenAPI file is marked MIT and the SDKs are Apache 2.0 (16). The privacy policy, effective 18 March 2026, is Auctane, Inc.'s for all its brands. It keeps data \"as long as necessary\" with no periods, and says third parties may not train AI models on personal information. No public DPA was found (12). The legacy V1 API is described as deprecated with removal \"in the future\" and no date, and the terms let ShipStation withdraw API access at its discretion (6). US persons' data stays in the United States and EEA and UK data may move there under the Data Privacy Framework. Service providers are named by type, with no subprocessor list (8). Docs, pricing and legal pages per the 7 October check, not re-read on 4 November."
        },
        "scores": {
          "a": 45,
          "b": 64
        }
      },
      {
        "by": 11,
        "category": "ergonomics",
        "leads": "shipstation",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "12 MCP tools (15, for 11 to 30). List tools for orders and labels, with paging not documented in the pages read (8 of 20). Machine-readable error codes with a retry delay (18 of 20). The npm package's tools carry no readOnlyHint or destructiveHint, and no idempotency key was found; `void_label` undoes a mistaken purchase (5 of 20). Only the Go SDK installs, the hosted server is one URL, and test keys give a safe default (7 of 15). 15 + 8 + 18 + 5 + 7 = 53.",
          "b": "No MCP server that performs shipping operations. The MCP server at docs.shipstation.com/mcp reads documentation only. List endpoints take `page_size`. No field selection was found (12). `page`, `page_size`, `sort_by`, `sort_dir` and filters by status, tag, dates, store and external id on list calls (20). Errors carry `error_source`, `error_type`, `error_code`, `message`, field names and a `request_id` (18). No idempotency keys. `external_shipment_id` is unique per shipment, labels can be voided and `test_label` exists, which we counted as partial safe-retry support (6). Official SDKs in six languages call api.shipengine.com/v1, not v2, and a label needs a `carrier_id` and `service_code` looked up first (8). Docs, pricing and legal pages per the 7 October check, not re-read on 4 November."
        },
        "scores": {
          "a": 53,
          "b": 64
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "atoship LLC",
        "b": "Auctane LLC d/b/a ShipStation",
        "name": "Vendor"
      },
      {
        "a": "https://atoship.com/api/mcp",
        "b": "https://api.shipstation.com/v2",
        "name": "Hosted endpoint"
      },
      {
        "a": "Streamable HTTP, stdio",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Pay per use",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "none",
        "b": "Proprietary service under ShipStation's terms of service. The v2 OpenAPI file is marked MIT and the SDKs on GitHub are Apache 2.0",
        "name": "Licence"
      },
      {
        "a": "12",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-02-18",
        "b": "2026-10-01",
        "name": "Last release"
      },
      {
        "a": "2026-08-20",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-05-07",
        "b": "2026-03-18",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "none",
        "b": "6.8k npm/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "ShipStation API scores 51 (D) on agent readiness against atoship's 43 (E), and leads in 5 of 7 scored categories. atoship leads on security \u0026 auth.",
        "question": "Which is better for AI agents, atoship or ShipStation API?"
      },
      {
        "answer": "atoship takes an API key or an OAuth sign-in. ShipStation API needs an API key.",
        "question": "Do atoship and ShipStation API need an API key?"
      },
      {
        "answer": "Yes. atoship has a hosted endpoint at https://atoship.com/api/mcp and ShipStation API at https://api.shipstation.com/v2.",
        "question": "Can an agent call atoship and ShipStation API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Security \u0026 auth, 55 against 32"
        ],
        "also": [
          "Runs on your own machine",
          "Free to start without a card",
          "No incidents deducted, where ShipStation API loses 6 points for them"
        ],
        "goodFor": "US sellers who want cheap USPS, UPS and FedEx labels bought by an agent from a capped wallet.",
        "slug": "atoship",
        "watchFor": "No status page; status.atoship.com serves the home page"
      },
      {
        "aheadOn": [
          "Reliability, 70 against 30",
          "Schema \u0026 documentation, 83 against 55",
          "Agent ergonomics, 64 against 53",
          "Maintenance \u0026 community, 33 against 10",
          "Transparency \u0026 trust, 64 against 45"
        ],
        "also": null,
        "goodFor": "An agent working inside a merchant's existing ShipStation account (orders, batches, inventory, labels), or a developer who wants a free sandbox through the ShipStation API plans.",
        "slug": "shipstation",
        "watchFor": "One API key with full account access. No scopes, read-only keys or approval step before a label is bought"
      }
    ],
    "history": {
      "atoship": null,
      "shipstation": [
        {
          "causes": [
            "correction",
            "event"
          ],
          "date": "2026-11-04",
          "delta": -8.3,
          "from": 59.3,
          "fromGrade": "C",
          "to": 51,
          "toGrade": "D"
        }
      ]
    },
    "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-easyship.json",
        "title": "atoship vs Easyship",
        "url": "https://www.anchorterminal.com/compare/atoship-vs-easyship"
      },
      {
        "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/atoship-vs-karrio.json",
        "title": "atoship vs Karrio",
        "url": "https://www.anchorterminal.com/compare/atoship-vs-karrio"
      },
      {
        "json": "https://www.anchorterminal.com/compare/atoship-vs-sendcloud.json",
        "title": "atoship vs Sendcloud",
        "url": "https://www.anchorterminal.com/compare/atoship-vs-sendcloud"
      },
      {
        "json": "https://www.anchorterminal.com/compare/atoship-vs-shipbob.json",
        "title": "atoship vs ShipBob",
        "url": "https://www.anchorterminal.com/compare/atoship-vs-shipbob"
      },
      {
        "json": "https://www.anchorterminal.com/compare/atoship-vs-shippo.json",
        "title": "atoship vs Shippo",
        "url": "https://www.anchorterminal.com/compare/atoship-vs-shippo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/atoship-vs-shippypro.json",
        "title": "atoship vs ShippyPro",
        "url": "https://www.anchorterminal.com/compare/atoship-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-shipstation.json",
        "title": "Easyship vs ShipStation API",
        "url": "https://www.anchorterminal.com/compare/easyship-vs-shipstation"
      },
      {
        "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/karrio-vs-shipstation.json",
        "title": "Karrio vs ShipStation API",
        "url": "https://www.anchorterminal.com/compare/karrio-vs-shipstation"
      },
      {
        "json": "https://www.anchorterminal.com/compare/sendcloud-vs-shipstation.json",
        "title": "Sendcloud vs ShipStation API",
        "url": "https://www.anchorterminal.com/compare/sendcloud-vs-shipstation"
      },
      {
        "json": "https://www.anchorterminal.com/compare/shipbob-vs-shipstation.json",
        "title": "ShipBob vs ShipStation API",
        "url": "https://www.anchorterminal.com/compare/shipbob-vs-shipstation"
      },
      {
        "json": "https://www.anchorterminal.com/compare/shippo-vs-shipstation.json",
        "title": "Shippo vs ShipStation API",
        "url": "https://www.anchorterminal.com/compare/shippo-vs-shipstation"
      },
      {
        "json": "https://www.anchorterminal.com/compare/shippypro-vs-shipstation.json",
        "title": "ShippyPro vs ShipStation API",
        "url": "https://www.anchorterminal.com/compare/shippypro-vs-shipstation"
      },
      {
        "json": "https://www.anchorterminal.com/compare/atoship-vs-ship24.json",
        "title": "atoship vs Ship24",
        "url": "https://www.anchorterminal.com/compare/atoship-vs-ship24"
      },
      {
        "json": "https://www.anchorterminal.com/compare/atoship-vs-trackingmore.json",
        "title": "atoship vs TrackingMore",
        "url": "https://www.anchorterminal.com/compare/atoship-vs-trackingmore"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ship24-vs-shipstation.json",
        "title": "Ship24 vs ShipStation API",
        "url": "https://www.anchorterminal.com/compare/ship24-vs-shipstation"
      },
      {
        "json": "https://www.anchorterminal.com/compare/shipstation-vs-trackingmore.json",
        "title": "ShipStation API vs TrackingMore",
        "url": "https://www.anchorterminal.com/compare/shipstation-vs-trackingmore"
      }
    ],
    "panel": null,
    "scores": [
      {
        "atoship": 30,
        "by": 40,
        "edge": "shipstation",
        "key": "reliability",
        "name": "Reliability",
        "shipstation": 70,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "atoship": 55,
        "by": 28,
        "edge": "shipstation",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "shipstation": 83,
        "weight": 13
      },
      {
        "atoship": 53,
        "by": 11,
        "edge": "shipstation",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "shipstation": 64,
        "weight": 13
      },
      {
        "atoship": 55,
        "by": 23,
        "edge": "atoship",
        "key": "security",
        "name": "Security \u0026 auth",
        "shipstation": 32,
        "weight": 14
      },
      {
        "atoship": 40,
        "by": 0,
        "edge": "",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "shipstation": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "atoship": 10,
        "by": 23,
        "edge": "shipstation",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "shipstation": 33,
        "weight": 7
      },
      {
        "atoship": 45,
        "by": 19,
        "edge": "shipstation",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "shipstation": 64,
        "weight": 7
      }
    ],
    "summary": "ShipStation API scores 51 (D) on agent readiness against atoship's 43 (E), and leads in 5 of 7 scored categories. atoship leads on security \u0026 auth. Both do shipping rates.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "atoship": "atoship gives agents twelve MCP tools and a REST API for US labels with published per-unit fees, free sign-up, test keys and a wallet the agent cannot overspend. No status page, rate-limit figures, OpenAPI spec or changelog was found, and the npm MCP package has not changed since February 2026.",
      "shipstation": "A public OpenAPI 3.1 contract with 173 operations, Markdown docs for agents and a free ShipStation API plan with a sandbox make a first rate quote or test label reachable without a contract. One API key carries full account access, with no scopes or idempotency keys on label purchases, and API release notes carry month-only dates."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/atoship-vs-shipstation",
    "json": "https://www.anchorterminal.com/compare/atoship-vs-shipstation.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/atoship-vs-shipstation.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/atoship-vs-shipstation.min.md"
  },
  "markdown": "ShipStation API scores 51 (D) on agent readiness against atoship's 43 (E), and leads in 5 of 7 scored categories. atoship leads on security \u0026 auth. Both do shipping rates.\n\n- atoship: grade E, 43/100, rank #1247 of 1486. Markdown https://www.anchorterminal.com/tools/atoship.md · JSON https://www.anchorterminal.com/api/v1/tools/atoship.json\n- ShipStation API: grade D, 51/100, rank #1038 of 1486. Markdown https://www.anchorterminal.com/tools/shipstation.md · JSON https://www.anchorterminal.com/api/v1/tools/shipstation.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### atoship (E)\n\nGood for: US sellers who want cheap USPS, UPS and FedEx labels bought by an agent from a capped wallet.\n\nAhead on:\n- Security \u0026 auth, 55 against 32\n\nAlso in its favour:\n- Runs on your own machine\n- Free to start without a card\n- No incidents deducted, where ShipStation API loses 6 points for them\n\nWatch for: No status page; status.atoship.com serves the home page\n\n### ShipStation API (D)\n\nGood for: An agent working inside a merchant's existing ShipStation account (orders, batches, inventory, labels), or a developer who wants a free sandbox through the ShipStation API plans.\n\nAhead on:\n- Reliability, 70 against 30\n- Schema \u0026 documentation, 83 against 55\n- Agent ergonomics, 64 against 53\n- Maintenance \u0026 community, 33 against 10\n- Transparency \u0026 trust, 64 against 45\n\nWatch for: One API key with full account access. No scopes, read-only keys or approval step before a label is bought\n\n\n## Why the edge\n\n### Reliability: ShipStation API +40\n\n- atoship (30): Graded as a hosted service on the MCP server at atoship.com/api/mcp and REST API v1. status.atoship.com serves the marketing home page and the docs' API Status page rendered no status content, so no status page is counted (0). No readable incident history (5). 429 and a `RATE_LIMIT_EXCEEDED` code are documented, without numbers (5 of 15). A 429 carries `error.retryAfter` and Retry-After; no idempotency key for label purchases was found (10 of 15). No SLA (0). Not labelled beta (10). 0 + 5 + 5 + 10 + 0 + 10 = 30.\n- ShipStation API (70): Graded on ShipStation API v2 at api.shipstation.com/v2, with the hosted lines. Statuspage at status.shipstation.com with components for Companion API V1 and V2, carriers and marketplaces (20). The history pages and feed, read on 4 November, list 13 incidents and one scheduled maintenance between 6 August and 4 November. The four labelled major each touch one or two carriers (DPD Local and DX on 11 September, Evri on 24 and 25 September, DPD on 20 October, Evri shipments to the EU on 29 and 30 October), and the rest are minor or notices, so all are partial and read as minor (20). 200 requests a minute by default, per the 7 October check, not re-read on 4 November (15). 429 responses carry `Retry-After` and the docs ask for retries handled globally, with no idempotency key or safe-retry guidance for label purchases, per the 7 October check, not re-read on 4 November (10). No SLA found (0). The getting-started page says v2 \"is currently in an early release stage\" while calling it tested and stable, per the 7 October check, not re-read on 4 November (5).\n\n### Schema \u0026 documentation: ShipStation API +28\n\n- atoship (55): No OpenAPI found (/openapi.json is 404); a Postman collection v2.1 of 15 endpoints is the only machine-readable contract, and the hosted MCP tools' schemas were not read because /api/ is disallowed (15 of 25). llms.txt (10). The MCP page gives each tool a one-line description and an example prompt (8 of 20). Input typing could not be checked beyond the docs' object pages (5 of 15). The errors page documents status codes, `error.code` values and `retryAfter`, with examples (12 of 15). v1 API, no changelog found (5 of 15). 15 + 10 + 8 + 5 + 12 + 5 = 55.\n- ShipStation API (83): OpenAPI 3.1 for v2 at docs.shipstation.com/_bundle/apis/@shipstation-v2/openapi.yaml, 173 operations on 123 paths and 372 schemas (25). llms.txt with 480 lines of links and a Markdown copy of each docs page (10). Guides explain when to use rates against estimates and webhooks against polling. Operation descriptions in the spec are one line each (13). 152 enums, required fields and read-only markers, though carrier and service codes are free strings that depend on the account (12). 1,648 example entries and enumerated `error_code` and `error_type` values. The spec documents 400, 404 and 500 but no 401 or 429 response (11). Release notes are dated by month and the spec version has stayed 2.0.0 through every addition (12). Docs, pricing and legal pages per the 7 October check, not re-read on 4 November.\n\n### Security \u0026 auth: atoship +23\n\n- atoship (55): Live and test API keys sent as Bearer tokens, with the docs advising separate keys with limited scopes and rotation, and OAuth with PKCE for the hosted MCP server (25 of 30). Test keys create no real labels, the consent screen names label buying and voiding, and the docs say the agent can spend only funds already in the wallet, with no per-call confirmation (12 of 20). Responses carry addresses and carrier tracking data rather than free text from strangers (10). No audit log found (0). security.txt valid to December 2027 with a security contact; no certification, bounty or disclosure policy beyond the terms (8 of 20). 25 + 12 + 10 + 0 + 8 = 55.\n- ShipStation API (32): One secret in an `API-Key` header. The docs say the key gives full access. Platform accounts hold one active v2 key that can be regenerated, and ShipStation API accounts have separate `TEST_` sandbox keys (17). No scopes, read-only keys or confirmation before a label purchase. The sandbox key is the only lower-risk mode (5). Responses carry order text, addresses and carrier messages written by others, with no injection guidance (3). A `request_id` on every response. No per-key audit log found in the docs (3). TLS 1.2 or higher required, HSTS on the API host and RSA-SHA256 signed webhooks with a JWKS. security.txt returns 404 on three hosts, and no certification, bug bounty or disclosure policy was found on the pages we read (4). Docs, pricing and legal pages per the 7 October check, not re-read on 4 November.\n\n### Maintenance \u0026 community: ShipStation API +23\n\n- atoship (10): No changelog or release notes found. The newest dated release is @atoship/mcp 1.0.2 on 18 February 2026, more than 180 days ago (0). No dated releases in the 90 days from 8 August (0). Support by email, with no public tracker; the repository named on npm is not public (5 of 15). The MCP package is official, and only the Go SDK of eight listed is installable (5 of 15). No public CI (0). 0 + 0 + 5 + 5 + 0 = 10.\n- ShipStation API (33): Release notes on docs.shipstation.com are dated by month only, with entries for August, September and October 2026 on the 7 October reading, so they don't set recency. The newest dated change from ShipStation's own sources is the shipengine-openapi repository commit of 11 June 2026, after .NET SDK v3.2.1 on 27 May and Python 2.1.1 on 6 May (146 days, 10). No dated release in the 90 days from 6 August. Month-dated entries counted at half come to fewer than three, and commits on 27 October in the JavaScript and .NET SDK repositories are in no release (0). Closed service with monthly release notes, an API support address (apisupport@shipstation.com) and a community forum. We couldn't measure reply times (10). Official SDKs exist in six languages, and all call the v1 ShipEngine host. JavaScript's newest tag is v1.0.7 of 31 January 2024 (8). SDK repositories have CI workflows, and the JavaScript SDK's CI was rebuilt on 27 October. The OpenAPI repository was last changed on 11 June 2026 (5).\n\n### Transparency \u0026 trust: ShipStation API +19\n\n- atoship (45): Closed service under terms naming atoship LLC of California (15 of 30). The privacy policy (7 May 2026) keeps data as long as necessary with no periods and names no processors (10 of 30). No deprecation policy or dated notices found (0). No subprocessor list or data locations found (0). 15 + 10 + 0 + 0 = 25.\n- ShipStation API (64): Closed service under terms of service effective 16 July 2026 that name Auctane LLC d/b/a ShipStation. The v2 OpenAPI file is marked MIT and the SDKs are Apache 2.0 (16). The privacy policy, effective 18 March 2026, is Auctane, Inc.'s for all its brands. It keeps data \"as long as necessary\" with no periods, and says third parties may not train AI models on personal information. No public DPA was found (12). The legacy V1 API is described as deprecated with removal \"in the future\" and no date, and the terms let ShipStation withdraw API access at its discretion (6). US persons' data stays in the United States and EEA and UK data may move there under the Data Privacy Framework. Service providers are named by type, with no subprocessor list (8). Docs, pricing and legal pages per the 7 October check, not re-read on 4 November.\n\n### Agent ergonomics: ShipStation API +11\n\n- atoship (53): 12 MCP tools (15, for 11 to 30). List tools for orders and labels, with paging not documented in the pages read (8 of 20). Machine-readable error codes with a retry delay (18 of 20). The npm package's tools carry no readOnlyHint or destructiveHint, and no idempotency key was found; `void_label` undoes a mistaken purchase (5 of 20). Only the Go SDK installs, the hosted server is one URL, and test keys give a safe default (7 of 15). 15 + 8 + 18 + 5 + 7 = 53.\n- ShipStation API (64): No MCP server that performs shipping operations. The MCP server at docs.shipstation.com/mcp reads documentation only. List endpoints take `page_size`. No field selection was found (12). `page`, `page_size`, `sort_by`, `sort_dir` and filters by status, tag, dates, store and external id on list calls (20). Errors carry `error_source`, `error_type`, `error_code`, `message`, field names and a `request_id` (18). No idempotency keys. `external_shipment_id` is unique per shipment, labels can be voided and `test_label` exists, which we counted as partial safe-retry support (6). Official SDKs in six languages call api.shipengine.com/v1, not v2, and a label needs a `carrier_id` and `service_code` looked up first (8). Docs, pricing and legal pages per the 7 October check, not re-read on 4 November.\n\n## Score by category\n\n| Category | Weight | atoship | ShipStation API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 30 | 70 | ShipStation API +40 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 55 | 83 | ShipStation API +28 |\n| Agent ergonomics | 13% (16.2 this run) | 53 | 64 | ShipStation API +11 |\n| Security \u0026 auth | 14% (17.5 this run) | 55 | 32 | atoship +23 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 40 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 10 | 33 | ShipStation API +23 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 45 | 64 | ShipStation API +19 |\n| Negative events | ≤15 | 0 | -6 | |\n| **Total** | | **43 · E** | **51 · D** | |\n\n## Facts side by side\n\n| Fact | atoship | ShipStation API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | atoship LLC | Auctane LLC d/b/a ShipStation |\n| Hosted endpoint | `https://atoship.com/api/mcp` | `https://api.shipstation.com/v2` |\n| Transports | Streamable HTTP, stdio | HTTP |\n| Auth | OAuth or key | API key |\n| Pricing | Pay per use | Freemium |\n| x402 | no | no |\n| Licence | none | Proprietary service under ShipStation's terms of service. The v2 OpenAPI file is marked MIT and the SDKs on GitHub are Apache 2.0 |\n| Tools exposed | 12 | none |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-02-18 | 2026-10-01 |\n| Terms last updated | 2026-08-20 | no date given |\n| Privacy policy last updated | 2026-05-07 | 2026-03-18 |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | not found in the text | yes |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | not found in the text | yes |\n| Arbitration or class-action waiver | yes | yes |\n| Popularity | none | 6.8k npm/wk |\n\n## How the scores have moved\n\n### atoship\n\nNo score change since it was listed.\n\n### ShipStation API\n\n- -8.3 on 4 November 2026 (C to D): correction, negative event\n\n## Verdicts\n\n**atoship.** atoship gives agents twelve MCP tools and a REST API for US labels with published per-unit fees, free sign-up, test keys and a wallet the agent cannot overspend. No status page, rate-limit figures, OpenAPI spec or changelog was found, and the npm MCP package has not changed since February 2026.\n\n**ShipStation API.** A public OpenAPI 3.1 contract with 173 operations, Markdown docs for agents and a free ShipStation API plan with a sandbox make a first rate quote or test label reachable without a contract. One API key carries full account access, with no scopes or idempotency keys on label purchases, and API release notes carry month-only dates.\n\n## Before you call either\n\n### atoship\n\n1. Use an `ak_test_` key until the user confirms live labels; test mode creates no real labels\n2. Ask the user before `purchase_label`, since it spends the wallet balance\n3. Call `void_label` promptly for a mistaken label, and check the carrier's refund rules\n4. Branch on `error.code`, and on 429 wait `error.retryAfter` seconds\n5. Validate the address with `validate_address` before buying; the standalone endpoint costs $0.03 a call\n\n### ShipStation API\n\n1. Send the key in an `API-Key` header to https://api.shipstation.com/v2. A key that starts `TEST_` runs in the sandbox on the same host\n2. Call GET /v2/carriers first. Rate and label calls need `carrier_ids` or a `carrier_id` and a `service_code` from that account\n3. Don't blindly retry POST /v2/labels after a timeout. List labels first, then void a duplicate with PUT /v2/labels/{label_id}/void\n4. Check the `errors` array on 2XX responses too, and read `error_source` to tell a carrier fault from a ShipStation one\n5. On a platform (Standard or Premium) key every label is real and charged. Ask the owner before buying, and void test labels at once\n\n## Questions\n\n### Which is better for AI agents, atoship or ShipStation API?\n\nShipStation API scores 51 (D) on agent readiness against atoship's 43 (E), and leads in 5 of 7 scored categories. atoship leads on security \u0026 auth.\n\n### Do atoship and ShipStation API need an API key?\n\natoship takes an API key or an OAuth sign-in. ShipStation API needs an API key.\n\n### Can an agent call atoship and ShipStation API without installing anything?\n\nYes. atoship has a hosted endpoint at https://atoship.com/api/mcp and ShipStation API at https://api.shipstation.com/v2.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/atoship-vs-shipstation.json, and with the fewest tokens: https://www.anchorterminal.com/compare/atoship-vs-shipstation.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"atoship\", \"b\": \"shipstation\"}`. From a terminal: `anchor compare atoship shipstation`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/atoship.json and https://www.anchorterminal.com/api/v1/tools/shipstation.json\n\n## Other comparisons with atoship or ShipStation API\n\n- [atoship vs EasyPost](https://www.anchorterminal.com/compare/atoship-vs-easypost.md)\n- [atoship vs Easyship](https://www.anchorterminal.com/compare/atoship-vs-easyship.md)\n- [atoship vs Envia](https://www.anchorterminal.com/compare/atoship-vs-envia.md)\n- [atoship vs Karrio](https://www.anchorterminal.com/compare/atoship-vs-karrio.md)\n- [atoship vs Sendcloud](https://www.anchorterminal.com/compare/atoship-vs-sendcloud.md)\n- [atoship vs ShipBob](https://www.anchorterminal.com/compare/atoship-vs-shipbob.md)\n- [atoship vs Shippo](https://www.anchorterminal.com/compare/atoship-vs-shippo.md)\n- [atoship vs ShippyPro](https://www.anchorterminal.com/compare/atoship-vs-shippypro.md)\n- [EasyPost vs ShipStation API](https://www.anchorterminal.com/compare/easypost-vs-shipstation.md)\n- [Easyship vs ShipStation API](https://www.anchorterminal.com/compare/easyship-vs-shipstation.md)\n- [Envia vs ShipStation API](https://www.anchorterminal.com/compare/envia-vs-shipstation.md)\n- [Karrio vs ShipStation API](https://www.anchorterminal.com/compare/karrio-vs-shipstation.md)\n- [Sendcloud vs ShipStation API](https://www.anchorterminal.com/compare/sendcloud-vs-shipstation.md)\n- [ShipBob vs ShipStation API](https://www.anchorterminal.com/compare/shipbob-vs-shipstation.md)\n- [Shippo vs ShipStation API](https://www.anchorterminal.com/compare/shippo-vs-shipstation.md)\n- [ShippyPro vs ShipStation API](https://www.anchorterminal.com/compare/shippypro-vs-shipstation.md)\n- [atoship vs Ship24](https://www.anchorterminal.com/compare/atoship-vs-ship24.md)\n- [atoship vs TrackingMore](https://www.anchorterminal.com/compare/atoship-vs-trackingmore.md)\n- [Ship24 vs ShipStation API](https://www.anchorterminal.com/compare/ship24-vs-shipstation.md)\n- [ShipStation API vs TrackingMore](https://www.anchorterminal.com/compare/shipstation-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": "atoship vs ShipStation API",
        "url": ""
      }
    ],
    "description": "ShipStation scores 51 (D) to atoship's 43 (E) for shipping rates. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "atoship E 43",
      "ShipStation API D 51",
      "scores"
    ],
    "h1": "atoship vs ShipStation API",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/atoship-vs-shipstation",
    "published": "2026-10-01",
    "section": "tools",
    "title": "atoship vs ShipStation for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/atoship-vs-shipstation"
  },
  "tokens": {
    "markdown": 4550,
    "slim": 2880
  },
  "version": 1
}
