{
  "name": "Pricing State API",
  "description": "Closed catalog of public SaaS and cloud pricing pages, grouped into two named sets (inference and devtools). Each listed vendor is fetched on a ~6 hour schedule in a real browser, extracted into one JSON shape (plan names, prices, currency, billing period, printed price text, features when present, snapshot time), and diffed for detected plan/price/billing-period changes. The paid unit is the set change feed, GET /api/sets/{set}/changes: 0.01 USDC on Base via x402 v2, charged only when a change was recorded after your since cursor, and free when the window is empty. Per-slug snapshot and changes calls remain 0.01 USDC each. Not a live scrape-any-URL service and not unpublished or negotiated rates. Discover sets and slugs free at GET /api/sets and GET /api/monitors. No API key.",
  "url": "https://pricing-state-api.replit.app",
  "baseUrl": "https://pricing-state-api.replit.app/api",
  "protocol": "rest+x402",
  "contact": {
    "name": "Pricing State API",
    "email": "pricingstate@proton.me",
    "url": "https://pricing-state-api.replit.app",
    "github": "https://github.com/xs10chill"
  },
  "payment": {
    "protocol": "x402",
    "version": 2,
    "scheme": "exact",
    "pricePerCall": "0.01",
    "currency": "USDC",
    "network": "Base",
    "chainId": "eip155:8453",
    "payTo": "0x66DB4da77742BEdb5CafFdA3C496D3aE8F837368",
    "apiKeyRequired": false,
    "challengeHeader": "PAYMENT-REQUIRED",
    "payWithHeader": "PAYMENT-SIGNATURE",
    "discovery": "https://pricing-state-api.replit.app/.well-known/x402",
    "docs": "https://x402.org"
  },
  "endpoints": {
    "free": [
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/monitors",
        "description": "Free catalog. Returns every slug plus enabled, checkIntervalMinutes, lastCheckedAt, lastStatus, lastError, lastChangeAt. Start here. lastChangeAt tells you whether the paid changes endpoint has any history."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/sets",
        "description": "Free index of the two named sets (inference, devtools): members, lastChangeAt, latestChangeAt, changesAvailable. No plan rows or prices. GET /api/sets/{set} is the weekly silence check."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/sets/inference",
        "description": "Free view of the inference set: openai-api, claude, gemini-api, mistral, together, deepseek, cursor."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/sets/devtools",
        "description": "Free view of the devtools set: twenty developer and team tools. See llms.txt for the list."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/healthz",
        "description": "Service health and data freshness."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/llms.txt",
        "description": "Primary agent guide. Read this before paying."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/status",
        "description": "Human-readable status page (HTML)."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/openapi.yaml",
        "description": "OpenAPI 3 contract (YAML)."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/openapi.json",
        "description": "OpenAPI 3 contract (JSON)."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/samples/paid-snapshot.json",
        "description": "Dated free sample of a paid snapshot. Not live pricing."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/samples/paid-set-changes.json",
        "description": "Dated free sample of a paid set change feed. Not live pricing."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/.well-known/x402",
        "description": "Payment and resource-index card for this service."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/.well-known/x402-resources",
        "description": "Resource-server card listing paid resources and their x402 accept terms."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/.well-known/x402-catalog.json",
        "description": "Free list of one snapshot URL and one changes URL per enabled slug, generated from the live catalog. No payment fields."
      }
    ],
    "paid": [
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/sets/inference/changes",
        "price": {
          "amount": "0.01",
          "currency": "USDC"
        },
        "description": "Paid 0.01 USDC, and only when there is something to deliver. Changes recorded across every member of a named set (inference or devtools) after your since cursor, newest first, each with the slug, detection time, source page and the same change object the per-slug endpoint returns. An empty window is answered free (charged false) and never reaches this paywall. Public list prices only; not negotiated rates."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/sets/devtools/changes",
        "price": {
          "amount": "0.01",
          "currency": "USDC"
        },
        "description": "Paid 0.01 USDC, and only when there is something to deliver. Changes recorded across every member of a named set (inference or devtools) after your since cursor, newest first, each with the slug, detection time, source page and the same change object the per-slug endpoint returns. An empty window is answered free (charged false) and never reaches this paywall. Public list prices only; not negotiated rates."
      },
      {
        "method": "POST",
        "url": "https://pricing-state-api.replit.app/api/watches",
        "price": {
          "amount": "0.01",
          "currency": "USDC"
        },
        "description": "Paid 0.01 USDC. Registers one https webhook for one named set (inference or devtools). When a member of the set records a change, a notice {set, slug, lastChangeAt, changesUrl} is POSTed to the destination. The notice carries no prices or diff; changesUrl is the paid set change feed. Invalid set or destination is refused with 4xx before charge."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/monitors/{slug}",
        "price": {
          "amount": "0.01",
          "currency": "USDC"
        },
        "description": "Paid 0.01 USDC. Structured snapshot for one catalog slug: plan names, prices, currency, billing period, price text, features when present, snapshot time. Unknown slug returns 404 and a monitor with no first successful check returns 503, both before charge."
      },
      {
        "method": "GET",
        "url": "https://pricing-state-api.replit.app/api/monitors/{slug}/changes",
        "price": {
          "amount": "0.01",
          "currency": "USDC"
        },
        "description": "Paid 0.01 USDC. Detected plan, price, and billing-period changes for one catalog slug, newest first, with a paging cursor. Empty array means nothing has been recorded yet, not that the vendor’s price has been stable forever. Check free lastChangeAt first."
      }
    ]
  },
  "documentation": {
    "openapi": "https://pricing-state-api.replit.app/api/openapi.json",
    "openapiYaml": "https://pricing-state-api.replit.app/api/openapi.yaml",
    "llmsTxt": "https://pricing-state-api.replit.app/llms.txt",
    "sample": "https://pricing-state-api.replit.app/samples/paid-snapshot.json",
    "setChangesSample": "https://pricing-state-api.replit.app/samples/paid-set-changes.json",
    "status": "https://pricing-state-api.replit.app/api/status",
    "landing": "https://pricing-state-api.replit.app",
    "privacy": "https://pricing-state-api.replit.app/privacy"
  }
}