GET /v1/edge/calibration

freedailytier: freecache 3600sEngine C — Weather × Markets Edge

Reliability table for every weather market class we compute edge signals on: resolved-signal count, predicted-vs-realized by model-probability decile, and whether the class is on the calibration allowlist that gates paid signal payloads. The allowlist is derived from this data on a schedule — never hand-edited — and computed per model_version: a class earns entry on current-version evidence only, with earlier versions' tables kept visible as labeled history. Free forever so you can judge signal quality before paying for signals.

Parameters

None.

Example

curl "https://x402-factory.com/v1/edge/calibration"

Example response

{
  "data": {
    "current_model_version": "stub-model",
    "classes": [
      {
        "market_class": "daily-high-threshold",
        "model_version": "stub-model",
        "current_version": true,
        "n_resolved": 292,
        "allowlisted": true,
        "reason": "calibrated within tolerance on resolved history under the current model version",
        "deciles": [
          {
            "bucket": "0.0–0.1",
            "predicted": 0.05,
            "realized": 0.055,
            "n": 73
          },
          {
            "bucket": "0.2–0.3",
            "predicted": 0.25,
            "realized": 0.26,
            "n": 73
          },
          {
            "bucket": "0.5–0.6",
            "predicted": 0.55,
            "realized": 0.548,
            "n": 73
          },
          {
            "bucket": "0.8–0.9",
            "predicted": 0.85,
            "realized": 0.849,
            "n": 73
          }
        ]
      },
      {
        "market_class": "daily-high-range",
        "model_version": "stub-model",
        "current_version": true,
        "n_resolved": 292,
        "allowlisted": true,
        "reason": "calibrated within tolerance on resolved history under the current model version",
        "deciles": [
          {
            "bucket": "0.0–0.1",
            "predicted": 0.05,
            "realized": 0.055,
            "n": 73
          },
          {
            "bucket": "0.2–0.3",
            "predicted": 0.25,
            "realized": 0.26,
            "n": 73
          },
          {
            "bucket": "0.5–0.6",
            "predicted": 0.55,
            "realized": 0.548,
            "n": 73
          },
          {
            "bucket": "0.8–0.9",
            "predicted": 0.85,
            "realized": 0.849,
            "n": 73
          }
        ]
      },
      {
        "market_class": "precip-any",
        "model_version": "stub-model",
        "current_version": true,
        "n_resolved": 292,
        "allowlisted": true,
        "reason": "calibrated within tolerance on resolved history under the current model version",
        "deciles": [
          {
            "bucket": "0.0–0.1",
            "predicted": 0.05,
            "realized": 0.055,
            "n": 73
          },
          {
            "bucket": "0.2–0.3",
            "predicted": 0.25,
            "realized": 0.26,
            "n": 73
          },
          {
            "bucket": "0.5–0.6",
            "predicted": 0.55,
            "realized": 0.548,
            "n": 73
          },
          {
            "bucket": "0.8–0.9",
            "predicted": 0.85,
            "realized": 0.849,
            "n": 73
          }
        ]
      },
      {
        "market_class": "landfall",
        "model_version": "stub-model",
        "current_version": true,
        "n_resolved": 292,
        "allowlisted": true,
        "reason": "calibrated within tolerance on resolved history under the current model version",
        "deciles": [
          {
            "bucket": "0.0–0.1",
            "predicted": 0.05,
            "realized": 0.055,
            "n": 73
          },
          {
            "bucket": "0.2–0.3",
            "predicted": 0.25,
            "realized": 0.26,
            "n": 73
          },
          {
            "bucket": "0.5–0.6",
            "predicted": 0.55,
            "realized": 0.548,
            "n": 73
          },
          {
            "bucket": "0.8–0.9",
            "predicted": 0.85,
            "realized": 0.849,
            "n": 73
          }
        ]
      },
      {
        "market_class": "wind-threshold",
        "model_version": "stub-model",
        "current_version": true,
        "n_resolved": 60,
        "allowlisted": false,
        "reason": "insufficient history: 60 resolved signals < 200",
        "deciles": [
          {
            "bucket": "0.9–1.0",
            "predicted": 0.9,
            "realized": 0.3,
            "n": 60
          }
        ]
      }
    ],
    "thresholds": {
      "min_n": 200,
      "decile_tolerance": 0.1,
      "min_decile_n": 10
    },
    "window_days": 90,
    "computed_at": "2026-07-18T12:00:00.000Z",
    "note": "Data-derived allowlist over resolved signal history, partitioned by model_version (taxonomy shipped 2026-09-08; v4.1 min-semantics cutover recorded in PROGRESS). Only current-version evidence can admit a class; earlier versions are shown as historical. Recomputed at least daily, never hand-edited. Signals for classes not on the allowlist are suppressed from paid edge payloads and counted in suppressed_by_class."
  },
  "meta": {
    "endpoint": "/v1/edge/calibration",
    "version": "1.0.0",
    "generated_at": "2026-09-13T09:52:15.292Z",
    "freshness": "daily",
    "sources": [
      "kalshi",
      "polymarket",
      "stub-model"
    ],
    "request_id": "req_00000000",
    "docs": "https://x402-factory.com/docs/edge.calibration",
    "data_mode": "live"
  }
}

Response schema (data payload)

{
  "type": "object",
  "properties": {
    "current_model_version": {
      "type": "string",
      "description": "Only evidence recorded under this version can admit a class to the allowlist"
    },
    "classes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "market_class": {
            "type": "string"
          },
          "model_version": {
            "type": "string"
          },
          "current_version": {
            "type": "boolean"
          },
          "n_resolved": {
            "type": "number"
          },
          "allowlisted": {
            "type": "boolean"
          },
          "reason": {
            "type": "string"
          },
          "deciles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "bucket": {
                  "type": "string"
                },
                "predicted": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "realized": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "n": {
                  "type": "number"
                }
              },
              "required": [
                "bucket",
                "predicted",
                "realized",
                "n"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "market_class",
          "model_version",
          "current_version",
          "n_resolved",
          "allowlisted",
          "reason",
          "deciles"
        ],
        "additionalProperties": false
      }
    },
    "thresholds": {
      "type": "object",
      "properties": {
        "min_n": {
          "type": "number"
        },
        "decile_tolerance": {
          "type": "number"
        },
        "min_decile_n": {
          "type": "number"
        }
      },
      "required": [
        "min_n",
        "decile_tolerance",
        "min_decile_n"
      ],
      "additionalProperties": false
    },
    "window_days": {
      "type": "number"
    },
    "computed_at": {
      "type": "string"
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "current_model_version",
    "classes",
    "thresholds",
    "window_days",
    "computed_at",
    "note"
  ],
  "additionalProperties": false
}

The platform wraps every payload in an envelope: { "data": …, "meta": { endpoint, version, generated_at, freshness, sources, request_id, docs, data_mode } }.

Errors

StatusCodeMeaning
400INVALID_PARAMSInput failed validation; message lists the offending fields.
404NOT_FOUNDNo matching resource; suggestion may point to a sibling endpoint.
410RESOLVEDMarket/event settled; body includes a resolution summary.
503STALE_DATAUpstream feed down; stale data is never silently served beyond 2× cache TTL.
500INTERNALOur bug. The request_id helps us find it.