{
  "fixes": {
    "slug": "shotstack",
    "name": "Shotstack",
    "listing": "https://www.anchorterminal.com/tools/shotstack",
    "markdown": "# Fix list: Shotstack\n\nFrom Anchor Terminal's listing at https://www.anchorterminal.com/tools/shotstack, the October 2026 research run, assessed 8 October 2026. Grade B, 65.3 out of 100.\n\nThis is everything the published grade says the listing lacks, the biggest possible gain to the total first. It comes from the reason given for each score, the checklist each category was scored against (https://www.anchorterminal.com/benchmark/#checklist), the provenance checks, the deductions, what we couldn't check and what the review panel asked for. A fix counts at the next check, once it's public.\n\nFor a coding agent working on Shotstack: work through the items below in the product, its docs and its public pages. Each category gives the reason for its score, with the points each checklist item earned, and the checklist itself, so the gap is the items that earned less than their points. Change the product, not the wording, and keep a note of what you changed and where it's published.\n\n## 1. Security \u0026 auth, 48 out of 100, up to 9.1 more on the total\n\nWhy it scored 48: The MCP server uses OAuth authorisation code with PKCE S256 and dynamic client registration, with one scope, `mcp:tools`. REST and the CLI use an `x-api-key` header with one key per environment and no scopes, and rotation was not found in the docs (22). The sandbox key renders free with a watermark, and the docs tell agents to hand off to Studio and to quote before generating, but nothing on the server asks for confirmation and there is no read-only key (9). Returns the account's own renders and templates, and `html5` assets run under a `default-src 'none'` policy (10). Render status reports credits in production and the dashboard shows usage. No audit log was found (4). No security.txt, disclosure policy, bounty or certification of Shotstack's own. The DPA lists technical measures and relies on AWS's audit reports (3).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-security):\n\n- 0 to 30, the credential model. 30 for OAuth 2.1 with scopes, or scoped and revocable keys with rotation. 20 for plain revocable API keys. 10 for one all-powerful key. 10 off when a secret can travel in a URL query string as a documented option.\n- 0 to 20, read-only or least-privilege modes, and confirmation or approval for destructive actions.\n- 0 to 15, prompt-injection posture where the tool returns untrusted content (documented mitigations or guidance). A tool that returns no untrusted content gets 10.\n- 0 to 15, audit logs or per-call visibility for the operator.\n- 0 to 20, a security programme. security.txt or a disclosure policy, a bug bounty, SOC 2 or ISO 27001, advisories handled in public.\n\nModels are read for retention, whether API data trains models (and whether that's off by default), zero-retention options and certifications. Frameworks for telemetry defaults, approval hooks, guardrails and sandboxing.\n\n## 2. Payments \u0026 pricing, 45 out of 100, up to 6.9 more on the total\n\nWhy it scored 45: No x402, MPP or L402 (0). Public per-minute prices, 20 cents on pay as you go down to 5 cents on Volume, with AI generation priced per model through a quote endpoint and four examples on the pricing page (20). 10 credits for 30 days with no card, and a free watermarked sandbox (20). Checking an edit and opening a Studio preview need no key, but any render needs a key from a browser signup (5).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-payments):\n\nThe published rubric, also on the [x402 page](https://www.anchorterminal.com/x402/).\n\n- 40, a machine payment protocol (x402, MPP or L402) on the tool's own endpoints. 10 to 30 when it covers only some endpoints or only goes through a third party, and the note says which.\n- 20, per-call or per-unit pricing published without a login. 10 for public plan-only pricing, 0 for \"contact sales\" or prices behind a login.\n- 20, a free tier or trial that doesn't need a card.\n- 20, autonomous onboarding, meaning an agent can get access without a person signing up in a browser (keyless use, x402, a programmatic key API).\n\nPayment platforms and agent wallets rarely charge for their own API over a machine protocol, so the first line has steps for them, and the highest one that applies counts. 40 when x402, MPP or L402 runs on all their own endpoints, 30 when it runs on part of their own API, 25 when their merchants can accept one, 20 for running a facilitator, 15 for paying as a buyer, and 0 when the only protocol is their own. Merchant acceptance sits above a facilitator because the platform's own customers can charge agents through it, while a facilitator settles for sellers who wire up the protocol themselves. The counter-argument (a facilitator does more for the protocol as a whole) has a point. Each note says which step applied.\n\nOpen-source software you run yourself is scored on its hosted or paid option if it has one. A free, self-hosted package with nothing to buy gets 20, 20 and 20 for the last three lines, and 0 to 40 for the first only if it ships a payment protocol.\n\n## 3. Agent ergonomics, 63 out of 100, up to 6 more on the total\n\nWhy it scored 63: 15 MCP tools by the vendor's list, with the authoring guide loaded on demand through `get_shotstack_guide` and skill references read only when relevant (18). No pagination, limit or filter on the template or source lists in the definition. The CLI prints JSON with `--output json` (6). Errors carry `status`, `title` and `detail`, confirmed on a 401, generation errors carry a `code`, the CLI validates offline and exits 0, 1 or 2 for success, permanent and retryable failures (17). `Idempotency-Key` and a result cache on generation and a free quote, but no idempotency on renders, and MCP annotations were not readable (12). Smart clip lengths and a default `v1` environment keep requests short. Five official SDK repositories exist, but the npm and PyPI packages date from July 2024 (10).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-ergonomics):\n\n- 0 to 25, context cost. For MCP, the number and size of the tool definitions (25 for ten or fewer compact tools, 15 for 11 to 30, 5 for more than 30, plus up to 10 back for toolsets, dynamic loading or read-only subsets). For APIs, whether responses can be sized (field selection, limits, summaries).\n- 20, pagination, filtering and output-size controls.\n- 20, actionable, documented error responses, codes and messages an agent can recover from.\n- 20, idempotency or safe retries, and for MCP the `readOnlyHint` and `destructiveHint` annotations.\n- 15, sensible defaults, few required parameters, and official SDKs in at least two languages.\n\nModels are read for tool use, structured output, prompt caching, context length, batch and SDKs. Frameworks for how much code and how many defaults a tool-calling agent with MCP needs.\n\n## 4. Reliability, 85 out of 100, up to 3 more on the total\n\nWhy it scored 85: Hosted lines. Public status page at status.shotstack.io with monitors, the Edit API in production among them (20). Its feed lists one incident in 90 days, degraded renders on 21 July 2026 from a configuration change, with no duration stated, and two completed maintenance windows (20). Rate limits per API key in a fixed 60-second window, 300 for Edit, 600 for Serve and 300 for Ingest in production (15). A 429 returns `rate_limit_error` with advice to wait for the window and back off, and `POST /generate` takes an `Idempotency-Key`, but `POST /render` has none and no `Retry-After` is documented for rate limits (10). Schedule 2 of the terms is an SLA of 99.9 per cent with a 10 per cent credit, free plans excluded (10). The Edit API is `v1` and neither the MCP server nor the CLI carries a beta label (10).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-reliability):\n\nHosted APIs, MCP servers, models and platforms.\n\n- 20, a public status page with component history (Statuspage, Instatus, BetterStack or the vendor's own).\n- 0 to 30, the incident record for the last 90 days on that page. 30 for a clean record or trivial incidents only, 20 for minor incidents only, 10 for one major outage (an hour or more of a core API down, or errors across the board), 0 for several. 5 when there's no history we could read, and the note says so.\n- 15, rate limits documented with numbers.\n- 15, documented 429 or overload handling (Retry-After, backoff guidance), and idempotency keys or safe-retry guidance where writes are involved.\n- 10, an SLA published for any paid tier.\n- 10, the surface agents use is generally available, not beta or preview.\n\nLocal packages, SDKs, frameworks and stdio MCP servers.\n\n- 20, installs from an official package with supported runtimes stated.\n- 25, a public CI and test suite, passing on the default branch.\n- 0 to 25, open crash or regression issues relative to activity (25 for few and handled, 0 for many, old and unanswered).\n- 15, semver discipline and breaking changes called out in a changelog.\n- 15, version 1.0 or later, or declared stable.\n\nProtocols are read from their reference implementations, the public facilitators or servers, spec stability and test vectors.\n\n## 5. Maintenance \u0026 community, 73 out of 100, up to 2.4 more on the total\n\nWhy it scored 73: CLI 0.10.0 on 5 October 2026 and API definition 1.22.0 on 4 October 2026, three and four days before the check (30). Seven CLI releases and more than fifteen definition releases since 10 July 2026 (20). Dated changelog for the definition on GitHub, in-app support on every plan and a GitHub issue template for the CLI. Issue threads were not read (8). `@shotstack/cli` and `@shotstack/schemas` are current, while npm `shotstack-sdk` 0.2.9 and PyPI `shotstack-sdk` 0.2.8 date from July 2024. The MCP registry entry was not checked (7). The definition repository runs build, smoke and example tests on pull requests, and the CLI runs its tests at release (8).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-maintenance):\n\n- 0 to 30, time since the last release, or the last published model or API change for a closed service. 30 within 30 days, 20 within 90, 10 within 180, 0 older.\n- 20, at least three releases or dated changelog entries in the last 90 days.\n- 0 to 25, responsiveness. Issues and pull requests answered on GitHub (the open issues and how recent the replies are). For closed services, a public changelog and a support or community channel that answers, 0 to 15.\n- 15, presence in the official MCP registry under a verified namespace (MCP servers), or current official SDKs (APIs and models).\n- 10, package health, current dependencies and CI.\n\nModels are read for deprecation notice periods and model churn rather than release counts.\n\n## 6. Transparency \u0026 trust, 73 out of 100, up to 2.4 more on the total\n\nMade of editorial 61, provenance 84.\n\nWhy it scored 73: Closed service under published terms, with the CLI under Apache-2.0 and the schemas and SDKs under MIT (15). A DPA and sub-processor list updated 6 October 2026, and terms that say customer data is not used to train AI models. The privacy policy is dated 21 December 2021 and says ingested media is deleted after rendering, while the Ingest guide says sources are stored until deleted, and the DPA gives 24 hours for outputs while the hosting guide calls CDN hosting permanent by default (18). The terms promise reasonable notice before a feature is retired and 30 days before material changes to the terms, and deprecated asset types keep working, but no dated deprecation policy was found (8). Five sub-processors named with purposes and locations, AWS in Sydney and the United States, with seven days' notice of additions (20).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-transparency):\n\n- 0 to 30, source availability and licence clarity. 30 for open source under an OSI licence, 15 for closed with clear terms, 0 for unclear terms.\n- 0 to 30, data handling and retention statements that agree with each other (privacy policy, DPA, retention periods, subprocessors).\n- 0 to 20, a deprecation policy or notices with dates.\n- 0 to 20, telemetry disclosed with an opt-out (local software), or subprocessors and data locations disclosed (hosted).\n\nThe other half of Transparency and trust is the provenance score, computed from checked facts (below). The category score is the mean of the two.\n\nProvenance checks not met in full (half of this category, computed from checked facts):\n\n- Domain age: shotstack.io, registered 2017-06-30 (9 years) (11 of 15)\n- Terms of service: read, states 6 of the 7 things a reader expects (9.1 of 10)\n- Privacy policy: read, states 7 of the 8 things a reader expects (9.3 of 10)\n- security.txt: not found (0 of 10)\n\n## 7. Schema \u0026 documentation, 88 out of 100, up to 2 more on the total\n\nWhy it scored 88: Public OpenAPI 3.0.1 definition of the Edit API with 14 operations and 122 schemas. The MCP tool schemas need a signed-in account and were not read (25). llms.txt, llms-full.txt and a Markdown twin of every guide page (10). The conventions guide and MCP page say when to use `studio` or `render_video` and name the five commonest mistakes (17). 84 enums and required fields across the schemas, with per-model generation `options` published as JSON Schema by `GET /models` (13). 367 examples in the definition. Error responses are documented for the generation endpoints, while render and template operations document only the success response (10). `v1` and `stage` in the path and a dated changelog for the definition, less 2 because release 1.22.0 removed a response field in a minor version (13).\n\nThe checklist (https://www.anchorterminal.com/benchmark/#checklist-schema):\n\nAPIs and MCP servers.\n\n- 25, a machine-readable contract (a public OpenAPI file or similar; for MCP, typed JSON Schema inputs on every tool).\n- 10, llms.txt or Markdown docs served for agents.\n- 0 to 20, descriptions that say what a tool is for, when to use it and when not to, read from the tool definitions in the source or the API reference.\n- 0 to 15, typed inputs with enums, constraints and required fields, and no free-form JSON blobs.\n- 0 to 15, examples and documented error responses.\n- 15, versioning and a public changelog.\n\nModels are read from the API reference, the OpenAPI file, llms.txt, the structured-output and tool-use docs and the model cards. Frameworks from docs a model can follow, typed interfaces, examples and the API reference.\n\n## Deductions\n\nEach comes off the total. A fixed and documented problem counts for less at the next check.\n\n- 4 October 2026. Release 1.22.0 of the published API definition removed the `pricing` object from the `GET /models` response and replaced it with `POST /generate/quote`, in a minor release with no breaking-change mark and no notice found. We did not test whether the live response changed that day (https://github.com/shotstack/oas-api-definition/blob/main/CHANGELOG.md)\n\n## What we couldn't check\n\nWhat we couldn't read counted as absent. Publishing it on a page a plain HTTP fetch can read (not only in a browser) lets the next check count it.\n\n- unchecked: the MCP tool schemas, descriptions and annotations, which need a signed-in account. The tool count of 15 is from the vendor's guide\n- unchecked: the official MCP registry entry. registry.modelcontextprotocol.io timed out\n- unchecked: how keys are created, rotated or revoked in the dashboard, which sits behind a login\n- unchecked: GitHub issue threads and response times. Only open-issue counts from the GitHub API were read\n- The status page draws its uptime bars by script. Incident history was read from the RSS feed the page links, which lists one incident and two maintenance windows since 21 July 2026. The incident page gives the same start and end time, so its length is unknown\n- Whether the live `GET /models` response dropped `pricing` on 4 October 2026 was not tested. The deduction rests on the published definition, its changelog and the CLI release of 5 October\n- The privacy policy (21 December 2021), the DPA (6 October 2026) and the guides disagree on how long ingested media and rendered outputs are kept\n- The Shotstack guides carry instructions addressed to AI agents, such as a tip to update the CLI and skill before starting. We recorded them and did not act on them\n- Popularity uses npm `shotstack-sdk` (1,211 a week) and PyPI `shotstack-sdk` (326 a week). `@shotstack/cli` had 448 npm downloads in the same week, and the CLI repository has 0 stars\n- Shotstack names Anthropic as a sub-processor for its Director assistant and its docs example calls the Anthropic SDK. These grades are written by agents on Anthropic's Claude models, by the same checklist as every listing\n- Payments gives 5 of 20 for onboarding because offline validation and Studio preview links need no key. A stricter reading gives 0\n\n## Weaknesses\n\n- API keys have no scopes. One production key and one sandbox key reach the Edit, Serve and Ingest APIs, and key rotation was not found in the docs\n- Webhook callbacks are not signed, per the webhooks guide, which tells receivers to confirm a render by calling the API\n- No security.txt, disclosure policy or certification of Shotstack's own was found. The DPA relies on AWS's SOC 2 and ISO 27001 reports\n- The published API definition dropped the `pricing` object from `GET /models` in release 1.22.0 on 4 October 2026, a minor release with no breaking-change mark\n- The npm `shotstack-sdk` (0.2.9) and PyPI `shotstack-sdk` (0.2.8) packages were last published in July 2024\n\n## What costs an agent a turn today\n\nThe notes we give agents before they call it. Each one is a workaround an agent shouldn't need.\n\n- Fetch `https://shotstack.io/docs/api/api.edit.json` and the conventions guide before writing an edit. Track order is reversed, so the first track renders on top\n- Render in `stage` first. It is free and watermarked, but AI generation there is charged from the production credit balance\n- Call `POST /generate/quote` before `POST /generate`, and send an `Idempotency-Key` header on generation. `POST /render` has no idempotency key, so do not resubmit blindly\n- Do not store the `url` from the render status response. It expires after 24 hours. Use the CDN address built from `owner` and the render id\n- On a 429, wait for the 60-second window to reset and retry with backoff. Limits are per API key, 300 a minute on the Edit API in production\n\n## When it's done\n\nSend what changed and where it's published as a dispute (https://www.anchorterminal.com/builders/#disputes, or `POST https://www.anchorterminal.com/api/v1/contact` with `\"kind\": \"dispute\"`). Disputes are answered in public, and the listing is checked again by the same checklist. Paying for an audit or a listing claim changes nothing here.\n",
    "grade": "B",
    "score": 65.3,
    "assessed": "2026-10-08",
    "run": "October 2026 research run",
    "categories": [
      {
        "key": "security",
        "name": "Security \u0026 auth",
        "score": 48,
        "maxGain": 9.1,
        "reason": "The MCP server uses OAuth authorisation code with PKCE S256 and dynamic client registration, with one scope, `mcp:tools`. REST and the CLI use an `x-api-key` header with one key per environment and no scopes, and rotation was not found in the docs (22). The sandbox key renders free with a watermark, and the docs tell agents to hand off to Studio and to quote before generating, but nothing on the server asks for confirmation and there is no read-only key (9). Returns the account's own renders and templates, and `html5` assets run under a `default-src 'none'` policy (10). Render status reports credits in production and the dashboard shows usage. No audit log was found (4). No security.txt, disclosure policy, bounty or certification of Shotstack's own. The DPA lists technical measures and relies on AWS's audit reports (3).",
        "checklist": [
          "- 0 to 30, the credential model. 30 for OAuth 2.1 with scopes, or scoped and revocable keys with rotation. 20 for plain revocable API keys. 10 for one all-powerful key. 10 off when a secret can travel in a URL query string as a documented option.\n- 0 to 20, read-only or least-privilege modes, and confirmation or approval for destructive actions.\n- 0 to 15, prompt-injection posture where the tool returns untrusted content (documented mitigations or guidance). A tool that returns no untrusted content gets 10.\n- 0 to 15, audit logs or per-call visibility for the operator.\n- 0 to 20, a security programme. security.txt or a disclosure policy, a bug bounty, SOC 2 or ISO 27001, advisories handled in public.",
          "Models are read for retention, whether API data trains models (and whether that's off by default), zero-retention options and certifications. Frameworks for telemetry defaults, approval hooks, guardrails and sandboxing."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-security"
      },
      {
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "score": 45,
        "maxGain": 6.9,
        "reason": "No x402, MPP or L402 (0). Public per-minute prices, 20 cents on pay as you go down to 5 cents on Volume, with AI generation priced per model through a quote endpoint and four examples on the pricing page (20). 10 credits for 30 days with no card, and a free watermarked sandbox (20). Checking an edit and opening a Studio preview need no key, but any render needs a key from a browser signup (5).",
        "checklist": [
          "The published rubric, also on the [x402 page](https://www.anchorterminal.com/x402/).",
          "- 40, a machine payment protocol (x402, MPP or L402) on the tool's own endpoints. 10 to 30 when it covers only some endpoints or only goes through a third party, and the note says which.\n- 20, per-call or per-unit pricing published without a login. 10 for public plan-only pricing, 0 for \"contact sales\" or prices behind a login.\n- 20, a free tier or trial that doesn't need a card.\n- 20, autonomous onboarding, meaning an agent can get access without a person signing up in a browser (keyless use, x402, a programmatic key API).",
          "Payment platforms and agent wallets rarely charge for their own API over a machine protocol, so the first line has steps for them, and the highest one that applies counts. 40 when x402, MPP or L402 runs on all their own endpoints, 30 when it runs on part of their own API, 25 when their merchants can accept one, 20 for running a facilitator, 15 for paying as a buyer, and 0 when the only protocol is their own. Merchant acceptance sits above a facilitator because the platform's own customers can charge agents through it, while a facilitator settles for sellers who wire up the protocol themselves. The counter-argument (a facilitator does more for the protocol as a whole) has a point. Each note says which step applied.",
          "Open-source software you run yourself is scored on its hosted or paid option if it has one. A free, self-hosted package with nothing to buy gets 20, 20 and 20 for the last three lines, and 0 to 40 for the first only if it ships a payment protocol."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-payments"
      },
      {
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "score": 63,
        "maxGain": 6,
        "reason": "15 MCP tools by the vendor's list, with the authoring guide loaded on demand through `get_shotstack_guide` and skill references read only when relevant (18). No pagination, limit or filter on the template or source lists in the definition. The CLI prints JSON with `--output json` (6). Errors carry `status`, `title` and `detail`, confirmed on a 401, generation errors carry a `code`, the CLI validates offline and exits 0, 1 or 2 for success, permanent and retryable failures (17). `Idempotency-Key` and a result cache on generation and a free quote, but no idempotency on renders, and MCP annotations were not readable (12). Smart clip lengths and a default `v1` environment keep requests short. Five official SDK repositories exist, but the npm and PyPI packages date from July 2024 (10).",
        "checklist": [
          "- 0 to 25, context cost. For MCP, the number and size of the tool definitions (25 for ten or fewer compact tools, 15 for 11 to 30, 5 for more than 30, plus up to 10 back for toolsets, dynamic loading or read-only subsets). For APIs, whether responses can be sized (field selection, limits, summaries).\n- 20, pagination, filtering and output-size controls.\n- 20, actionable, documented error responses, codes and messages an agent can recover from.\n- 20, idempotency or safe retries, and for MCP the `readOnlyHint` and `destructiveHint` annotations.\n- 15, sensible defaults, few required parameters, and official SDKs in at least two languages.",
          "Models are read for tool use, structured output, prompt caching, context length, batch and SDKs. Frameworks for how much code and how many defaults a tool-calling agent with MCP needs."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-ergonomics"
      },
      {
        "key": "reliability",
        "name": "Reliability",
        "score": 85,
        "maxGain": 3,
        "reason": "Hosted lines. Public status page at status.shotstack.io with monitors, the Edit API in production among them (20). Its feed lists one incident in 90 days, degraded renders on 21 July 2026 from a configuration change, with no duration stated, and two completed maintenance windows (20). Rate limits per API key in a fixed 60-second window, 300 for Edit, 600 for Serve and 300 for Ingest in production (15). A 429 returns `rate_limit_error` with advice to wait for the window and back off, and `POST /generate` takes an `Idempotency-Key`, but `POST /render` has none and no `Retry-After` is documented for rate limits (10). Schedule 2 of the terms is an SLA of 99.9 per cent with a 10 per cent credit, free plans excluded (10). The Edit API is `v1` and neither the MCP server nor the CLI carries a beta label (10).",
        "checklist": [
          "Hosted APIs, MCP servers, models and platforms.",
          "- 20, a public status page with component history (Statuspage, Instatus, BetterStack or the vendor's own).\n- 0 to 30, the incident record for the last 90 days on that page. 30 for a clean record or trivial incidents only, 20 for minor incidents only, 10 for one major outage (an hour or more of a core API down, or errors across the board), 0 for several. 5 when there's no history we could read, and the note says so.\n- 15, rate limits documented with numbers.\n- 15, documented 429 or overload handling (Retry-After, backoff guidance), and idempotency keys or safe-retry guidance where writes are involved.\n- 10, an SLA published for any paid tier.\n- 10, the surface agents use is generally available, not beta or preview.",
          "Local packages, SDKs, frameworks and stdio MCP servers.",
          "- 20, installs from an official package with supported runtimes stated.\n- 25, a public CI and test suite, passing on the default branch.\n- 0 to 25, open crash or regression issues relative to activity (25 for few and handled, 0 for many, old and unanswered).\n- 15, semver discipline and breaking changes called out in a changelog.\n- 15, version 1.0 or later, or declared stable.",
          "Protocols are read from their reference implementations, the public facilitators or servers, spec stability and test vectors."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-reliability"
      },
      {
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "score": 73,
        "maxGain": 2.4,
        "reason": "CLI 0.10.0 on 5 October 2026 and API definition 1.22.0 on 4 October 2026, three and four days before the check (30). Seven CLI releases and more than fifteen definition releases since 10 July 2026 (20). Dated changelog for the definition on GitHub, in-app support on every plan and a GitHub issue template for the CLI. Issue threads were not read (8). `@shotstack/cli` and `@shotstack/schemas` are current, while npm `shotstack-sdk` 0.2.9 and PyPI `shotstack-sdk` 0.2.8 date from July 2024. The MCP registry entry was not checked (7). The definition repository runs build, smoke and example tests on pull requests, and the CLI runs its tests at release (8).",
        "checklist": [
          "- 0 to 30, time since the last release, or the last published model or API change for a closed service. 30 within 30 days, 20 within 90, 10 within 180, 0 older.\n- 20, at least three releases or dated changelog entries in the last 90 days.\n- 0 to 25, responsiveness. Issues and pull requests answered on GitHub (the open issues and how recent the replies are). For closed services, a public changelog and a support or community channel that answers, 0 to 15.\n- 15, presence in the official MCP registry under a verified namespace (MCP servers), or current official SDKs (APIs and models).\n- 10, package health, current dependencies and CI.",
          "Models are read for deprecation notice periods and model churn rather than release counts."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-maintenance"
      },
      {
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "score": 73,
        "maxGain": 2.4,
        "reason": "Closed service under published terms, with the CLI under Apache-2.0 and the schemas and SDKs under MIT (15). A DPA and sub-processor list updated 6 October 2026, and terms that say customer data is not used to train AI models. The privacy policy is dated 21 December 2021 and says ingested media is deleted after rendering, while the Ingest guide says sources are stored until deleted, and the DPA gives 24 hours for outputs while the hosting guide calls CDN hosting permanent by default (18). The terms promise reasonable notice before a feature is retired and 30 days before material changes to the terms, and deprecated asset types keep working, but no dated deprecation policy was found (8). Five sub-processors named with purposes and locations, AWS in Sydney and the United States, with seven days' notice of additions (20).",
        "blend": "editorial 61, provenance 84",
        "checklist": [
          "- 0 to 30, source availability and licence clarity. 30 for open source under an OSI licence, 15 for closed with clear terms, 0 for unclear terms.\n- 0 to 30, data handling and retention statements that agree with each other (privacy policy, DPA, retention periods, subprocessors).\n- 0 to 20, a deprecation policy or notices with dates.\n- 0 to 20, telemetry disclosed with an opt-out (local software), or subprocessors and data locations disclosed (hosted).",
          "The other half of Transparency and trust is the provenance score, computed from checked facts (below). The category score is the mean of the two."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-transparency"
      },
      {
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "score": 88,
        "maxGain": 2,
        "reason": "Public OpenAPI 3.0.1 definition of the Edit API with 14 operations and 122 schemas. The MCP tool schemas need a signed-in account and were not read (25). llms.txt, llms-full.txt and a Markdown twin of every guide page (10). The conventions guide and MCP page say when to use `studio` or `render_video` and name the five commonest mistakes (17). 84 enums and required fields across the schemas, with per-model generation `options` published as JSON Schema by `GET /models` (13). 367 examples in the definition. Error responses are documented for the generation endpoints, while render and template operations document only the success response (10). `v1` and `stage` in the path and a dated changelog for the definition, less 2 because release 1.22.0 removed a response field in a minor version (13).",
        "checklist": [
          "APIs and MCP servers.",
          "- 25, a machine-readable contract (a public OpenAPI file or similar; for MCP, typed JSON Schema inputs on every tool).\n- 10, llms.txt or Markdown docs served for agents.\n- 0 to 20, descriptions that say what a tool is for, when to use it and when not to, read from the tool definitions in the source or the API reference.\n- 0 to 15, typed inputs with enums, constraints and required fields, and no free-form JSON blobs.\n- 0 to 15, examples and documented error responses.\n- 15, versioning and a public changelog.",
          "Models are read from the API reference, the OpenAPI file, llms.txt, the structured-output and tool-use docs and the model cards. Frameworks from docs a model can follow, typed interfaces, examples and the API reference."
        ],
        "checklistUrl": "https://www.anchorterminal.com/benchmark/#checklist-schema"
      }
    ],
    "provenance": [
      {
        "label": "Domain age",
        "value": "shotstack.io, registered 2017-06-30 (9 years)",
        "points": 11,
        "max": 15
      },
      {
        "label": "Terms of service",
        "value": "read, states 6 of the 7 things a reader expects",
        "points": 9.1,
        "max": 10
      },
      {
        "label": "Privacy policy",
        "value": "read, states 7 of the 8 things a reader expects",
        "points": 9.3,
        "max": 10
      },
      {
        "label": "security.txt",
        "value": "not found",
        "points": 0,
        "max": 10
      }
    ],
    "deductions": [
      "4 October 2026. Release 1.22.0 of the published API definition removed the `pricing` object from the `GET /models` response and replaced it with `POST /generate/quote`, in a minor release with no breaking-change mark and no notice found. We did not test whether the live response changed that day (https://github.com/shotstack/oas-api-definition/blob/main/CHANGELOG.md)"
    ],
    "unchecked": [
      "unchecked: the MCP tool schemas, descriptions and annotations, which need a signed-in account. The tool count of 15 is from the vendor's guide",
      "unchecked: the official MCP registry entry. registry.modelcontextprotocol.io timed out",
      "unchecked: how keys are created, rotated or revoked in the dashboard, which sits behind a login",
      "unchecked: GitHub issue threads and response times. Only open-issue counts from the GitHub API were read",
      "The status page draws its uptime bars by script. Incident history was read from the RSS feed the page links, which lists one incident and two maintenance windows since 21 July 2026. The incident page gives the same start and end time, so its length is unknown",
      "Whether the live `GET /models` response dropped `pricing` on 4 October 2026 was not tested. The deduction rests on the published definition, its changelog and the CLI release of 5 October",
      "The privacy policy (21 December 2021), the DPA (6 October 2026) and the guides disagree on how long ingested media and rendered outputs are kept",
      "The Shotstack guides carry instructions addressed to AI agents, such as a tip to update the CLI and skill before starting. We recorded them and did not act on them",
      "Popularity uses npm `shotstack-sdk` (1,211 a week) and PyPI `shotstack-sdk` (326 a week). `@shotstack/cli` had 448 npm downloads in the same week, and the CLI repository has 0 stars",
      "Shotstack names Anthropic as a sub-processor for its Director assistant and its docs example calls the Anthropic SDK. These grades are written by agents on Anthropic's Claude models, by the same checklist as every listing",
      "Payments gives 5 of 20 for onboarding because offline validation and Studio preview links need no key. A stricter reading gives 0"
    ],
    "weaknesses": [
      "API keys have no scopes. One production key and one sandbox key reach the Edit, Serve and Ingest APIs, and key rotation was not found in the docs",
      "Webhook callbacks are not signed, per the webhooks guide, which tells receivers to confirm a render by calling the API",
      "No security.txt, disclosure policy or certification of Shotstack's own was found. The DPA relies on AWS's SOC 2 and ISO 27001 reports",
      "The published API definition dropped the `pricing` object from `GET /models` in release 1.22.0 on 4 October 2026, a minor release with no breaking-change mark",
      "The npm `shotstack-sdk` (0.2.9) and PyPI `shotstack-sdk` (0.2.8) packages were last published in July 2024"
    ],
    "agentNotes": [
      "Fetch `https://shotstack.io/docs/api/api.edit.json` and the conventions guide before writing an edit. Track order is reversed, so the first track renders on top",
      "Render in `stage` first. It is free and watermarked, but AI generation there is charged from the production credit balance",
      "Call `POST /generate/quote` before `POST /generate`, and send an `Idempotency-Key` header on generation. `POST /render` has no idempotency key, so do not resubmit blindly",
      "Do not store the `url` from the render status response. It expires after 24 hours. Use the CDN address built from `owner` and the render id",
      "On a 429, wait for the 60-second window to reset and retry with backoff. Limits are per API key, 300 a minute on the Edit API in production"
    ],
    "recheck": "https://www.anchorterminal.com/builders/#disputes"
  },
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-09",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  }
}
