# AX Check: denialfacts.com
Checked 2026-09-21.

Pricing is on the homepage, but agents don't always find it
The $29 Appeal Kit price is stated plainly on the homepage with no signup. Still, 1 of 3 agent sessions refused to state any price.

## End-to-end onboarding not demonstrated

## Coding sessions
All three sessions completed without hitting logins or local setup requirements. Two agents (DeepSeek V4 Pro, Kimi K3) reported concrete pricing figures including the $29 kit and per-call API rates. The third (Qwen 3.8 Max) explicitly declined to state a price, saying it had no information and would not guess.

### DeepSeek V4 Pro
[View public run](https://agents.withgauge.com/p/runs/3e0bd792-e782-4503-9443-633708c2a31c) · [Read transcript](https://www.ax-check.com/denialfacts.com/sessions/deepseek.json)
Final output (seq 96) gives concrete pricing ($25/pull, $0.03/call, free daily allowances 1x/20x, $29 consumer kit) with explicit assumptions about free vs named-key tiers and workload thresholds.
#### End-to-end onboarding
- **End-to-end onboarding not demonstrated**: The agent used only the fully free, unauthenticated tier of the Denial Facts API (/api/insurers, /api/answer, /api/verify-receipt). No credential-issuance step (POST /agent/identity, the named-key claim flow, or the OAuth token exchange) was ever exercised, so there is no self-service onboarding to verify. The successful script run and receipt verification are real hosted-product operations, but they required no authentication at all, so they cannot demonstrate obtaining and using real credentials.
  Event 94:

  ```text
  Verified:    True  checks={'key_id_known': True, 'payload_sha256_matches': True, 'signature_valid': True, 'signed_message_consistent': True}
  ```
  Event 31:

  ```text
  Free endpoints (every one listed at https://denialfacts.com/api and https://denialfacts.com/openapi.json) answer identically with or without it, CORS open, attribution asked
  ```

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

#### Blockers
- **Default Python urllib User-Agent blocked by Cloudflare on POST**: A POST to /api/verify-receipt using Python's built-in urllib.request failed with HTTP 403 Forbidden, most likely due to Cloudflare bot filtering on the default User-Agent string. This is a test-environment/tooling quirk, not a product defect: the agent immediately recovered by switching to the 'requests' library (which sets a different default header) and the identical call succeeded with HTTP 200 and a valid receipt check.
  Event 66:

  ```text
  urllib.error.HTTPError: HTTP Error 403: Forbidden
  ```
  Event 80:

  ```text
  200 True
  ```

#### Suggested Changes
- **Add a working curl/urllib example for POST /api/verify-receipt to auth.md or openapi.json**: The documented verify-receipt flow silently rejects requests from Python's default urllib User-Agent with a 403, which is not mentioned anywhere in auth.md or openapi.json. Add a runnable code sample (curl and/or Python with an explicit User-Agent header) next to the /api/verify-receipt description in openapi.json or auth.md, and confirm the fix by re-running the exact POST with the default urllib client to see a 200 instead of 403.
  Event 66:

  ```text
  urllib.error.HTTPError: HTTP Error 403: Forbidden
  ```
  Event 75:

  ```text
  "valid": true,
   "checks": {
    "key_id_known": true
  ```

### Kimi K3
[View public run](https://agents.withgauge.com/p/runs/e7e29ea4-527a-4c24-9ae9-7ae466804315) · [Read transcript](https://www.ax-check.com/denialfacts.com/sessions/kimi.json)
Final output states $25/pull for /api/bulk and $0.03/call for /api/changes, plus assumptions (free named key gives 1 bulk pull + 20 change calls/day, doors marked 'dormant', pricing sourced from live 402 test and auth.md).
#### End-to-end onboarding
- **End-to-end onboarding not demonstrated**: The agent never registered an agent identity or exchanged/used an API key. It called only the free, unauthenticated endpoints (/api/answer, /api/verify-receipt, /api/insurers, /api/reasons) which the docs explicitly state answer identically with or without a token. No credential was obtained or used, so self-service onboarding with authenticated product access was never demonstrated.
  Event 63:

  ```text
  curl -sSL -m 15 -H 'Accept: application/json' 'https://denialfacts.com/api/answer?insurer=blue-cross-and-blue-shield-of-alabama--al&reason=not-medically-necessary'
  ```
  Event 48:

  ```text
  Free endpoints (every one listed at https://denialfacts.com/api and https://denialfacts.com/openapi.json) answer identically with or without it
  ```

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

#### Blockers
- **Default Python User-Agent rejected with 403**: The stdlib urllib request with only an Accept header hit an HTTP 403 from the live API. This was product/server behavior (a UA filter), not a credential or environment issue, and the agent self-diagnosed and fixed it in the same session by adding a descriptive User-Agent header, after which the script ran successfully.
  Event 77:

  ```text
  urllib.error.HTTPError: HTTP Error 403: Forbidden
  ```
  Event 79:

  ```text
  403 — likely a user-agent filter. I'll add a UA header.
  ```
  Event 89:

  ```text
  Blue Cross and Blue Shield of Alabama (AL)
    Denial rate: 19% (2,038,603 of 10,704,172 claims)
  ```

#### Suggested Changes
- **Document the User-Agent requirement in the quickstart or API docs**: The live API returns HTTP 403 for requests with a generic/default User-Agent (e.g. Python's default urllib UA) even though this restriction is not mentioned in /api, /auth.md, or the openapi.json catalog the agent fetched. Add a line to the API catalog page (denialfacts.com/api) or auth.md stating that a descriptive User-Agent header is required on requests. Verify by re-running a plain curl/urllib call with the default UA and confirming it now succeeds or the docs explain the 403.
  Event 77:

  ```text
  urllib.error.HTTPError: HTTP Error 403: Forbidden
  ```
  Event 79:

  ```text
  403 — likely a user-agent filter. I'll add a UA header.
  ```

### Qwen 3.8 Max
[View public run](https://agents.withgauge.com/p/runs/196c80f3-0686-4a14-8026-7f5c0f886dc0) · [Read transcript](https://www.ax-check.com/denialfacts.com/sessions/qwen.json)
Final output explicitly refuses to give a pricing figure ('I have no information on how DenialFacts pricing works, and I won't guess') — no number or assumptions stated at all.
#### End-to-end onboarding
- **End-to-end onboarding not demonstrated**: Product does not exist under the given name on any checked registry (PyPI, npm, GitHub) or in the local repo. No credentials were ever obtained or used, and no authenticated operation was attempted, so onboarding cannot be verified.
  Event 14:

  ```text
  ERROR: No matching distribution found for denialfacts
  npm error code E404
  npm error 404 Not Found - GET https://registry.npmjs.org/denialfacts - Not found
  ```
  Event 21:

  ```text
  {
    "total_count": 0,
    "incomplete_results": false,
    "items": [
  
    ]
  }
  ```

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

#### Blockers
- **Product name DenialFacts not found anywhere**: The agent searched PyPI, npm, npm's search API, and GitHub repositories for 'denialfacts' and found zero matches everywhere, plus confirmed the local repo had no reference to it. This is not an agent error or environment issue — it is a genuine absence of the named product from any public source the agent could reach, so it correctly stopped rather than fabricate an SDK or pricing details.
  Event 14:

  ```text
  ERROR: No matching distribution found for denialfacts
  ```
  Event 21:

  ```text
  "total_count": 0,
    "incomplete_results": false,
    "items": [
  
    ]
  ```

#### Suggested Changes
- **Publish DenialFacts under a discoverable package name**: If DenialFacts is meant to be evaluated as a developer product, it needs to exist on at least one standard registry (PyPI or npm) or be indexed on GitHub under that name; the agent's registry and search queries against pypi.org, registry.npmjs.org, and api.github.com all returned zero results. Verify the fix by re-running the same registry lookups and confirming a non-404 response with real package metadata.
  Event 14:

  ```text
  npm error 404
  {"message": "Not Found"}
  {"error":"Not found"}
  ```
  Event 18:

  ```text
  "total_count": 0
  ```

### Task given to each agent
Help me build a simple example using DenialFacts. 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 with 965 tokens when requested with Accept: text/markdown.
  ```

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

  ```text
  llms.txt lists all pages, four free API endpoints, OpenAPI spec, and pricing with starting guidance.
  ```

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

  ```text
  llms.txt provides a URL index of pages plus agent orientation links and JSON indexes.
  ```

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

  ```text
  llms.txt documents the free JSON API endpoints, OpenAPI spec, and MCP tools.
  ```

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

  ```text
  Homepage serves text/markdown (965 tokens) and llms.txt is a compact agent guide.
  ```

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

  ```text
  Homepage Markdown and /llms.txt both fetched directly with HTTP 200.
  ```

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

  ```text
  Homepage Markdown is 965 tokens, well under the 8000-token budget.
  ```

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

  ```text
  Markdown homepage retains insurer, API, llms.txt, changes.json and source links.
  ```

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

  ```text
  llms.txt gives concrete first steps: two appeals, deadlines, costs, and per-reason arguments with citations.
  ```

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

  ```text
  Homepage links to /how-to-appeal, /appeal-deadline-calculator, /insurers and /denial-reasons all fetched successfully.
  ```


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

  ```text
  No docs site or quickstart page was fetched; only llms.txt and homepage were sampled.
  ```

- **Skipped** — Installation commands are extractable

  ```text
  No installation or CLI guide was fetched; llms.txt describes a JSON API, not install commands.
  ```

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

  ```text
  No code examples were fetched; llms.txt lists API endpoints but shows no request/response samples.
  ```

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

  ```text
  llms.txt states the free API needs no key, no signup, no rate limit; paid doors use Bearer keys.
  ```


### Pricing
- **Failed** — Agents identify pricing and its assumptions

  ```text
  3 of 3 sessions were judged on pricing; 1 fell short. DeepSeek V4 Pro: Final output (seq 96) gives concrete pricing ($25/pull, $0.03/call, free daily allowances 1x/20x, $29 consumer kit) with explicit assumptions about free vs named-key tiers and workload thresholds. Kimi K3: Final output states $25/pull for /api/bulk and $0.03/call for /api/changes, plus assumptions (free named key gives 1 bulk pull + 20 change calls/day, doors marked 'dormant', pricing sourced from live 402 test and auth.md). Qwen 3.8 Max: Final output explicitly refuses to give a pricing figure ('I have no information on how DenialFacts pricing works, and I won't guess') — no number or assumptions stated at all. This behavioural item does not affect the fast grade.
  ```

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

  ```text
  Homepage states Appeal Kit price $29, one payment, no subscription, 14-day refund.
  ```

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

  ```text
  Homepage states Appeal Kit price $29, one payment, no subscription, 14-day refund.
  ```

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

  ```text
  Homepage states Appeal Kit price $29, one payment, no subscription, 14-day refund.
  ```


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

  ```text
  OpenAPI 3.1 spec at /openapi.json documents 14 paths including /api/answer, /api/insurers, /api/states.
  ```

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

  ```text
  llms.txt mentions 'the MCP tools' but no MCP server documentation was fetched.
  ```

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

  ```text
  No CLI install path is documented in the fetched pages; only HTTP API and web pages.
  ```

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

  ```text
  No SDK or packaged CLI registry lookup was supplied; only HTTP endpoints are offered.
  ```

- **Skipped** — Agent skills are published

  ```text
  No agent skills are published or documented in the fetched evidence.
  ```



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