Skip to content

feat(agent-readiness): pricing-journey gaps — pricing absent from well-known/OpenAPI discovery chain, no /docs/pricing or guess-slug redirects, commerce ops missing from api-reference, overage policy undocumented #4854

Description

@koala73

Context

Second agent-journey run (Claude Code · Sonnet 4.6, intent: "I'm evaluating this product. What does it cost?"): 44 steps / 155s / 848k tokens ($0.60) to reconstruct pricing that worldmonitor.app/pricing.md answers in one fetch. Reliability 70%, link-following 61%. Sibling of #4850 (signup journey); the UA-403 root cause is tracked there.

The core failure: pricing is only discoverable via llms.txt (line 31: "Keys, plans & limits: https://worldmonitor.app/pricing.md"). This journey entered through the other discovery chain — Link headers → .well-known/api-catalogagent-skills/index.jsonserver-card.jsonopenapi.yaml — and none of those surfaces mention pricing at all (verified by grep: zero hits in all four). So the agent guessed doc slugs and endpoint paths, and every guess 404'd.

Verified failure inventory (2026-07-05, descriptive UA)

Path the agent tried Status Reality
/docs/pricing.md, /docs/tiers.md, /docs/plans.md 404 content lives at root /pricing.md (200, text/markdown)
/docs/rate-limit.md, /docs/rate-limits.md 404 real page is /docs/usage-rate-limits (+ working .md twin)
/docs/mcp-api-key.md 404 covered by /docs/usage-auth
/docs/api-reference/commerceservice/getproductcatalog(.md) 404 no CommerceService in the OpenAPI set — commerce ops exist only as prose in docs/api-commerce.mdx
api.worldmonitor.app/api/plans 403 (its UA) actually 404 with a good UA — WAF masks "missing" as "blocked" (#4850 item 1)

Also: public/pricing.md says nothing about overage/429 behavior — the agent had to infer "429, no auto-billing" from a rate-limit-header mention.

Fixes

  1. Put pricing on the discovery chain agents actually follow. Add /pricing.md + GET /api/product-catalog references to: .well-known/api-catalog linkset, server-card.json, agent-skills/index.json, and the root openapi.yaml info.description. Optionally a Link header entry alongside the existing rel set in vercel.json.
  2. docs/pricing.mdx ("Plans & pricing") in the Mintlify nav — gives /docs/pricing + free .md twin. Keep tier copy generated/derived from convex/config/productCatalog.ts or link-only, to avoid the pro-bundle-freshness drift class (process: catalog marketingFeatures changes silently ship stale /pro copy (freshness gate misses convex→pro-test; copy triplicated) #4575/feat(welcome): any-stack builders story — hero cue, install terminal, SDK pricing copy #4845).
  3. docs.json redirects (block already exists) for natural guesses: planspricing, tierspricing, rate-limit/rate-limitsusage-rate-limits, mcp-api-keyusage-auth.
  4. CommerceService in the OpenAPI/api-reference set — at minimum GET /api/product-catalog (public, keyless) as docs/api/CommerceService.openapi.yaml + docs.json api-reference group, so the canonical Mintlify path the agent guessed actually exists.
  5. "Limits & overage" section in pricing.md (mirror pointer in usage-rate-limits): hard 429 + Retry-After, no auto-billing today, upgrade path. Word it to stay true once the feat(api): add Dodo overage event contract #4791 overage event contract lands.

What the journey report got wrong (for the record)

Dup pre-flight: gh-axi search issues for pricing discoverability / docs redirects / CommerceService openapi → no existing coverage beyond #4850's overlap.

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-readinessAgent-discoverability standards (well-known, RFC 8288/9727/9728, WebMCP, x402, etc.)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions