# AX Check: freemius.com
Checked 2026-09-19.

Freemius docs and pricing are fully readable without login.
All 20 of 23 checked items pass: docs, install steps, and pricing tables load in plain text with no interaction needed.

## Onboarding needs a login

## Coding sessions
Three independent sessions tackled the same task. Kimi K3 and Qwen 3.8 Max both completed it, each producing a clear revenue-share pricing table with stated assumptions like WordPress surcharges and gateway fees. DeepSeek V4 Pro did not finish.

### DeepSeek V4 Pro
[View public run](https://agents.withgauge.com/p/runs/a686a44c-ad06-4eef-9a75-b190f692dc68) · [Read transcript](https://www.ax-check.com/freemius.com/sessions/deepseek.json)

#### End-to-end onboarding
- **Onboarding needs a login**: The agent explored the Freemius REST API and SDKs but never obtained real developer credentials (public/secret API keys) needed to authenticate. Every authenticated endpoint call used placeholder IDs (1234/5678) with no auth headers and returned 401 Unauthorized. No product dashboard signup or key retrieval occurred; the session ends with the agent still trying to construct example requests without any credential.
  Event 127:

  ```text
  "error":{"type":"UnauthorizedAccess","message":"You must use FS Authorization to access the asset.","code":"unauthorized_access","http":401
  ```
  Event 132:

  ```text
  [GET] /v1/developers/1234/plugins/5678/plans.json -> 401
  ```
  Event 51:

  ```text
  1. Go to the [Freemius Developer Dashboard](https://dashboard.freemius.com/).\n2. Open the Settings page of the relevant product.\n3. Click the API & Keys tab.\n4. Copy the API Bearer Authorization Token from the UI.
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No self-serve way to get API credentials**: All product-scoped Freemius API endpoints require a signed Bearer token or FS-signature tied to a real developer account's public/secret keys, obtainable only via the Freemius Developer Dashboard UI (a human login/signup flow). Since the sandbox has no such account, every authenticated call with placeholder IDs returned 401 Unauthorized. This is expected product behavior (API requires account credentials), not a bug, but it fully blocks any real create/read operation in this session.
  Event 127:

  ```text
  "message":"You must use FS Authorization to access the asset.","code":"unauthorized_access","http":401
  ```
  Event 51:

  ```text
  1. Go to the [Freemius Developer Dashboard](https://dashboard.freemius.com/).\n2. Open the Settings page of the relevant product.\n3. Click the API & Keys tab.\n4. Copy the API Bearer Authorization Token from the UI.
  ```
- **Official Node SDK is unmaintained / partially broken**: The freemius-node-sdk README states only the developer-scope examples work, and the code itself has commented-out or clearly broken functions (e.g., downloadSpecificPluginZip references an undefined variable 'e', hardcoded Windows file paths). This is an agent-observed product/tooling gap in the officially linked SDK repo, not a test-environment issue.
  Event 44:

  ```text
  Note: Only `developer-examples.js` currently contain working examples.
  ```
  Event 86:

  ```text
  function downloadSpecificPluginZip(tag_id) {
    developer.Api('/plugins/' + FS__API_PLUGIN_ID + '/tags/' + tag_id + '.zip?is_premium=false', 'GET', [], [], function (data) {
      logResponse(e, developer, false);
  ```

#### Suggested Changes
- **Add a lightweight/sandbox API key option for evaluation**: Currently every authenticated Freemius API endpoint (e.g. /v1/developers/{id}/plugins/{id}/plans.json) demands a signed key from a full Developer Dashboard account, verified by the repeated 401 'You must use FS Authorization' responses in this session. Consider offering a scoped sandbox/demo key (similar to Stripe's test-mode keys) so a developer can exercise pricing/plan endpoints without first completing full account signup. Verify by having a fresh agent fetch a sandbox key and successfully call GET /v1/products/{id}/pricing.json.
  Event 127:

  ```text
  "message":"You must use FS Authorization to access the asset.","code":"unauthorized_access","http":401
  ```
- **Fix or remove the broken freemius-node-sdk example function**: In examples/developer-examples.js on the Freemius/freemius-node-sdk GitHub repo, downloadSpecificPluginZip references an undefined variable 'e' inside its callback and hardcodes a Windows-only file path, which will throw at runtime. Either patch the callback parameter name and remove the hardcoded path, or delete the broken example, and confirm by running the example script without errors.
  Event 86:

  ```text
  function downloadSpecificPluginZip(tag_id) {
    developer.Api('/plugins/' + FS__API_PLUGIN_ID + '/tags/' + tag_id + '.zip?is_premium=false', 'GET', [], [], function (data) {
      logResponse(e, developer, false);
      // TODO: Need to create the zip ourselves? Put contents into a file.
      fs.writeFileSync('C:/Users/dvgwy/Desktop/aaa/plugins/zippy.zip', data, 'binary');
  ```

### Kimi K3
[View public run](https://agents.withgauge.com/p/runs/ea4b8105-dddc-468d-9134-5d975555c189) · [Read transcript](https://www.ax-check.com/freemius.com/sessions/kimi.json)
Final output gives a tiered monthly-gross revenue-share table (4.7%→0.5%) and calls out assumptions: per-bracket tiering, +2.3% WordPress surcharge, gateway fees extra.
#### End-to-end onboarding
- **Onboarding needs a login**: The agent never obtained real Freemius credentials. It searched the sandbox environment for existing keys, found none, and wrote example scripts that explicitly run in a 'dry-run' mode because no product/API keys were present. It stated it could not run the live mode without a human first creating a product in the Freemius Developer Dashboard and pasting keys into .env. No authenticated call to the actual Freemius API was ever made — only public, unauthenticated pricing-page scraping and npm registry lookups occurred.
  Event 11:

  ```text
  env | grep -i freemius; echo "exit: $?"
  ```
  Event 44:

  ```text
  No Freemius credentials found — running in DRY-RUN mode.
  ```
  Event 46:

  ```text
  there are no Freemius credentials in this environment (needs a product created in the Freemius Developer Dashboard → `FREEMIUS_PRODUCT_ID`, `FREEMIUS_API_KEY`, `FREEMIUS_SECRET_KEY`, `FREEMIUS_PUBLIC_KEY`)
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No Freemius API credentials available in sandbox**: The session has no pre-provisioned Freemius product ID, API key, secret key, or public key, and there is no self-service way to generate them without a human logging into the Freemius Developer Dashboard. This is a normal credential/login requirement, not a product defect — the agent correctly identified it and stopped short of live API calls rather than faking success.
  Event 11:

  ```text
  env | grep -i freemius; echo "exit: $?"
  ```
  Event 44:

  ```text
  No Freemius credentials found — running in DRY-RUN mode.
  ```
- **Webhook server requires a public URL, so it was intentionally not started**: The agent correctly declined to boot the webhook-server.mjs long-running listener since the task instructions said not to start local service stacks or wait on long-running commands, and a webhook endpoint needs a publicly reachable URL to receive real events anyway. This is an agent self-restriction following the prompt's constraints, not a failure.
  Event 46:

  ```text
  Per your constraint, I didn't spin up the webhook server (it would need a public URL to receive events) — the code is ready when you want it.
  ```

#### Suggested Changes
- **Add a sandbox credential path to the SDK quickstart**: The @freemius/sdk README's initialization section only describes retrieving productId/apiKey/secretKey/publicKey from the live Developer Dashboard, with no sandbox or trial credential option for evaluators without an existing paid product. Add a documented way to get temporary sandbox keys directly from docs so a new developer can call pricing.retrieve() or checkout.create() without dashboard signup friction. Check by having a new developer follow the doc and successfully call an authenticated endpoint within minutes.
  Event 29:

  ```text
  Go to the
  [Freemius Developer Dashboard](https://freemius.com/help/documentation/saas-sdk/js-sdk/installation/#retrieving-keys-from-the-developer-dashboard))
  and obtain the following:
  ```

### Qwen 3.8 Max
[View public run](https://agents.withgauge.com/p/runs/2b6ce71b-4711-40f8-a323-4aa367486e1e) · [Read transcript](https://www.ax-check.com/freemius.com/sessions/qwen.json)
Final output gives a pricing table (4.7% SaaS, 7.0% WordPress, ~3.5% gateway pass-through) with explicit assumptions: revenue-share model, plan type (SaaS vs WordPress/Templates), volume tiers above $50k/month, and $100 minimum payout.
#### End-to-end onboarding
- **Onboarding needs a login**: Agent installed @freemius/sdk and exercised its HMAC signing and network transport against the live api (fast-api.freemius.com), but only had placeholder productId/apiKey/secretKey/publicKey. The API returned 401 Unauthorized. Agent confirmed no sandbox/demo credential path exists; real keys require human account creation and manual product/plan setup in the Freemius dashboard (KYC-gated). No authenticated operation against the real product was completed.
  Event 89:

  ```text
  SyntaxError: The requested module '@freemius/sdk' does not provide an export named 'default'
  ```
  Event 114:

  ```text
  HTTP 401 -> {"path":":/plugins/plugin_id/plans.json","error":{"type":"UnauthorizedAccess","message":"Invalid Authorization header.","code":"unauthorized_access"
  ```
  Event 129:

  ```text
  Those keys exist **only** inside a human-created Developer Dashboard (Settings → API & Keys). There is no sandbox key, trial key, or unauthenticated demo path — I checked the API root, the docs, and the SDK's own validation.
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No self-service credentials or sandbox for the SaaS SDK**: The @freemius/sdk requires productId, apiKey, secretKey, and publicKey to make any authenticated call. These are only issued after a human creates a Freemius account (Merchant of Record KYC) and configures at least one product/plan in the web dashboard. This is expected product behavior (credentials gated behind account signup), not an agent error, but it fully prevented any live, verifiable integration.
  Event 114:

  ```text
  HTTP 401 -> {"path":":/plugins/plugin_id/plans.json","error":{"type":"UnauthorizedAccess","message":"Invalid Authorization header.","code":"unauthorized_access"
  ```
  Event 129:

  ```text
  Those keys exist **only** inside a human-created Developer Dashboard (Settings → API & Keys). There is no sandbox key, trial key, or unauthenticated demo path — I checked the API root, the docs, and the SDK's own validation.
  ```
- **Empty repo with no app to integrate into**: The sandbox repository contained only a .gitignore and an initial commit, with no PHP/Composer tooling installed. The official AI Agent Skills workflow assumes an existing JavaScript backend and pre-configured Freemius plans to read via API before writing code, neither of which existed here. This is a test-environment limitation rather than a product defect.
  Event 7:

  ```text
  /sandbox/repo
  total 16
  drwxr-xr-x 3 root root 4096 Sep 18 08:00 .
  drwxr-xr-x 8 root root 4096 Sep 18 08:00 .git
  -rw-r--r-- 1 root root 408 Sep 18 08:00 .gitignore
  ```
  Event 16:

  ```text
  php        NOT INSTALLED
  composer   NOT INSTALLED
  wp         NOT INSTALLED
  ```

#### Suggested Changes
- **Offer a sandbox or test-mode API key for the JS SDK**: On the Settings → API & Keys page referenced in skills.md and the SDK README, provide a way to generate limited sandbox credentials without full Merchant-of-Record signup, so developers evaluating the SDK can complete a real authenticated call (e.g., plan.list) before committing to full onboarding. Verify by confirming a fresh, non-KYC'd account can obtain a key that returns 200 from an endpoint like /v1/products/{id}/plans.json instead of 401.
  Event 114:

  ```text
  HTTP 401 -> {"path":":/plugins/plugin_id/plans.json","error":{"type":"UnauthorizedAccess","message":"Invalid Authorization header.","code":"unauthorized_access"
  ```

### Task given to each agent
Help me build a simple example using Freemius. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.

No product credentials were supplied and no purchases were authorized.

## Score: A · 100/100 (provisional)
Grades come from completed site checks. Coding sessions and skipped checks do not affect the score.

### Clarity
- **Pass** — Homepage answers Markdown requests

  ```text
  Homepage returned text/markdown when requested with Accept: text/markdown.
  ```

- **Pass** — llms.txt provides an actionable documentation index

  ```text
  llms.txt at /llms.txt organizes docs by topic with many actionable documentation links.
  ```

- **Pass** — llms.txt provides navigation guidance

  ```text
  llms.txt groups links under clear section headings, giving navigation guidance.
  ```

- **Pass** — llms.txt mentions offered API, MCP, and skills

  ```text
  llms.txt links API docs, OpenAPI spec, and AI Agent Skills.
  ```

- **Pass** — A compact guide representation exists

  ```text
  Freemius publishes a standalone Markdown guide at /help/documentation/ai/skills/ with install steps.
  ```

- **Pass** — A focused guide is directly retrievable

  ```text
  The AI Agent Skills page is directly retrievable as text/markdown with full workflow.
  ```

- **Pass** — Equivalent instructions fit a token budget

  ```text
  Skills guide is 3017 tokens, well under the 8000-token budget.
  ```

- **Pass** — Product-docs links survive format changes

  ```text
  Homepage Markdown preserves docs links to AI skills, API, and documentation pages.
  ```

- **Pass** — The compact guide is independently actionable

  ```text
  Skills page gives install commands, plan setup, integration prompts, testing and troubleshooting steps.
  ```

- **Pass** — Install and next-step links resolve

  ```text
  Fetched install/next-step links (skills, dashboard, API, docs) returned 200.
  ```


### Onboarding
- **Pass** — Docs lead to a relevant quickstart

  ```text
  llms.txt links Integrating your first product and SaaS/App integration step-by-step guides.
  ```

- **Pass** — Installation commands are extractable

  ```text
  Antigravity CLI guide gives extractable install commands: npx/yarn/pnpm/bun skills add freemius/freemius-ai.
  ```

- **Pass** — Code examples are available without interaction

  ```text
  Antigravity guide shows inline code blocks for install, prompt, and update commands without interaction.
  ```

- **Pass** — Prerequisites and auth boundaries are explicit

  ```text
  Guide states prerequisites (dashboard product, plans) and API key from Settings → API & Keys.
  ```


### Pricing
- **Pass** — Pricing is readable without interaction

  ```text
  Pricing page renders full fee tables and FAQ in plain Markdown without interaction.
  ```

- **Pass** — Prices are stated, not gated

  ```text
  Prices stated: 4.7% rev-share, +2.3% WordPress, 3.5% gateway, progressive tiers.
  ```

- **Pass** — Pricing units and limits are explicit

  ```text
  Units explicit: rev-share %, monthly gross tiers, $100 payout minimum, per-transaction fees.
  ```

- **Pass** — Agents identify pricing and its assumptions

  ```text
  2 of 3 sessions were judged on pricing; 0 fell short. Kimi K3: Final output gives a tiered monthly-gross revenue-share table (4.7%→0.5%) and calls out assumptions: per-bracket tiering, +2.3% WordPress surcharge, gateway fees extra. Qwen 3.8 Max: Final output gives a pricing table (4.7% SaaS, 7.0% WordPress, ~3.5% gateway pass-through) with explicit assumptions: revenue-share model, plan type (SaaS vs WordPress/Templates), volume tiers above $50k/month, and $100 minimum payout. This behavioural item does not affect the fast grade.
  ```


### Activation
- **Pass** — An API reference or OpenAPI spec is reachable

  ```text
  API reference at /help/api/ and OpenAPI spec at api.freemius.com/v1/openapi.json both fetched successfully.
  ```

- **Skipped** — An MCP server is documented and well-formed

  ```text
  No MCP server documentation found in the fetched Freemius documents.
  ```

- **Skipped** — A CLI install path is documented

  ```text
  No CLI install path documented; Freemius is a billing platform, not a CLI tool.
  ```

- **Skipped** — SDK packages resolve on their registries

  ```text
  No registry lookup results for Freemius SDK packages were supplied in the evidence.
  ```

- **Pass** — Agent skills are published

  ```text
  Freemius AI Agent Skills documented with npx skills add freemius/freemius-ai install command.
  ```



[Full report data](https://www.ax-check.com/freemius.com/report.json)
