Skip to content
TierGauge

Public API

Read-only JSON endpoints.

Every page on TierGauge is also available as JSON. Schema-pinned (every endpoint validated on every build), CORS-open, cached for 10 minutes, and CC BY 4.0 licensed with attribution.

Endpoints
7
Per-tool feeds
37
Per-category feeds
21
Cache window
10 min

Endpoints

Every endpoint returns JSON with `Content-Type: application/json; charset=utf-8` and the `Cache-Control: public, max-age=600, must-revalidate` header. Each response embeds its own `$schema` URL.

Full feed: every tool we track, with editorial fields, plans, prices, limits, included and missing features, source URLs and capture timestamps. Index-style.

Top-level keys
feed_version, generated_at, tools[], per_tool_endpoints[]
Shape
{ feed_version, generated_at, count, tools: Tool[],
  per_tool_endpoints: string[] }

Per-tool feed: a single Tool with the full editorial + plan payload. One endpoint per slug; the index feed lists them all in `per_tool_endpoints`.

Top-level keys
feed_version, generated_at, tool
Shape
{ feed_version, generated_at, tool: Tool }

Per-category feed: all tools whose primary or secondary category matches the slug, ranked the same way as `/best/<category>`. One endpoint per category.

Top-level keys
feed_version, generated_at, category, tools[]
Shape
{ feed_version, generated_at, category, tools: Tool[] }

Pricing-change events: each entry is a captured anchor-price change from the weekly scrape. Empty until the cron has run with real changes; the URL is stable so consumers can subscribe-by-polling.

Top-level keys
feed_version, generated_at, count, events[]
Shape
{ feed_version, generated_at, count, events: PriceChange[] }

Coverage gaps: tools referenced by something we DO track (via `alternatives`) but not yet seeded into the spine. Mirrors the data on /coverage. Sorted by reference count, descending.

Top-level keys
feed_version, generated_at, tools_tracked, gap_count, total_references, gaps[]
Shape
{ tools_tracked, gap_count, total_references,
  gaps: { slug, reference_count, referenced_by[] }[] }

Per-tool freshness: when each tool was last verified, bucketed into fresh / due / stale tiers aligned with the weekly scrape cadence. Mirrors /freshness. Sorted stalest-first.

Top-level keys
feed_version, generated_at, thresholds, buckets, tools[]
Shape
{ thresholds: { fresh_days, stale_days },
  buckets: { fresh, due, stale },
  tools: { slug, name, last_verified, age_days, staleness }[] }

Per-tool most-recent scrape attempt: outcome, plans found, warnings, error message on failure, plus cumulative attempt count. Pairs with /api/freshness.json (verified-data staleness) and /api/coverage.json (missing alternatives) so external monitors get three independent signals on data health.

Top-level keys
feed_version, generated_at, tools_with_runs, total_warnings_last_run, last_run_outcome_counts, runs[]
Shape
{ tools_with_runs, total_warnings_last_run,
  last_run_outcome_counts: { ok?, stale-preserved?, ... },
  runs: { slug, name, attempts,
    latest: null | { run_at, outcome, plans_found?, warnings?, error? } }[] }

Per-tool and per-category catalog

We currently track 37 tools and 21 categories. Each has its own dedicated endpoint:

Per-tool (37)

Per-category (21)

RSS

Pricing changes are also published as a standard RSS 2.0 feed at /changes.xml . Subscribe in any reader for push-style updates instead of polling the JSON endpoint.

License and attribution

All endpoints are CC BY 4.0 with attribution to TierGauge. Linkbacks to https://tiergauge.com in derivative works are appreciated.

Pricing data is scraped from official vendor pages and merged with editorial. We try to keep it accurate, but always confirm with the vendor before purchasing. See Methodology for full details.